HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
도메인 주도 개발 시작하기
도메인 주도 개발 시작하기
/
7️⃣
7장 도메인 서비스
7️⃣

7장 도메인 서비스

7.1 여러 애그리거트가 필요한 기능

  • 도메인 영역의 코드를 작성하다 보면, 한 애그리거트로 기능을 구현할 수 없을 때가 있다.
    • 프로필 등록 - 사용자 테이블에 외래키 물려주기
    • 북마크 등록/수정 - 태그 테이블에 데이터 추가
 
  • 이렇게 한 애그리거트에 넣기 애매한 도메인 기능을 억지로 특정 애그리거트에 구현하면 안 된다. !
  • 이런 문제를 해소하는 가장 쉬운 방법은 도메인 기능을 별도 서비스로 구현 하는것!
 

7.2 도메인 서비스

  • 도메인 서비스를 사용하는 경우
      1. 계산 로직
        1. 여러 애그리거트가 필요한 계산 로직
        2. 한 애그리거트에 넣기에는 복잡한 계산 로직
      1. 외부 시스템 연동이 필요한 도메인 로직
          • e.g.) jsoup, s3 upload, spring의 password encoding…?
           
  • 도메인 영역 = 애그리거트 + 밸류 + 도메인 서비스 + 리포지토리 인터페이스 + …
  • 도메인 서비스는 애그리거트나 밸류와 다르게 상태 없이 로직만 구현한다.
 
  • 도메인 서비스를 사용하는 주체는
  • 애그리거트가 될 수도 있고 !!!
    • public class Member{ private Password password; public void encodePassword(PasswordEncoder passwordEncoder){ password = passwordEncoder.encode(password); } }
    • 이때 애그리거트 객체에 도메인 서비스를 전달하는 것은 응용 서비스의 책임이다.
    •  
 
  • 응용 서비스가 될 수도 있다.
    • 이때는 거꾸로 도메인 서비스에 애그리거트를 전달하기도 한다.
    • public class TransferService { public void transfer(Acount fromAcc, Account toAcc, Money amounts){ freomAcc.withdraw(amounts); toAcc.credit(amounts); } }
       
  • 트랜잭션 처리는 도메인 서비스에서 하는 것이 아니다.
  • 도메인 서비스는 도메인 영역이다!
 
  • 계산 로직같은 경우 도메인 서비스는 굳이 인터페이스로 만들지 않아도 되지만 변경이 예상되거나 팀의 룰에 따라 인터페이스를 둘 수도 있다.
  • 하지만 외부 시스템을 이용하는 경우는 꼭 도메인 영역에 인터페이스를 두고 구현체를 infrastructure 영역에 두자