분산 트랜잭션 문제를 어떻게 해결할 수 있나요? 주요 패턴을 설명해주세요.
힌트 · 2PC의 한계, Saga 패턴(Choreography/Orchestration), Outbox 패턴을 설명해보세요.
모범답안
분산 트랜잭션은 여러 서비스에 걸쳐 하나의 논리적인 트랜잭션을 처리해야 할 때 발생합니다. 2PC(Two-Phase Commit)는 간단하지만, 성능 저하나 데드락 문제 때문에 실제 운영 환경에서 사용하기 어렵습니다.
그래서 Saga 패턴을 많이 사용합니다. Saga는 여러 로컬 트랜잭션을 연결하여 전체 트랜잭션을 완성하는 방식입니다. Choreography 방식은 각 서비스가 메시지 이벤트를 통해 서로 통신하며 상태를 변경하는 방식이고, Orchestration 방식은 오케스트레이터라는 중앙 집중식 서비스가 각 서비스의 트랜잭션을 관리합니다.
Outbox 패턴은 트랜잭션과 메시지 발행을 원자적으로 처리하는 데 유용합니다. 서비스가 데이터베이스에 데이터를 저장할 때, 함께 메시지 큐에 발행할 메시지를 Outbox 테이블에 저장합니다. 이후 별도의 프로세스가 Outbox 테이블의 메시지를 읽어 메시지 큐에 발행합니다.
Saga 패턴을 사용할 때는 멱등성을 고려해야 합니다. 메시지 중복으로 인해 같은 로직이 여러 번 실행될 수 있기 때문입니다. 각 서비스는 멱등성을 보장하도록 설계되어야 합니다. TCC(Try-Confirm-Cancel) 패턴도 분산 트랜잭션을 위한 방법 중 하나입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.