CS

[프로그래밍] DDD란? (Domain-Driver Design)

juhwan 2023. 9. 29. 16:53

도메인 주도 설계는 복잡한 비즈니스 로직을 처리하는 소프트웨어 개발 방법론 중 하나이다.

이 방법론은 실세계의 비즈니스 문제를 해결하는 데 중점을 두며, 그 문제를 이해하고 모델링하는 것에서 시작된다.

은행 시스템을 만드려면 계좌, 이체, 예금 등의 개념과 그들 간의 관계를 이해해야 합니다.
이런 개념들은 도메인 이라고 부르며 도메인 주도 설계에서는 이 도메인을 중심으로 소프트웨어를 개발함

DDD의 주요 개념

  1. Ubiquitous Language(공통 언어): 프로젝트에 참여하는 모든 사람이 사용하는 공통언어
    • 프로젝트 참여자들이 동일한 용어를 사용하여 의사소통의 혼란을 줄이고, 모호성을 방지하는 것을 목표로 함
    • 계좌라는 단어를 보고 어떤 사람은 고객의 계좌를 생각하고 어떤 사람은 데이터베이스에 저장된 레코드로 볼 수 있다.
    • 공통 언어를 통해 비즈니스 요구사항과 솔루션 설계에서 동일한 용어와 개념을 사용함으로써 모든 팀원간의 원활한 의사소통이 가능하다.
  2. Bounded Context(경계가 있는 문맥): 특정 부분(문맥) 내에서만 유효한 모델과 용어가 있다.
    • 이체라는 단어가 상황에 따라 다른 의미로 해석될 수 있다.
  3. Entities and Value Objects(엔티티와 값 객체): 엔티티는 고유한 식별자(ID)로 구분되며 변경 가능한 상태를 가진다.
    • 반면 객체는 엔티티와 다르게 상태가 바뀔 때마다 새로운 객체가 생성되어 ID대신 속성으로 구분이 된다.
  4. Aggregates(집합체): 서로 관련된 여러 객체들을 하나의 단위로 묶은 것을 뜻한다
    • 예를 들어 한 계좌 안에 여러 거래 정보를 생각할 수 있다.
  5. Repositories and Factories(저장소와 팩토리): 객체를 생성하거나 저장하는 로직을 캡슐화한다
    • 예시로 계좌를 만드는 로직을 계좌 팩토리에 계좌 정보를 데이터베이스에 저장하고 조회하는 로직을 계좌 저장소에 둘 수 있다.