마이크로서비스 아키텍처 환경에서 각 서비스가 독립적인 데이터베이스를 소유하도록 설계할 때 발생할 수 있는 데이터 일관성 및 분산 트랜잭션 문제를 해결하기 위한 데이터베이스 설계 패턴 및 전략(예: Saga 패턴, CQRS, Event Sourcing)을 설명하고, 각 패턴의 장단점과 적용 시나리오를 구체적으로 제시하시오.
힌트 · 마이크로서비스의 데이터 독립성을 유지하면서 비즈니스 트랜잭션의 일관성을 보장하는 것이 핵심입니다. Saga 패턴으로 보상 트랜잭션을 구현하거나, CQRS/Event Sourcing으로 데이터 흐름을 설계하여 해결할 수 있습니다.
모범답안
마이크로서비스 환경에서 데이터 일관성 문제는 중요한 과제입니다. 각 서비스가 독립적인 데이터베이스를 가지므로 분산 트랜잭션이 발생할 수 있기 때문입니다. 이를 해결하기 위한 몇 가지 패턴과 전략이 있습니다.
첫째, Saga 패턴은 긴 비즈니스 트랜잭션을 여러 개의 로컬 트랜잭션으로 나누고, 실패 시 보상 트랜잭션을 통해 롤백하는 방식입니다. 장점은 구현이 비교적 간단하고 각 서비스의 독립성을 유지할 수 있다는 점입니다. 단점은 보상 트랜잭션 구현이 복잡해질 수 있고, 최종적 일관성을 보장한다는 점입니다. 예를 들어, 온라인 쇼핑몰에서 주문 서비스, 결제 서비스, 배송 서비스 간의 트랜잭션을 Saga 패턴으로 관리할 수 있습니다.
둘째, CQRS(Command Query Responsibility Segregation)는 명령(쓰기)과 조회(읽기)를 분리하는 패턴입니다. Event Sourcing과 함께 사용하면 더욱 강력합니다. Event Sourcing은 모든 상태 변경을 이벤트로 기록하고, 이를 통해 현재 상태를 재구성합니다. 장점은 데이터 변경 이력을 추적할 수 있고, 읽기 성능을 향상시킬 수 있다는 점입니다. 단점은 복잡도가 높고, 이벤트 저장소 구축 및 관리가 필요하다는 점입니다. 예를 들어, 은행 계좌 시스템에서 계좌 잔액 변경 이력을 이벤트로 저장하고, 필요에 따라 잔액을 재구성할 수 있습니다.
어떤 패턴을 선택할지는 시스템의 복잡도, 성능 요구사항, 그리고 개발팀의 숙련도에 따라 달라집니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 데이터베이스 설계 면접 질문
- 다중 테넌트(Multi-tenant) SaaS 애플리케이션을 위한 데이터베이스를 설계한다고 가정해 봅시다. 테넌트 데이터 격리 수준(개별 DB, 스키마, 테이블)에 따른 장단점을 설명하고, 각 방식이 데이터 보안, 성능, 확장성, 운영 복잡성에 미치는 영향에 대해 구체적인 설계 전략과 함께 논하시오.
- 대규모 분산 데이터베이스 시스템에서 일관성(Consistency), 가용성(Availability), 파티션 허용(Partition Tolerance) 중 두 가지를 선택해야 하는 CAP 이론의 제약사항을 극복하기 위한 데이터베이스 설계 전략을 설명하고, 특정 비즈니스 요구사항(예: 금융 거래 vs. 소셜 미디어 피드)에 따라 어떤 일관성 모델(강력, 최종, 세션 등)과 분산 트랜잭션 처리 방식을 선택할지 구체적인 시나리오와 함께 논하시오.
- 기업의 데이터 분석 및 의사결정을 위한 데이터 웨어하우스를 설계해야 합니다. OLTP 시스템과 OLAP 시스템의 데이터 모델링 접근 방식의 근본적인 차이점을 설명하고, 스타 스키마(Star Schema)와 스노우플레이크 스키마(Snowflake Schema)의 장단점을 비교하여 특정 분석 요구사항(예: 복잡한 차원 분석 vs. 저장 공간 최적화)에 따라 어떤 스키마를 선택할지 설계 관점에서 설명하시오.
- 서비스 운영 중에 데이터베이스 스키마를 변경해야 하는 상황(예: 컬럼 추가/삭제, 타입 변경, 테이블 분리/병합)이 발생했을 때, 무중단 배포(Zero-downtime deployment)를 지원하면서 데이터 정합성을 유지하기 위한 효과적인 스키마 마이그레이션 전략 및 롤백 방안을 설계 관점에서 설명하시오.
- 이벤트 소싱(Event Sourcing)과 CQRS(Command Query Responsibility Segregation) 패턴을 적용하여 시스템을 설계할 경우, 데이터베이스 구조와 운영 방식에 어떤 근본적인 변화가 발생하는지 설명하고, 전통적인 CRUD 기반의 데이터베이스 설계와 비교하여 장단점 및 적합한 사용 사례를 제시하시오.
- 복잡한 분석 쿼리(예: 다중 조건 조인, 부분 문자열 검색, 공간 데이터 검색)의 성능을 최적화하기 위한 고급 인덱싱 전략을 설명하시오. 특히, 함수 기반 인덱스(Function-Based Index), 부분 인덱스(Partial Index), 커버링 인덱스(Covering Index), 공간 인덱스(Spatial Index) 등의 개념과 실제 적용 사례, 그리고 각 인덱스의 장단점 및 주의사항에 대해 논하시오.