패스잇
시스템 설계 · 심화

마이크로서비스 아키텍처에서 여러 서비스에 걸친 비즈니스 트랜잭션의 ACID 속성을 보장하기 위해 2PC(Two-Phase Commit)가 아닌 Saga 패턴을 적용하는 경우가 많습니다. Saga 패턴의 종류(Choreography vs Orchestration)와 각각의 장단점을 설명하고, 실제 시스템에서 Saga를 구현할 때 고려해야 할 보상 트랜잭션(Compensation Transaction) 설계 및 실패 처리 전략에 대해 구체적으로 설명해주세요.

힌트 · Saga는 일련의 로컬 트랜잭션으로 구성되며, 실패 시 보상 트랜잭션을 통해 롤백합니다. Choreography는 이벤트 기반, Orchestration은 중앙 코디네이터를 사용하며, 각 방식의 복잡성과 관리 용이성을 비교해야 합니다.

Saga 패턴ChoreographyOrchestration보상 트랜잭션멱등성

모범답안

마이크로서비스 환경에서 ACID 속성을 보장하기 위해 Saga 패턴을 사용하는 이유는 2PC의 성능 및 가용성 문제 때문입니다. Saga 패턴은 크게 Choreography와 Orchestration 두 가지 방식이 있습니다.

Choreography는 각 서비스가 이벤트를 발행하고 구독하여 다음 단계를 진행하는 방식입니다. 장점은 서비스 간 결합도가 낮고 유연하다는 점이지만, 단점은 전체 워크플로우 파악이 어렵고 디버깅이 복잡해질 수 있다는 것입니다.

Orchestration은 중앙 Orchestrator가 각 서비스의 트랜잭션을 관리하는 방식입니다. 장점은 워크플로우 관리가 용이하고 중앙 집중적인 오류 처리가 가능하다는 점입니다. 단점은 Orchestrator에 의존성이 생기고 복잡도가 증가할 수 있다는 것입니다.

Saga 구현 시 보상 트랜잭션 설계는 매우 중요합니다. 각 트랜잭션에 대한 역연산을 정의하고, 실패 시 이를 실행하여 이전 상태로 되돌려야 합니다. 보상 트랜잭션은 멱등성을 보장해야 합니다. 즉, 여러 번 실행해도 동일한 결과를 내야 합니다. 실패 처리 전략으로는 재시도, 데드레터 큐(Dead-Letter Queue) 활용, 수동 복구 등이 있습니다. 재시도는 일시적인 오류에 효과적이며, 데드레터 큐는 처리 불가능한 메시지를 격리하여 분석하고 복구할 수 있도록 합니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 분산 시스템 면접 질문

← 분산 시스템 면접 질문 전체 보기