백엔드 개발 · 심화
MSA 환경에서 여러 서비스에 걸친 분산 트랜잭션을 구현해야 할 때, Spring 환경에서 어떤 접근 방식(예: 2PC, Saga 패턴)을 고려할 수 있으며, 각 방식의 장단점과 실제 구현 시 고려사항은 무엇인지 설명해 주세요.
힌트 · 2PC는 동기적이고 복잡하며, Saga는 비동기적이고 보상 트랜잭션을 포함합니다. 각 패턴의 일관성 모델과 복구 전략을 비교하여 설명하세요.
2PCSaga 패턴분산 트랜잭션ACID멱등성
모범답안
MSA 환경에서 분산 트랜잭션 처리는 중요한 과제입니다. Spring 환경에서는 주로 두 가지 접근 방식을 고려할 수 있습니다.
첫째, 2PC(Two-Phase Commit) 패턴입니다. 이는 전통적인 ACID 트랜잭션의 원자성을 분산 환경으로 확장하는 방식입니다. 트랜잭션 코디네이터가 참여 서비스들에게 커밋 또는 롤백 명령을 내리는 2단계로 진행됩니다.
- 장점: 강력한 일관성(Strong Consistency)을 보장합니다. 모든 참여자가 성공해야만 커밋되므로 데이터 불일치 위험이 적습니다.
- 단점: 동기적이고 블로킹 방식이라 성능 저하가 발생할 수 있습니다. 코디네이터나 참여 서비스 장애 시 복구가 복잡하며, 서비스 간 결합도가 높아집니다. Spring에서는 JTA(Java Transaction API) 등을 통해 구현할 수 있습니다.
둘째, Saga 패턴입니다. 이는 각 서비스를 독립적인 로컬 트랜잭션으로 처리하고, 실패 시 이전 트랜잭션을 보상하는 방식으로 분산 트랜잭션을 관리합니다.
- 장점: 비동기적이고 느슨한 결합을 지원하여 확장성과 가용성이 높습니다. 각 서비스는 독립적으로 운영될 수 있습니다.
- 단점: 최종 일관성(Eventual Consistency)을 제공합니다. 보상 트랜잭션 구현이 복잡하며, 멱등성(Idempotency) 처리가 필수적입니다. Spring에서는 Kafka, RabbitMQ와 같은 메시징 시스템을 활용하거나 Spring Cloud Sleuth, Spring Cloud Stream 등을 통해 구현할 수 있습니다.
실제 구현 시에는 서비스의 특성, 요구되는 일관성 수준, 성능 요구사항 등을 종합적으로 고려하여 적합한 패턴을 선택해야 합니다. 2PC는 강력한 일관성이 필수적인 경우에, Saga는 높은 가용성과 확장성이 중요한 경우에 적합합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Java / Spring 면접 질문
- Java의 synchronized 키워드와 ReentrantLock의 차이점은 무엇인가요?
- Spring WebFlux와 기존 Spring MVC의 차이점은 무엇인가요?
- Java의 volatile 키워드의 역할과 사용 시 주의사항에 대해 설명해주세요.
- Spring Security를 사용하여 OAuth 2.0/OIDC 기반의 인증/인가 시스템을 구축할 때, 토큰 발급 및 검증 과정에서 JWT를 활용하는 경우의 장점과 보안 고려사항(예: 토큰 탈취, 리플레이 어택 방지)은 무엇이며, 이를 Spring Security에서 어떻게 구현할 수 있는지 구체적으로 설명해 주세요.