- 의존성 제어를 위해 하나의 스레드에서 이벤트를 사용하는 것은 장점이 더 많을까 단점이 더 많을까
- 스프링 이벤트 실패건들을 처리하는 방법이 스케줄링 돌리는 것 말고 또 다른 방법이 있는지?
- 본인이 생각하기에 이벤트 처리 실패에 대한 대처 방안은 가장 옳다고 생각하는 것은?
나개발은 MSA 기반의 여행 플랫폼을 개발 중이다. 현재 여행 플랫폼은 사용자가 숙소를 예약할 때 숙소 서비스에서는 HTTP API를 통해 숙소 예약을 다른 MSA 서비스들로 전파하고 있다. 나개발은 이 방식의 한계를 느껴 이벤트 드리븐 아키텍처(EDA)를 적극적으로 사용하기로 결정했다. 나개발은 어떻게 이벤트 발행을 보장할지 고민했다. 도메인 로직이 완료된 이후에 이벤트가 발행되지 않는다면, 해당 이벤트를 바라보는 컨슈머는 특정한 로직을 실행할 수 없게 되고, 이로 인해 전체 서비스의 데이터 정합성이 깨질 수 있기 때문이다. 고민하던 중에 나선배가 말했다.
“트랜잭셔널 아웃박스 패턴을 찾아봐”
나개발이 개발 중인 여행 플랫폼에 트랜잭셔널 아웃박스 패턴을 적용해보자.
- 아웃박스 패턴을 어떻게 구현할지 설계해보자.
- 설계를 바탕으로 코드로 구현해보자. (이벤트 발행을 위해 kafka를 사용한다고 가정하고 kafka 로직은 주석으로 대체한다)