핵심 인사이트 (3줄 요약)

  1. 본질: DDD(Domain Driven Design)는 소프트웨어의 복잡성을 해결하기 위해 기술적인 구현보다 비즈니스 도메인(업무 지식) 자체의 논리에 집중하여 설계하는 방법론이다.
  2. 가치: 개발자와 업무 전문가가 동일한 언어(Ubiquitous Language)를 사용해 소통 오해를 없애고, 복잡한 시스템을 명확한 경계(Bounded Context)로 나누어 유지보수성을 극대화한다.
  3. 판단 포인트: MSA 구축 시 "서비스 경계를 어디로 나눌 것인가?"라는 질문에 대해 비즈니스 맥락을 기준으로 가장 명확한 답을 제시해주는 도구다.

Ⅰ. 개요 및 필요성

많은 IT 프로젝트가 실패하는 이유는 개발자가 비즈니스를 잘못 이해하거나, 코드가 너무 복잡해져서 나중에 고칠 수 없게 되기 때문이다. 에릭 에반스가 제안한 DDD는 "프로그램은 비즈니스를 그대로 투영해야 한다"고 말한다. 특히 MSA로 전환할 때 무작정 기능별로 쪼개면 데이터가 꼬이게 된다. DDD는 업무의 '문맥(Context)'을 기준으로 경계를 나누고, 그 안에서만 의미가 통하는 언어를 정의하여 거대한 스파게티 시스템을 질서 정연한 작은 방들로 분리한다.

📢 섹션 요약 비유: DDD는 '전문 분야별 사전 만들기'다. '주문'이라는 단어가 마케팅팀(이벤트 응모)과 배송팀(배송지 정보)에서 다른 의미로 쓰일 때, 이를 섞지 않고 각자의 문맥(Context)에 맞게 따로 정의하는 것이다.


Ⅱ. 아키텍처 및 핵심 원리

1. 전략적 설계 (Strategic Design) - 큰 그림 그리기

  • 보편적 언어 (Ubiquitous Language): 개발자, 기획자, 전문가가 모두 공통으로 사용하는 용어집. 코드 내 변수명도 이 언어를 따른다.
  • 바운디드 컨텍스트 (Bounded Context): 모델이 적용되는 명확한 경계. 이 경계가 곧 마이크로서비스의 단위가 된다.
  • 컨텍스트 맵 (Context Map): 여러 컨텍스트 간의 관계(누가 데이터를 주는지, 누가 받는지)를 도식화한 지도.

2. 전술적 설계 (Tactical Design) - 상세 구현

  • 애그리게이트 (Aggregate): 데이터 변경의 단위가 되는 연관 객체들의 묶음. (예: 주문-주문항목)
  • 엔티티 (Entity): 식별자(ID)를 가진 객체. (예: 회원)
  • 값 객체 (Value Object): 속성만으로 정의되는 불변 객체. (예: 주소, 금액)
  • 리포지토리 (Repository): 애그리게이트를 저장하고 불러오는 인터페이스.

📢 섹션 요약 비유: 애그리게이트는 '하나의 세트 상품'이다. 햄버거 세트에서 감자튀김만 따로 바꾸면 안 되듯이, 연관된 정보를 한꺼번에 관리하여 데이터 깨짐을 막는다.


Ⅲ. 비교 및 연결

데이터 중심 설계 vs 도메인 중심 설계 (DDD)

비교 항목데이터 중심 설계 (전통적 ERD 방식)도메인 주도 설계 (DDD)
설계의 시작DB 테이블 스키마, 관계도(ERD)비즈니스 행위와 업무 전문가의 언어
모델의 성격상태(Data) 중심행위(Behavior) 중심
변화 대응력테이블 수정 시 앱 전체 영향 (경직됨)경계 내 모델만 수정하면 됨 (유연함)
적합한 시스템단순 CRUD 위주 시스템복잡한 비즈니스 로직을 가진 MSA

📢 섹션 요약 비유: 데이터 중심 설계는 건물을 지을 때 벽돌(DB)부터 일단 쌓는 것이고, DDD는 건물의 용도(도메인)와 사람들의 동선(비즈니스 흐름)부터 철저히 계획하는 방식이다.


Ⅳ. 실무 적용 및 기술사 판단

기술사 핵심 포인트:

  1. 이벤트 스토밍 (Event Storming): 포스트잇을 활용해 비즈니스 이벤트를 나열하며 바운디드 컨텍스트를 찾아내는 워크숍 기법을 반드시 언급해야 한다.
  2. 애그리게이트 루트 (Aggregate Root): 외부에서 애그리게이트 내부 객체에 직접 접근하지 못하게 막고, 루트를 통해서만 소통하여 데이터 정합성을 지키는 원칙이 핵심이다.
  3. MSA와의 조화: DDD로 나눈 바운디드 컨텍스트는 서비스 간의 결합도를 낮추고 독립적인 배포를 가능케 하는 MSA의 이론적 토대다.

📢 섹션 요약 비유: DDD는 '비즈니스 언어로 코딩하기'다. 코드를 읽는 것만으로도 실제 업무가 어떻게 돌아가는지 이해할 수 있게 만드는 것이 궁극적 목표다.


Ⅴ. 기대효과 및 결론

DDD는 단순히 기술적인 패턴이 아니라, 비즈니스와 IT의 간극을 좁히는 소통의 철학이다. 기술의 유행은 변해도 비즈니스의 본질은 쉽게 변하지 않는다. 그 본질을 코드에 녹여냄으로써 소프트웨어의 생명력을 연장하고 복잡성을 통제할 수 있다. 기술사 시험에서는 전략적 설계와 전술적 설계의 조화, 그리고 보편적 언어를 통한 소통의 가치를 강조하는 것이 중요하다.

📢 섹션 요약 비유: DDD는 IT 세상의 '통번역 시스템'이다. 비즈니스 사람과 개발자가 서로 다른 언어를 써서 싸우지 않고 하나의 목표로 나아가게 도와준다.


📌 관련 개념 맵

개념연관 키워드관계
Ubiquitous Language공통 언어, 용어 사전소통의 벽을 허무는 DDD의 기초
Bounded Context서비스 경계, MSA 단위모델의 의미가 유효한 영역 설정
Aggregate트랜잭션 단위, 루트데이터 정합성을 지키는 최소한의 묶음
이벤트 스토밍포스트잇, 비즈니스 흐름도메인 경계를 찾아내는 설계 워크숍

👶 어린이를 위한 3줄 비유 설명

  1. 어려운 컴퓨터 용어 대신, 우리가 실제 생활에서 쓰는 말로 프로그램을 만드는 약속이에요.
  2. 복잡한 업무를 작은 팀별로 나누어서, 서로 방해하지 않고 자기 일만 잘하게 구역을 나눠요.
  3. 마치 사전처럼 단어의 뜻을 명확히 정해서 누구나 똑같이 이해할 수 있게 만들어요.