처음에는 비즈니스 로직을 담당하는 것이 Service
라고 배웠다. 하지만 더 학습할수록 Service
는 최대한 얇게 구성해야 하며, Domain
의 몸집을 뿔려야 한다고 한다.
왜 Service
는 얇아져야 하며, 어디까지 Domain
에 담아내야 하는 걸까?
우선 "어디까지 비즈니스 로직으로 봐야 하는가?"부터 보려고 한다.
예를 들어, 김영한님의 JPA1 강의에서는 "중복 회원 검증" 로직은 비즈니스 로직으로 판단되지만 이 것이 Service
에 담겼다. Domain
에 담는 것은 어땠을까? 하는 고민을 하면서 시작한다.
이 것에 대하여 나와 비슷한 고민을 했던 사람이 질문을 올렸고, 김영한님께서 친절한 답변을 남겨주셨다. 해당 답변을 정리해보면 다음과 같다.
Service
, Domain
모두 처리할 수 있다.Domain
에서 하는 것이 더 좋을 수 있다. 하지만 엔티티 하나에서 처리할 수 있는 범위를 넘어간다면 Service
로 넘겨서 협업을 해야 한다.Domain
에서는 레포지토리를 호출하진 않는다.Domain
레벨이 아닌 Service
에서 수행하는 것이 적절할 것이다.