DDD(Domain-Driven Design)란?

sinryuji·2025년 2월 27일

Domain

도메인은 분야, 영역, 범위라는 뜻을 가지고 있습니다. 컴퓨터 프로그래밍에서 도메인이란 소프트웨어를 통해 해결하려는 비즈니스 문제 영역을 의미합니다. 상위 도메인은 하위 도메인을 가질 수 있고 그 하위 도메인 역시 하위 도메인을 가질 수 있습니다.

예를 들어 배달 플랫폼 서비스를 개발한다고 가정해봅시다. 이 때 배달 플랫폼 자체가 최상위 도메인이 될 것이고 이 배달 플랫폼 서비를 개발하기 위한 개발 범위들, 예를 들면 유저 / 주문 / 결제 / 가게, 메뉴 등이 각각 하나의 하위 도메인이 될 것 입니다.

DDD(Domain-Driven Design)

DDD의 등장 배경

기존에는 데이터를 중심으로 소프트웨어 개발이 이루어졌습니다. 데이터베이스의 테이블 구조를 먼저 설계한 후, 이제 맞추어 개발이 이루어졌습니다.

비즈니스적 요구사항이 간단하다면 이런 기존의 방식으로도 충분히 개발이 가능합니다. 하지만 시간이 지날수록 소프트웨어를 통해 해결하는 영역이 넓어졌고, 갈수록 비즈니스 요구사항은 복잡해져갔습니다.

이렇게 비즈니스적 요구사항이 복잡해질수록 데이터 중심의 설계와 비즈니스 로직 사이에 불일치성이 늘어나기 시작하였습니다. 그리고 비즈니스 로직이 분산 됨에 따라 클래스간의 결합도가 증가하게 되었고 이는 유지 보수에 어려움을 겪게 만들었습니다.

그래서 이러한 문제를 해결하기 위해 비즈니스 중심으로 소프트웨어를 설계하는 Domain-Driven Design, 줄여서 DDD가 등장하게 되었습니다.

DDD의 특징

DDD는 소프트웨어를 비즈니스 도메인 별로 나누어 설계하는 방식입니다.

연관성이 깊은 도메인별로 모듈화를 하기 때문에 각 도메인은 개념적으로 완전히 분리 됩니다. 예를 들어, Account라는 단어는 일반적인 관점에선 계정이라는 뜻을 가지지만 은행에선 계좌라는 뜻을 가집니다. 이렇듯, 각 모듈을 개념적으로, 비즈니스 지식적으로 분리함으로써 개발에 혼선을 줄여줍니다.

프로그래밍적으로도 관련성이 깊은 엔티티들이 하나의 모듈을 구성함으로써 Loosely coupling(느슨한 결합)과 High cohesion(높은 응집도)를 가질 수 있습니다.

또한 DDD는 MSA(Micro Service Architecture)에서도 큰 역할을 합니다. MSA를 구현하는 필수 개념들이 DDD에서 왔고, DDD의 가장 기본 개념인 Loosely coupling, High cohesion는 MSA 시스템을 설계하는데 가장 중요한 원칙입니다.

profile
응애 개발자입니다.

0개의 댓글