대규모 시스템 데이터베이스 아키텍처 면접

대규모 시스템 설계 리드 · 아키텍트 (10년+) 데이터베이스 3문항 조회수 35 · 2026-08-04 (화) 13:37:40
1 데이터 모델링 및 샤딩 전략
Hard

Q. 월 10억 건의 주문이 발생하는 이커머스 플랫폼에서 주문 데이터를 샤딩해야 합니다. 사용자는 자신의 전체 주문 이력 조회, 판매자는 자신이 판매한 상품의 주문 조회, 운영팀은 특정 기간의 전체 주문 통계 조회를 요구합니다. 어떤 샤딩 키 전략을 선택하고, 각 요구사항을 어떻게 충족시키겠습니까?

단일 샤딩 키로는 모든 쿼리 패턴을 효율적으로 처리할 수 없으므로, 다중 데이터 저장소 또는 CQRS 패턴을 고려해보세요.

A. 모범답안

user_id 기반 샤딩을 primary로 선택하여 사용자 주문 조회를 최적화합니다. 판매자 조회를 위해 seller_id 기반으로 샤딩된 별도의 읽기 전용 복제본을 CDC(Change Data Capture)로 동기화하거나, 이벤트 소싱을 통해 판매자 뷰를 구성합니다. 통계 조회는 실시간성이 낮으므로 데이터 웨어하우스(BigQuery, Redshift 등)로 배치 ETL하여 처리합니다. 크로스 샤드 조회가 필요한 경우 Vitess 같은 미들웨어나 애플리케이션 레벨 scatter-gather 패턴을 구현하되, 성능 저하를 고려해 캐싱과 페이지네이션을 필수로 적용합니다. 샤드 리밸런싱과 핫스팟 방지를 위해 consistent hashing과 가상 샤드 개념을 도입합니다.

핵심 포인트
  • • user_id 기반 primary 샤딩으로 주요 쿼리 패턴 최적화
  • • CQRS 패턴으로 seller_id 기반 읽기 모델 분리 구성
  • • 통계성 쿼리는 데이터 웨어하우스로 분리하여 OLTP 부하 방지
  • • 샤드 리밸런싱과 핫스팟 관리 전략 수립
답변에 넣으면 좋은 키워드
샤딩 키 CQRS CDC scatter-gather consistent hashing 핫스팟
실무에서는

대규모 이커머스, 소셜 미디어, SaaS 플랫폼에서 데이터 증가에 따른 수평 확장 시 필수적으로 고려해야 하는 아키텍처 결정입니다.

Follow-up 질문

샤딩된 환경에서 글로벌 유니크 ID를 생성하는 방법과 각 방식의 트레이드오프를 설명해주세요.

2 트랜잭션 및 락 최적화
Hard

Q. 결제 시스템에서 사용자 잔액 차감, 거래 내역 기록, 포인트 적립, 외부 PG사 API 호출이 하나의 트랜잭션으로 묶여 있어 락 경합과 긴 트랜잭션 시간으로 인한 성능 저하가 발생하고 있습니다. 데이터 일관성을 보장하면서도 동시성을 개선할 수 있는 아키텍처 개선 방안을 제시해주세요.

외부 API 호출을 동기 트랜잭션에서 분리하고, 보상 트랜잭션과 이벤트 기반 아키텍처를 고려해보세요.

A. 모범답안

외부 PG API 호출을 트랜잭션에서 분리하여 2PC 대신 Saga 패턴을 적용합니다. 잔액 차감과 거래 내역 기록만 ACID 트랜잭션으로 처리하고, 상태를 PENDING으로 기록합니다. PG 호출은 비동기로 처리하고 성공 시 상태를 COMPLETED로 변경, 실패 시 보상 트랜잭션으로 잔액을 복구합니다. 포인트 적립은 이벤트 기반으로 분리하여 eventual consistency를 허용합니다. 잔액 업데이트 시 SELECT FOR UPDATE 대신 optimistic locking(version 컬럼)을 사용하거나, Redis를 이용한 분산 락으로 데이터베이스 락 경합을 줄입니다. 멱등성 키를 도입하여 재시도 시 중복 처리를 방지하고, outbox 패턴으로 이벤트 발행의 원자성을 보장합니다.

핵심 포인트
  • • Saga 패턴으로 긴 트랜잭션 분리 및 보상 트랜잭션 구현
  • • 외부 API 호출을 비동기로 분리하여 트랜잭션 시간 단축
  • • Optimistic locking 또는 분산 락으로 락 경합 최소화
  • • Outbox 패턴과 멱등성으로 데이터 일관성 보장
답변에 넣으면 좋은 키워드
Saga 패턴 보상 트랜잭션 optimistic locking outbox 패턴 멱등성 eventual consistency
실무에서는

결제, 예약, 주문 시스템 등 외부 시스템 연동이 필요한 금융 트랜잭션에서 성능과 일관성을 동시에 확보해야 할 때 적용됩니다.

Follow-up 질문

Saga 패턴에서 보상 트랜잭션이 실패하는 경우 어떻게 처리하시겠습니까?

3 쿼리 최적화 및 인덱스 전략
Hard

Q. 1억 건의 게시글 테이블에서 다양한 필터 조합(작성자, 카테고리, 태그, 작성일, 인기도)으로 검색하는 기능이 있습니다. 사용자마다 필터 조합이 다르고 실시간 정렬이 필요한데, 모든 경우의 수에 복합 인덱스를 만들 수 없는 상황입니다. 어떤 인덱스 전략과 아키텍처를 제안하시겠습니까?

RDBMS의 인덱스 한계를 인정하고, 검색 엔진이나 하이브리드 아키텍처를 고려해보세요.

A. 모범답안

Elasticsearch나 OpenSearch 같은 검색 엔진을 도입하여 복잡한 필터링과 전문 검색을 처리합니다. RDBMS는 트랜잭션 데이터의 source of truth로 유지하고, CDC(Debezium 등)를 통해 검색 엔진과 준실시간 동기화합니다. 자주 사용되는 필터 조합(작성일 + 카테고리 등)에만 선택적으로 복합 인덱스를 생성하고, covering index로 디스크 I/O를 줄입니다. 인기도 같은 자주 변경되는 컬럼은 별도 테이블로 분리하여 인덱스 재구성 비용을 최소화합니다. 쿼리 패턴 분석을 위해 slow query log와 APM을 모니터링하고, 실제 사용 빈도 기반으로 인덱스를 주기적으로 재평가합니다. 파티셔닝(작성일 기준)을 적용하여 오래된 데이터 스캔을 줄이고, 필요시 materialized view나 summary table로 집계 쿼리를 최적화합니다.

핵심 포인트
  • • 검색 엔진(Elasticsearch) 도입으로 복잡한 필터링 오프로드
  • • CDC 기반 RDBMS-검색엔진 동기화로 하이브리드 아키텍처 구성
  • • 사용 빈도 기반 선택적 인덱스 전략과 covering index 활용
  • • 파티셔닝과 테이블 분리로 쿼리 범위 최소화
답변에 넣으면 좋은 키워드
Elasticsearch CDC covering index 파티셔닝 materialized view 하이브리드 아키텍처
실무에서는

커머스 상품 검색, 콘텐츠 플랫폼의 게시글 검색, 로그 분석 시스템 등 복잡한 필터링과 대용량 데이터 검색이 필요한 서비스에서 활용됩니다.

Follow-up 질문

검색 엔진과 RDBMS 간 데이터 불일치가 발생했을 때 어떻게 감지하고 복구하시겠습니까?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!