Post

글로벌 데이터 스토리지 계약

ACID·NoSQL·CAP을 트랜잭션 범위와 일관성/가용성 계약 관점에서 선택하는 의사결정 가이드

글로벌 데이터 스토리지 계약

왜 데이터 저장소를 ‘계약’으로 봐야 하는가

대규모 시스템의 장애는 대부분 데이터 경계에서 발생한다. 트랜잭션 범위를 넓히면 지연과 비용이 터지고, 일관성을 풀면 사용자 신뢰가 깨진다. 저장소는 기술이 아니라 약속이다.

무엇

  • ACID: 강한 일관성 계약
  • NoSQL: 확장/지연을 우선한 계약
  • CAP: 분산에서 반드시 깨지는 상황을 전제로 한 선택 규칙

어떻게

도메인을 트랜잭션이 필요한 구간필요 없는 구간으로 쪼개고, 구간별로 다른 계약을 체결한다.


통일 사례: 커머스 주문/결제

  • 사용자: 웹/모바일
  • 트래픽: 평시 대비 이벤트 8~10배
  • 요구: 중복 결제 불가, 조회는 빠르게
  • 글로벌 사용자 존재

1) 트랜잭션이 필요한 구간 vs 필요 없는 구간

모든 데이터에 ACID를 적용하는 순간, 비용은 기하급수로 증가한다.

구간예시트랜잭션 필요이유
결제 승인카드 승인/차감필요금전 손실 방지
주문 상태 변경결제→배송필요상태 불일치 방지
상품 조회리스트/상세불필요읽기 중심
리뷰/조회수카운트불필요지연 허용
검색 인덱스키워드불필요eventual 허용

2) ACID를 실무 사고로 해석하기

ACID는 공짜가 아니다. 비용이 어디서 터지는지를 알아야 한다.

Atomicity

  • 의미: 전부 성공/전부 실패
  • 비용 지점: 롤백 로그, 잠금
  • 실무 판단: 결제/정산에만 적용

Consistency

  • 의미: 규칙 위반 불가
  • 비용 지점: 검증 로직, 동기화
  • 실무 판단: 비즈니스 규칙 핵심만

Isolation

  • 의미: 동시성 간섭 차단
  • 비용 지점: 락/지연
  • 실무 판단: READ COMMITTED 이상은 신중

Durability

  • 의미: 커밋 후 영구 보존
  • 비용 지점: fsync, 복제
  • 실무 판단: 금전 데이터만 강제

3) NoSQL 분류와 적합 워크로드

NoSQL은 ‘비관계’가 아니라 ‘다른 계약’이다.

유형특징적합 워크로드
키-값단순/빠름세션, 캐시
문서스키마 유연게시글, 프로필
컬럼대량 분석로그, 이벤트
그래프관계 탐색추천, 소셜

주의: 조인/트랜잭션 요구가 생기면 비용이 급증한다.


4) DB 확장·가용성·성능 개선 기법 (얻는 것/잃는 것)

기법은 해결책이 아니라 교환이다.

  1. 인덱스
    • 얻는 것: 조회 성능
    • 잃는 것: 쓰기 지연, 저장공간
  2. 캐시
    • 얻는 것: 지연 감소
    • 잃는 것: 정합성 관리 비용
  3. 리드 레플리카
    • 얻는 것: 읽기 확장
    • 잃는 것: 복제 지연
  4. 샤딩
    • 얻는 것: 수평 확장
    • 잃는 것: 조인/트랜잭션 복잡도
  5. 파티셔닝
    • 얻는 것: 관리/성능
    • 잃는 것: 설계 고정
  6. CQRS
    • 얻는 것: 읽기/쓰기 분리
    • 잃는 것: 운영 복잡도
  7. 비동기 쓰기
    • 얻는 것: 응답 속도
    • 잃는 것: 즉시 일관성

5) CAP 정리: 선택이 강제되는 현실

네트워크 파티션은 가정이 아니라 일상이다.

왜 ‘P’는 선택이 아닌가

  • 리전 간 통신
  • 장애/패킷 드롭
  • 클라우드 네트워크 이슈
    → 분산이면 반드시 발생

CP/AP를 요구하는 시나리오 3개

  1. 결제 승인
    • 선택: CP
    • 이유: 중복 결제는 치명적
  2. 상품 조회
    • 선택: AP
    • 이유: 약간 오래된 데이터 허용
  3. 재고 표시
    • 선택: CP 또는 분리
    • 전략: 결제는 CP, 표시는 AP

6) 글로벌 환경에서의 분리 전략

하나의 저장소로 모두 해결하려는 순간 실패한다.

  • 결제/정산: RDB + 강한 ACID (단일 리전 또는 강한 복제)
  • 주문 조회: 리드 레플리카/캐시
  • 검색/추천: NoSQL/인덱스 스토어
  • 로그/이벤트: 컬럼/오브젝트 스토리지

면접 답변 템플릿

  • “이 도메인은 금전 손실 위험이 있어 일관성 요구가 강함CP 성향 선택”
  • “결제는 ACID RDB, 조회는 캐시+AP 스토어로 분리”
  • “트랜잭션 범위를 결제 승인까지로 제한해 지연을 통제”

저장소 선택 의사결정 표

워크로드일관성지연비용운영 난이도선택
결제높음RDB
주문 조회낮음RDB+Cache
검색낮음NoSQL
로그높음낮음낮음컬럼/오브젝트

재학습 체크리스트 (12)

  • 트랜잭션 범위를 최소화했는가
  • ACID 비용을 인지했는가
  • 읽기/쓰기를 분리했는가
  • 캐시 무효화 전략이 있는가
  • 복제 지연을 설명할 수 있는가
  • 샤딩 키가 고정됐는가
  • CAP 선택을 말할 수 있는가
  • 글로벌 지연을 고려했는가
  • 비용 증가를 감당 가능한가
  • 운영 복잡도를 계산했는가
  • 되돌릴 수 있는가
  • 하나의 DB로 모든 문제를 풀려 하지 않았는가

한 줄 요약

데이터 저장소는 성능 비교가 아니라, 실패를 어떻게 감당할지에 대한 계약이다.


This post is licensed under CC BY 4.0 by the author.