본문으로 바로가기
📘

11단계: 아키텍처 마스터리 (Architecture Mastery)

대규모 분산 시스템에서 발생하는 데이터 정합성 문제와 무한 확장을 위한 샤딩, 그리고 복잡한 도메인을 다루는 DDD까지 아키텍트 레벨의 난제를 다룹니다.

모듈형 학습 자동 정렬

🧠 모듈 개요

이 단계에서 얻는 것

시스템이 커지면 더 이상 “하나의 DB 트랜잭션"으로 모든 것을 해결할 수 없습니다.
이 단계에서는 수평 확장의 끝판왕인 Sharding과, 서비스 간 정합성을 맞추는 Distributed Transaction, 그리고 비즈니스 복잡도를 제어하는 DDD를 통해 진정한 시니어 엔지니어, 아키텍트로 거듭납니다.

  • Data Consistency: 서비스가 쪼개져도 데이터가 깨지지 않게 하는 Saga 패턴과 TCC를 배웁니다.
  • Scalability: 데이터 10억 건, 사용자 1억 명을 감당하는 샤딩과 Consistent Hashing 원리를 이해합니다.
  • Complexity: “어디까지 쪼개야 하는가?“에 대한 답을 DDD Aggregate Root로 정의합니다.

커리큘럼 (Topic List)

1. 분산 트랜잭션 (Distributed Transactions)

  • 2PC (Two-Phase Commit): XA 트랜잭션의 동작 원리와 치명적인 단점(Blocking).
  • SAGA Pattern: Choreography(이벤트) vs Orchestration(지휘자). 보상 트랜잭션(Compensating Transaction) 설계.
  • TCC (Try-Confirm-Cancel): 예약 시스템 등에서 사용하는 애플리케이션 레벨 트랜잭션.

2. 대규모 데이터 확장 (Sharding)

  • Sharding Strategies: Range(범위) vs Hash(해시) vs Directory(룩업) 샤딩 비교.
  • Consistent Hashing: 서버가 추가/삭제되어도 데이터 이동을 최소화하는 해싱 알고리즘.
  • Global ID Generation: 분산 환경에서 유니크 ID 만들기 (Snowflake, UUID).

3. 도메인 주도 설계 (Advanced DDD)

  • Aggregate Root: 트랜잭션의 일관성 경계이자 진입점. “한 트랜잭션에 하나만 수정한다"는 원칙.
  • Bounded Context: 언어와 모델의 의미가 통용되는 경계 설정.
  • Domain Events: 결과적 정합성(Eventual Consistency)을 달성하는 핵심 도구.

4. 운영 가능한 도메인 상태

  • 상태 전이표: 주문, 결제, 업로드, 배치처럼 실패와 재처리가 있는 흐름은 허용 전이와 금지 전이를 먼저 정의합니다.
  • 불변식과 감사 이력: 금전, 권한, 삭제, 공개 상태는 현재값만 저장하지 말고 전이 근거와 actor를 함께 남깁니다.
  • Outbox/이벤트 연계: 상태 변경 뒤 필요한 메시지 발행은 같은 트랜잭션 경계에서 기록하고 비동기로 전달합니다.

5. 멀티테넌트 운영 생명주기

  • Tenant Lifecycle: 테넌트를 단순 고객 row가 아니라 provisioning, active, suspended, delete_requested, retained, purging, purged 전이를 가진 운영 객체로 봅니다.
  • Offboarding Manifest: 종료 요청에는 승인자, 사유, export 여부, 보존 종료 시각, 삭제 대상 리소스 수, 검증 결과를 남겨야 합니다.
  • Purge 검증: RDB row만 지우지 않고 검색 인덱스, 오브젝트 스토리지, 캐시, 외부 SaaS 잔여 데이터까지 0인지 확인합니다.

이 단계의 핵심 주제

  • 분산 트랜잭션(2PC/Saga/TCC) 설계
  • 샤딩/라우팅/리밸런싱 전략
  • DDD 전술 패턴과 경계(Bounded Context)
  • 운영용 상태 머신과 도메인 불변식 설계
  • 멀티테넌트 온보딩, 정지, 오프보딩, purge 증명 설계

미니 실습

  • SAGA 시퀀스 설계: 성공/실패/보상 흐름 작성
  • 샤딩 재배치 시나리오: 노드 추가 시 데이터 이동량 계산
  • Aggregate 경계 설계: 트랜잭션 경계 1개로 제한하는 모델 작성
  • 상태 전이표 작성: 주문 또는 업로드 흐름의 허용 전이, 금지 전이, 수동 확인 큐를 표로 정리
  • 테넌트 종료 manifest 작성: 고객사 하나를 종료한다고 가정하고 DB, object storage, search index, queue, cache, 외부 SaaS 삭제 대상을 목록화

완료 기준

  • 대규모 시스템의 핵심 난제를 구조적으로 설명할 수 있다
  • 데이터 정합성과 확장성의 균형점을 말로 정리할 수 있다
  • 도메인 경계가 어긋날 때 생기는 문제를 설명할 수 있다
  • 상태가 있는 업무 흐름에서 전이표, 불변식, 감사 이력을 설계할 수 있다
  • 테넌트 생성·정지·종료·삭제 검증을 상태 전이와 운영 증거로 설명할 수 있다

추천 학습 자료

  • : Microservices Patterns (마이크로서비스 패턴) - 크리스 리처드슨
  • : Domain-Driven Design (도메인 주도 설계) - 에릭 에반스 (Blue Book)

🔗 추천 학습 경로

DDD Aggregate

상태 전이와 일관성 경계를 aggregate 단위로 묶는 방법을 함께 봅니다.

Tenant Lifecycle와 Offboarding

멀티테넌트 SaaS에서 생성, 정지, 종료, 보존, purge 검증을 운영 상태 기계로 설계하는 기준입니다.

분산 트랜잭션

서비스 간 정합성을 맞출 때 2PC, Saga, 보상 트랜잭션의 선택 기준을 정리합니다.

📑 이 모듈의 학습 노트

Architecture

CQRS: 명령과 조회의 분리

CQRS 패턴의 개념, 읽기/쓰기 모델 분리, Event Sourcing과의 조합 가이드

CQRS Architecture DDD
Architecture

DDD 심화: Aggregate Root와 트랜잭션 경계

DDD에서 가장 자주 무너지는 Aggregate 경계를 실무 시나리오로 풀어내고, 트랜잭션 범위와 결과적 일관성의 판단 기준을 정리합니다.

DDD Aggregate Transaction