TIL

[TIL] 프로세스의 끝부분에서 에러가 났는데 그게 하나의 트랜잭션이라서...

봄봄로그 2023. 7. 27. 21:55

오늘 또 하나를 배웠는데.. 너무어렵다..

java 버전업을 한 api하나를 배포했는데, 로직을 바꾼 것이 없고 자바버전만 바꾼 것인데다가 표준으로 배포했을 때도 문제가 없(는줄 알았는데..)어서 온프레미스 환경에서 배포를 진행했다.

 

그렇게 몇 주가 흘렀는데....;

문제는 몇 주가 흘러서 발견되는 것인가...? 사실 이게 직접적인 영향인지 아닌지도 모르지만 문제해결보단...

 

- 문제 : 하나의 큰 프로세스인 A프로세스가 있는데, A 안엔 a-b-c-d 순서대로 돌아간다. 그리고 A가 제대로 실행되지 않았다.

 

여기서 a-b-c 는 DB 패키지 프로시져로 돌아가고 d는 자바단에서 ddd라는 api를 호출하는 연동부분이다.

java 버전업을 진행한 부분은 ddd api였는데..!! 

 

서버로그에서 에러가 나는 것을 보면 a-b-c까지는 정상적으로 로그가 찍히고 d를 찍을 때 쓰레드 번호가 뒤죽박죽으로 되면서 시간이 걸리고 에러가 났다.

[xxxxxx-xxxxxx-3]
[xxxxxx-xxxxxx-3]
[xxxxxx-xxxxxx-3]
[xxxxxx-xxxxxx-1]
[xxxxxx-xxxxxx-1]
[xxxxxx-xxxxxx-3]
[xxxxxx-xxxxxx-3]

원래는 3이 연속적으로 찍히도록 되어있는데 d가 돌아가는 부분에서 저렇게 1이 나중에 찍히는 것이다. 혹시 저것이 문제였을까 싶었다.

 

❗근데 내가 이해가 안됐던 것은 a-b-c는 패키지로 한번에 돌고 d는 나중에 벌어지는 일인데 왜 a-b-c까지 영향을 미치느냐 였다.❗

 

왜냐면 a-b-c는 전부 패키지에서 처리하고 커밋하니까 이미 상태값은 다 바뀌고 프로세스가 끝난 다음에 d를 연동하기만 하는건데 d에서 문제가 생겼다고해서 영향을 미치면 안되는 것이 아닌가? 하는 부분이었다.

 

알고보니 A프로세스 a~d는 하나의 트랜잭션으로 돌고있었다.. 휴...^^; service단을 보면 @Trancsactional 이 걸려있는 것을 확인할 수 있었다.

그리고 원래 제대로 만들었다면 a~c와 d는 서로 영향을 주면 안되는 것이 맞았는데 대체 누가 이렇게 만들었을까?

그리고 왜 나는 이 솔루션을 맡게 되었을까 너무나도 억장이 무너졌다.. 이것은 이제 내가 고쳐야겠지.... 잘 고치고 고친 이야기도 TIL에 잘 남겨보겠어요....... 일단 눈물부터 닦자...~