작성
·
22
·
수정됨
답변 2
0
도메인 서비스는 도메인 계층을 만들어서 도메인 로직을 작성할 때, 하나의 엔티티에 담기에는 어려운 로직의 구현이 필요할 때 사용합니다. 또는 구성에 따라 변경이 필요한 로직을 담을 때 씁니다. 이름이 비슷하지만 애플리케이션 서비스와는 완전히 다릅니다. 도메인 로직은 도메인에 있는 모든 오브젝트에 다 들어갑니다. 엔티티, 도메인 서비스, 값 객체 등등이요.
애플리케이션 서비스는 이런 도메인 모델들(도메인 서비스만이 아닙니다)을 사용하면서 좀 더 넓은 범위에서 애플리케이션 레벨의 로직을 담습니다. 많은 경우 외부 서비스와의 "연동"까지 담당합니다. 도메인 로직의 일종이지만 좀 더 넓은 범위를 담당하고 있죠. 또, 잘 변하지 않는 도메인 로직을 넘어서는 실제 애플리케이션이나 서비스 레벨의 로직을 담당하기도 합니다.
어떤 경우엔 애플리케이션 서비스를 도메인 계층에 대한 관문(퍼사드)이라고 부르기도 합니다.
말씀하신 흐름, 구성요소와 서비스의 통합 등도 애플리케이션 서비스의 주요한 기능입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 서울자바맨님의 질문에 대해 답변드리겠습니다.
Application Service와 Domain Service의 역할에 대해 이해하려고 하신 내용은 상당히 중요합니다.
Application Service: Application Service는 흐름을 관리하고 외부와의 상호작용을 주관하며, 사용자로부터 입력을 받고 DB에서 데이터를 가져오는 등 각종 통신 관련 작업을 담당합니다. 주로 여러 도메인 서비스나 도메인 모델들을 조합하여 유스케이스를 구현하는 역할을 합니다. 이로써 비즈니스 로직을 추상화하고 캡슐화하여 클라이언트가 비즈니스 로직에 영향을 덜 받게 해줍니다.
Domain Service: Domain Service는 보다 복잡하고 특정한 도메인 논리에 중점을 두고 작업합니다. 복잡한 비즈니스 로직이 도메인 엔티티만으로는 구현하기 힘든 경우, 이를 해결하기 위해 Domain Service가 도입됩니다. 이 서비스는 주로 동일하거나 연관된 여러 엔티티에 대한 트랜잭션이나 복잡한 계산을 수행합니다.
서울자바맨님께서 설명하신 바와 같이 각 서비스는 역할에 맞는 계층에서 기능을 수행함으로써 전체 시스템의 구조를 명확하고 유연하게 만들어 줍니다. 이러한 분리는 헥사고날 아키텍처 구조에서 매우 효과적입니다.
더욱 자세한 이해를 돕기 위해 유사한 주제를 다루었던 어플리케이션 계층과 도메인 계층의 역할 분담에 관한 질문에서 참고할 만한 답변을 확인하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.