도메인 모델과 DDD란?(1)

DevelopHeo·2025년 7월 18일

도메인 주도 개발

목록 보기
1/3

🌗 0. 들어가며

최근 최범균 저자의 ‘도메인 주도 개발 시작하기’를 읽었는데 시간이 지나니 휘발되는 거 같아서 이를 기록하고 싶어서 블로그에 쓰게 되었습니다.
백엔드 개발자로서 개발을 하기 전에 막무가내 구현만 완성하는 것이 아닌 왜 이런 코드를 작성하였는지 설계 단계부터 향후 유지보수까지 생각하며 개발하는 것과 좋은 코드를 만드는 것은 무엇인가를 고민하던 찰나에 이 책을 읽게 되었는데 많은 도움이 된 거 같습니다.

🌗 1. 도메인이란?

  • DDD(Domain-Driven Design) 아키텍처는 복잡한 비즈니스 도메인을 중심으로 소프트웨어를 설계하는 방법론
  • 핵심은 비즈니스 로직을 기술적 구현으로부터 분리하여 도메인의 복잡성을 관리하는 것입니다.
  • 간단하게 도메인이란 개발자 입장에서 바라보면 소프트웨어로 해결하고자 하는 문제 영역

EX) 온라인 서점

  • 소프트웨어는 온라인으로 책을 판매하는 데 다양한 기능이 있다.
  • 상품 조회, 구매, 결제, 배송 추적 등 다양한 문제 영역이 있는데 도메인에 해당된다.
  • 한 도메인은 다시 하위 도메인으로 나눌 수 있다.

🌗 2. 아키텍처 구성

프레젠테이션 계층(표현, Presentation)

  • "사용자 인터페이스"라고도 불린다.
  • 사용자의 요청을 처리하고 사용자에게 정보를 보여주는 영역
  • 여기서 사용자는 소프트웨어를 사용하는 사람뿐만 아니라 외부 시스템일 수도 있다.

애플리케이션 계층(응용, Application)

  • 사용자가 요청한 기능을 실행한다.
  • 업무 로직을 직접 구현하지 않으며 도메인 계층을 조합해서 기능을 실행한다.
  • 도메인 객체들을 사용하여 비즈니스 워크플로우를 실행하지만, 비즈니스 로직 자체는 포함하지 않는다.

도메인 계층(Domain)

  • 시스템이 제공할 도메인 규칙을 구현한다.
  • 비즈니스 로직의 핵심
  • 엔티티, 값 객체, 도메인 서비스가 여기에 위치하며, 외부 기술에 의존하지 않는다.

인프라스트럭처 계층(infrastructure)

  • 데이터베이스나 메시징 시스템과 같은 외부 시스템과의 연동을 처리한다.

🌗 3. 주요 구성 요소

엔티티(Entity)는 고유한 식별자를 가지며 생명주기 동안 상태가 변할 수 있는 객체입니다. 예를 들어 사용자, 주문 등이 엔티티입니다.
값 객체(Value Object)는 식별자가 없고 불변하며 속성의 조합으로만 구별되는 객체입니다. 주소, 금액, 이메일 등이 값 객체의 예입니다.
애그리게이트(Aggregate)는 데이터 변경의 단위가 되는 엔티티와 값 객체들의 그룹입니다. 애그리게이트 루트를 통해서만 외부에서 접근할 수 있습니다.
리포지토리(Repository)는 애그리게이트를 저장하고 조회하는 인터페이스를 제공합니다. 도메인 계층에서 정의되고 인프라스트럭처 계층에서 구현됩니다.

🌗 4. DDD(Domain-Driven Design) 아키텍처의 장점

  1. DDD를 사용하면 비즈니스 로직과 기술적 구현이 분리되어 코드의 가독성과 유지보수성이 향상됨
  2. 도메인 전문가와 개발자 간의 의사소통이 개선
  3. 복잡한 비즈니스 규칙을 체계적으로 관리할 수 있음

참고자료

0개의 댓글