마이크로서비스 아키텍처에서 여러 서비스에 걸친 비즈니스 트랜잭션의 ACID 속성을 보장하기 위해 2PC(Two-Phase Commit)가 아닌 Saga 패턴을 적용하는 경우가 많습니다. Saga 패턴의 종류(Choreography vs Orchestration)와 각각의 장단점을 설명하고, 실제 시스템에서 Saga를 구현할 때 고려해야 할 보상 트랜잭션(Compensation Transaction) 설계 및 실패 처리 전략에 대해 구체적으로 설명해주세요.
힌트 · Saga는 일련의 로컬 트랜잭션으로 구성되며, 실패 시 보상 트랜잭션을 통해 롤백합니다. Choreography는 이벤트 기반, Orchestration은 중앙 코디네이터를 사용하며, 각 방식의 복잡성과 관리 용이성을 비교해야 합니다.
모범답안
마이크로서비스 환경에서 ACID 속성을 보장하기 위해 Saga 패턴을 사용하는 이유는 2PC의 성능 및 가용성 문제 때문입니다. Saga 패턴은 크게 Choreography와 Orchestration 두 가지 방식이 있습니다.
Choreography는 각 서비스가 이벤트를 발행하고 구독하여 다음 단계를 진행하는 방식입니다. 장점은 서비스 간 결합도가 낮고 유연하다는 점이지만, 단점은 전체 워크플로우 파악이 어렵고 디버깅이 복잡해질 수 있다는 것입니다.
Orchestration은 중앙 Orchestrator가 각 서비스의 트랜잭션을 관리하는 방식입니다. 장점은 워크플로우 관리가 용이하고 중앙 집중적인 오류 처리가 가능하다는 점입니다. 단점은 Orchestrator에 의존성이 생기고 복잡도가 증가할 수 있다는 것입니다.
Saga 구현 시 보상 트랜잭션 설계는 매우 중요합니다. 각 트랜잭션에 대한 역연산을 정의하고, 실패 시 이를 실행하여 이전 상태로 되돌려야 합니다. 보상 트랜잭션은 멱등성을 보장해야 합니다. 즉, 여러 번 실행해도 동일한 결과를 내야 합니다. 실패 처리 전략으로는 재시도, 데드레터 큐(Dead-Letter Queue) 활용, 수동 복구 등이 있습니다. 재시도는 일시적인 오류에 효과적이며, 데드레터 큐는 처리 불가능한 메시지를 격리하여 분석하고 복구할 수 있도록 합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 분산 시스템 면접 질문
- 분산 시스템에서 트래픽을 효율적으로 분산하기 위한 로드 밸런싱 알고리즘 중 라운드 로빈(Round Robin)과 최소 연결(Least Connection) 방식의 차이점을 설명하고, 각각 어떤 상황에 더 적합한지 비교해 주세요.
- 마이크로서비스 아키텍처에서 서비스 디스커버리(Service Discovery)가 필요한 이유를 설명하고, 클라이언트 측 디스커버리(Client-side Discovery)와 서버 측 디스커버리(Server-side Discovery) 방식의 동작 원리와 장단점을 비교해 주세요.
- Raft나 Paxos와 같은 분산 합의 알고리즘을 실제 프로덕션 환경에 적용할 때, 이론적인 이해를 넘어 어떤 실질적인 도전 과제에 직면할 수 있으며, 이를 해결하기 위한 설계 및 운영 전략은 무엇인지 설명해주세요. (예: 네트워크 파티션, 노드 장애 복구 시간, 리더 선출 오버헤드 등)
- 분산 시스템에서 강한 일관성(Strong Consistency)과 결과적 일관성(Eventual Consistency) 중 하나를 선택해야 할 때, CAP 이론 외에 비즈니스 요구사항, 시스템 성능, 개발 복잡성 측면에서 어떤 트레이드오프를 고려해야 하는지 구체적인 시나리오를 들어 설명하고, 중간 단계의 일관성 모델(예: Causal, Read-Your-Writes)이 실제 시스템에서 어떻게 활용될 수 있는지 설명해주세요.
- 대규모 분산 시스템에서 캐시를 효과적으로 활용하기 위해 캐시 무효화(Cache Invalidation) 전략은 매우 중요합니다. Read-through, Write-through, Write-back과 같은 기본적인 캐싱 전략 외에, 분산 환경에서 캐시 일관성을 유지하기 위한 구체적인 무효화 기법(예: Cache-aside with TTL, Publisher/Subscriber model, Versioning)들을 설명하고, 각 전략의 장단점 및 적합한 사용 시나리오를 비교 분석해주세요.
- 마이크로서비스 아키텍처에서 수많은 서비스 간의 호출 흐름을 파악하고 성능 병목을 진단하기 위해 분산 트레이싱(Distributed Tracing)은 필수적입니다. OpenTelemetry와 같은 표준을 사용하여 분산 트레이싱 시스템을 설계하고 구축할 때, 어떤 구성 요소(Span, Trace, Context Propagation 등)가 필요하며, 데이터 수집, 저장, 분석 과정에서 발생할 수 있는 주요 기술적 난관(예: 샘플링 전략, 오버헤드, 상관관계 분석)과 해결 방안에 대해 설명해주세요.