본문 바로가기

DDD/오피니언

DDD에서 도메인 서비스와 앱 서비스 차이점 비교 분석

 

 

도메인 서비스의 역할과 특징 및 예시

도메인 서비스는 도메인 객체(값 객체/엔티티)에 미처 담지 못한 도메인 규칙을 표현하는 객체이다. 도메인 규칙의 예시로는 다음과 같은 것들이 있다. 

 

  • 특정 금융 상품의 이자 계산 로직
  • 특정한 조건을 만족해야만 승인이 되는 보험금 청구 승인 판단 로직

 

도메인 객체에 도메인 규칙을 담지 못하는 이유는 규칙이 복잡하여 어느 한 도메인 객체에 속하지 않기 때문일 것이다. 혹은 도메인 객체 자체에 대한 내용이라 내부에 담기 어색한 규칙(🔗)인 경우도 있다. 

 

도메인 주도 설계에서 도메인 서비스는 다음과 같은 특징을 가지며 철저히 독립적이고 순수한 영역이어야 한다는 것을 기억해야 한다.

 

  • 외부 시스템 의존성이 거의 없음
  • 트랜잭션 관리와도 관계가 없음

 

 

앱 서비스의 역할과 특징 및 예시

반면 애플리케이션 서비스는 이러한 도메인 서비스들에 의존하여 비즈니스 규칙을 처리하고, 그 결과를 외부 시스템에 반영하거나 사용자에게 전달하는 역할을 한다. 구체적인 예시로는 다음과 같은 것들이 있다.

 

  • 주문 > 결제 > 재고 업데이트 > 배송 요청 일련의 과정을 처리하는 로직
  • 사용자의 유저 등록 요청을 받으면 유효성 검증 후 도메인 로직을 적용한 후 데이터를 저장하는 작업
  • 외부로 이벤트를 발행하는 로직

 

앱 서비스의 역할을 정리하면 다음과 같다.

 

- 입력 받은 데이터를 도메인 모델로 변환하는 것

- 여러 도메인 서비스들외부 시스템 사이에서 조율하고 흐름을 제어

- 트랜잭션을 관리

 

 

주요 차이점 요약

  도메인 서비스 애플리케이션 서비스
주요 역할 도메인의 핵심 비즈니스 규칙을 처리 도메인 서비스나 리포지토리 등을 사용해 비즈니스 프로세스 조율
주로 다루는 것 비즈니스 규칙, 도메인 모델 간의 복잡한 로직 트랜잭션, 외부 시스템과의 상호작용, 사용자 입력 처리 등
When to use 여러 엔티티나 도메인 객체에 걸친 복잡한 비즈니스 로직이 있을 때 여러 도메인 서비스와 리포지토리, 외부 시스템을 통합할 때
외부 시스템 의존성 거의 없음 데이터베이스, API, 메시지 큐, 이메일 서비스 등과 통합

 

 

헥사고날 아키텍처와의 관계

앱 서비스는 헥사고날 아키텍처로 치면 인터페이스인 Driving Port의 구현체(🔗)다. 그리고 도메인 서비스는 헥사고날의 가장 중심에 있는 도메인 영역에 해당한다. 

 

 

요약

 

1. 도메인 서비스는 도메인 규칙을 표현하는 객체다.

2. 앱 서비스는 도메인 서비스를 사용하여 비즈니스 로직을 실행하고 흐름을 제어한다.

 

 


 

 

 

참고 자료