글로벌 데이터 스토리지 계약
ACID·NoSQL·CAP을 트랜잭션 범위와 일관성/가용성 계약 관점에서 선택하는 의사결정 가이드
Posted
By okorion
글로벌 데이터 스토리지 계약
왜 데이터 저장소를 ‘계약’으로 봐야 하는가
왜
대규모 시스템의 장애는 대부분 데이터 경계에서 발생한다. 트랜잭션 범위를 넓히면 지연과 비용이 터지고, 일관성을 풀면 사용자 신뢰가 깨진다. 저장소는 기술이 아니라 약속이다.
무엇
- ACID: 강한 일관성 계약
- NoSQL: 확장/지연을 우선한 계약
- CAP: 분산에서 반드시 깨지는 상황을 전제로 한 선택 규칙
어떻게
도메인을 트랜잭션이 필요한 구간과 필요 없는 구간으로 쪼개고, 구간별로 다른 계약을 체결한다.
통일 사례: 커머스 주문/결제
- 사용자: 웹/모바일
- 트래픽: 평시 대비 이벤트 8~10배
- 요구: 중복 결제 불가, 조회는 빠르게
- 글로벌 사용자 존재
1) 트랜잭션이 필요한 구간 vs 필요 없는 구간
모든 데이터에 ACID를 적용하는 순간, 비용은 기하급수로 증가한다.
| 구간 | 예시 | 트랜잭션 필요 | 이유 |
|---|---|---|---|
| 결제 승인 | 카드 승인/차감 | 필요 | 금전 손실 방지 |
| 주문 상태 변경 | 결제→배송 | 필요 | 상태 불일치 방지 |
| 상품 조회 | 리스트/상세 | 불필요 | 읽기 중심 |
| 리뷰/조회수 | 카운트 | 불필요 | 지연 허용 |
| 검색 인덱스 | 키워드 | 불필요 | eventual 허용 |
2) ACID를 실무 사고로 해석하기
ACID는 공짜가 아니다. 비용이 어디서 터지는지를 알아야 한다.
Atomicity
- 의미: 전부 성공/전부 실패
- 비용 지점: 롤백 로그, 잠금
- 실무 판단: 결제/정산에만 적용
Consistency
- 의미: 규칙 위반 불가
- 비용 지점: 검증 로직, 동기화
- 실무 판단: 비즈니스 규칙 핵심만
Isolation
- 의미: 동시성 간섭 차단
- 비용 지점: 락/지연
- 실무 판단: READ COMMITTED 이상은 신중
Durability
- 의미: 커밋 후 영구 보존
- 비용 지점: fsync, 복제
- 실무 판단: 금전 데이터만 강제
3) NoSQL 분류와 적합 워크로드
NoSQL은 ‘비관계’가 아니라 ‘다른 계약’이다.
| 유형 | 특징 | 적합 워크로드 |
|---|---|---|
| 키-값 | 단순/빠름 | 세션, 캐시 |
| 문서 | 스키마 유연 | 게시글, 프로필 |
| 컬럼 | 대량 분석 | 로그, 이벤트 |
| 그래프 | 관계 탐색 | 추천, 소셜 |
주의: 조인/트랜잭션 요구가 생기면 비용이 급증한다.
4) DB 확장·가용성·성능 개선 기법 (얻는 것/잃는 것)
기법은 해결책이 아니라 교환이다.
- 인덱스
- 얻는 것: 조회 성능
- 잃는 것: 쓰기 지연, 저장공간
- 캐시
- 얻는 것: 지연 감소
- 잃는 것: 정합성 관리 비용
- 리드 레플리카
- 얻는 것: 읽기 확장
- 잃는 것: 복제 지연
- 샤딩
- 얻는 것: 수평 확장
- 잃는 것: 조인/트랜잭션 복잡도
- 파티셔닝
- 얻는 것: 관리/성능
- 잃는 것: 설계 고정
- CQRS
- 얻는 것: 읽기/쓰기 분리
- 잃는 것: 운영 복잡도
- 비동기 쓰기
- 얻는 것: 응답 속도
- 잃는 것: 즉시 일관성
5) CAP 정리: 선택이 강제되는 현실
네트워크 파티션은 가정이 아니라 일상이다.
왜 ‘P’는 선택이 아닌가
- 리전 간 통신
- 장애/패킷 드롭
- 클라우드 네트워크 이슈
→ 분산이면 반드시 발생
CP/AP를 요구하는 시나리오 3개
- 결제 승인
- 선택: CP
- 이유: 중복 결제는 치명적
- 상품 조회
- 선택: AP
- 이유: 약간 오래된 데이터 허용
- 재고 표시
- 선택: 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.
