향해99

이석범코치님 qna 트랙잭션과 관심사 분리를 위한 과정

dev_0hoon 2024. 8. 7. 21:55

여기서 주문정보전달은 결제의 부가적인 로직이기 때문에 분리 되어야 한다.

 

 

주문정보전송은 sendOrderInfo는 대충 목으로 만들어줬다.

 

1) 주문정보 전송이 늦어지면 결제처리에 대한 프로세스도 함께 지연된다.

 

2) 데이터 수집 플랫폼으로 주문데이터가 전달 api가 실패했을 떄, 결제가 취소된다.

 

3) 데이터 수집 플랫폼으로 주문데이터 전달 api가 timeout이 발생했을 떄도 결제가 취소된다.

- 반대로 데이터 수집플랫폼은 실패한 결제임에도 저장이되고, 우리 시스템에서는 결제 실패가 되어 데이터가 맞지 않게된다.

 

 

위의 코드는 예이다. 제대로 작동하진 않을 것이다 (aop로 돌아가는 트랜잭션이기에?)

 

1) 이렇게 트랜잭션을 나눈다면?

- 데이터는 정상적으로 결제에 대한 트랜잭션이 있어 결제만 관리가된다.

- 하지만 sendOrderInfo()가 끝나지 않는한 프로세스는 끝나지 않는다.

 

 

이렇게하면 다 나눌 수는 있지만, 데이터 플랫폼에서 오류가 나서 데이터를 재전송 시켜줘야 한다.

-> 이건 다음.. 토요일에 수업해주신다.

 

 

로그정도 남기는 것 밖엔,, 아직은..

 

application event publisher spring으로 검색해보면 됌