도메인 주도 설계(Domain Driven Design,DDD)

녜정·2024년 2월 5일
0

🔎 Architecture

목록 보기
1/2

DDD는 객체 지향 분석 및 설계(OOAD) 원칙과 아이디어를 사용하고 이를 기반으로 하는 소프트웨어 개발 접근 방식입니다.

What is the 'Domain'?

도메인 중심 설계를 정의하려면 먼저 일반적인 개발에서 도메인이 의미하는 바를설정해야합니다. 도메인은 일반적인 사전 정의는 '지식 또는 활동 영역'입니다. 여기서 조금 더 자세히 살펴보면, 소프트웨어 엔지니어링 영역의 도메인은 일반적으로 애플리케이션이 적용하려는 주제 영역을 나타냅니다. 즉, 어플리케이션 개발 중에 도메인은 '애플리케이션 로직이 회전하는 지식 및 활동 영역' 입니다.
소프트웨어 개발 중에 사용되는 또 다른 일반적인 용어는 도메인 레이어 또는 도메인 로직으로, 이는 많은 개발자에게 비즈니스 로직으로 더 잘 알려져있습니다. 애플리케이션의 비즈니스 로직은 비즈니스 개체가 서로 상호 작용하여 모델링된 데이터를 생성하고 수정하는 방법에 대한 사위 수준 규칙을 나타냅니다.


DDD는 세가지 주요 원칙에 중점을 둡니다.

  1. 소프트웨어 내의 핵심 도메인과 해당 논리를 이해하고 해결하는데 우선순위로 두기
    (Prioritize understanding and addressing the core domain and its logic within the software.)

  2. 도메인에서 파생된 모델을 기반으로 복잡한 설계를 기본으로 하여 실제 비즈니스 요구 사항에 맞게 조정
    (Base complex designs on models derived from the domain, ensuring alignment with real-world business needs.)

  3. 도메인에서 파생된 모델을 기반으로 복잡한 설계를 기본으로 하여 실제 비즈니스 요구 사항에 맞게 조정
    (Constantly engage with domain experts to enhance the application model, resolving domain-related issues effectively.)


DDD에서 필수로 사용되는 개념 (The essential terms in DDD practices)

  • Context - 설정은 모델 내 명령문의 의미를 결정
  • Model - 특정 도메인과 관련된 문제를 해결하는 추상화 시스템
  • Ubiquitous Language - 도메인 모델을 중심으로 구성된 팀 구성원간의 공유 언어
  • Bounded Context - 특정 모델이 정의되고 적용 가능한 경계를 설명

레이어 안에서의 비지니스 로직 (Business Logic in Layers)

  • Domain Layer : 핵심적이고 사용 사례에 독립적인 비지니스 로직을 구현
  • Application Layer : UI에서 사용자 상호 작용을 나탄는 도메인 기반 사용 사례를 구현
  • Presentation Layer : 페이지 및 구성 요소와 같은 UI 요소를 수용
  • Infrastructure Layer : 타사 라이브러리와의 추상화 및 통합을 구현하여 다른 레이어를 지원

DDD는 주로 도메인 및 애플리케이션 계층에 중점을 두고 프레젠테이션 및 인프라 계층을 비지니스 계층의 직접적인 종속성 없이 세부 정보로 처리합니다. 프레젠테이션 및 인프라 계층도 중요하지만, DDD는 도메인 및 애플리케이션 계층 내의 핵심 구성 요소에 중점을 둡니다.

Create by. abp Commercial


도메인 계층 빌딩 블록 (Domain Layer Building Blocks)

  • Entity : ID로 고유하게 식별되는 비즈니스 논리를 구현하는 속성과 메서드가 있는 개체. 다른 ID는 다른 엔터티를 나타냄
  • Value Object : 고유 ID가 아닌 속성으로 식별되어 동일한 속성을 가진 두 개의 값 개체가 동일한 것으로 간주됨. 일반적으로 불벽으로 구현
  • Aggregate & Aggregate Root : 추가 책임이 있는 특정 엔터티 유형인 집계 루트에 바인딩된 개체(엔티티 및 값 개체)의 클러스터
  • Repository(interface) : 비즈니스 코드에서 데이터베이스 복잡성을 숨기고 데이터 지속성 시스템에 액세스하기 위한 도메인 및 애플리케이션 계층을 위한 컬렉션과 유사한 인터페이스
  • Domain Service : 핵심 비즈니스 규칙을 구현하는 Stateless 상태 서비스로, 여러 집계 또는 외부 서비스에 따른 논리에 유용
  • Specification : 엔터티 및 기타 비즈니스 개체에 대해 명명되고 재사용 가능하며 결합 가능한 필터를 정의
  • Domain Event : 도메인별 이벤트가 발생하면 다른 서비에 알림
  • Factories : 복잡한 개체 및 집계를 생성하기 위한 논리를 캡슐화

Create by. abp Commercial

Application Layer Building Blocks

  • Application Service : DTO를 사용하여 프레젠테이션 계층과 상호 작용하는 애플리케이션 사용 사례를 구현하는 Stateless 서비스. 작업 단위로 처리되는 사용 사례에 맞게 도메인 개체를 조정
  • Data Transfer Object(DTO) : 비즈니스 로직이 없는 애플리케이션 레이어와 프리젠테이션 레이어 간 상태 전송을 위한 간단한 개체
  • Unit of Work(UOW) : 원자적 작업(Atomic work)은 트랜잭션 단위로 처리. UOW 내의 작업은 성공을 위해 커밋되거나 실패시 롤백

Create by. abp Commercial



참고링크1
참고링크2

profile
안녕하세요, 4년차 백엔드 개발자입니다. 소통하는 것을 좋아하고, velog에는 주로 짧은 글을 작성합니다.

0개의 댓글