- 모놀리식 서비스를 많이 개발하고, 운영도 조금 해봤을 것 같은데, 실제로 이 Chatper 를 읽고 공감가는 내용이 있었는지? 또, 문제라고 인식되는 부분이나 불편했던 점이 있었는지 궁금쓰
- 분산 트랜잭션을 사용하지 않는다면 어떻게 데이터 일관성을 보장할 것인가?
- 마이크로 아키텍처 서비스의 경우 각 컴포넌트마다 별도의 DB를 사용하는 것인지?
- 마이크로 아키텍처 서비스에서의 트랜잭션은 필수적이지 않은건가?
- 분산 트랜잭션을 적용하는 방법
결제 서비스는 데이터 일관성이 절대 틀어지면 안되는 서비스이다. PG사와 통신을 하며 실질적인 결제 서비스를 하는 PaymentServer 가 있다. 또한 회계처리를 위한 별도의 정산 서버인 Ledger 서버도 존재한다. 사용자의 결제 요청이 오면, PaymentServer 는 PSP 에 결제 동기요청을 보내고, 이에 대한 응답을 PaymentServer DB에 저장하고, 사용자에게 전달한다. 이때 정산 서버에 거래내역을 저장하는 것은 실시간성이 필요없어, 카프카를 통한 메세징 방식으로 처리하려고 한다.
위 방식에서 결제 응답 결과와 정산 결과의 데이터 일관성을 보장할 수 있도록 설계해보자.
- hint : 요청에 대한 응답을 정상적으로 받고, 메세지 전송을 성공해도 해당 트랜잭션이 롤백된다면 각각의 서버의 DB 상태는 어떻게 될까.
- 답: 아웃박스 패턴