10. Spring/실험

??. Spring 5 (스프링 5) - Dto 클래스는 Service 계층에 넘기는 것이 맞는가?

THE HEYDAZE 2021. 8. 20. 18:35
  OS   Windows 10 PRO 64bit 버전 20H2 (OS 빌드 19042.867)
  Framework   Spring Boot 2.5.4
  EditTool   Inellij IDEA 2021.3.1
  BuildTool   Maven

아래 블로그 읽고 오세요
 

[Tecoble] DTO의 사용 범위에 대하여

DTO는 어느 레이어까지 사용해야 할까?

xlffm3.github.io

 

정리

복잡하지 않은 곳에서는 DTO 를 Service 단으로 내려보내는 것이 낫다

복잡하게 섞여있지 않기 때문에

 

Member, Post ( Food, Country, Review ), Like 이렇게 되어있다고 가정한다면

member 가 post 를 만들기 위해서는 

Food 과 Country 가 필요하다

 

결국 Like Entity 에서  FoodRepository 와 CountryRepository 를 필드로 의존 해야 한다

이렇게 생성할 때 필요한 의존이 있는 경우 Repository 를 수십개 써야 할 수 있다

 

// /post/1/like
@Service
public class PostService {
    private final MemberRepository memberRepository;
    private final FoodRepository foodRepository;
    private final LikeRepository likeRepository;
    private final CountryRepository countryRepository;
    private final PostRepository postRepository
    
    //
    public PostResponse createPost(PostRequest postRequest) {
    
       return PostResponse;
    }
}

createPost 를 사용하려면 PostRequest를 사용해야한다

테스트할 때도 Service 로직을 실행하는 데 PostRequest 를 만들어야 하는 불편함

만약 SomethingService 에서 PostService.createPost() 를 사용하고자 할 때 PostRequest 를 만들어야 한다

 

Repository 가 의존을 많이 하는 경우는 Service 를 제데로 분리하지 못했다는 증거이며,

Service 계층이 Dto 를 받는 다는 것은 Service 들 끼리 서로 유연하게 사용할 수 없음을 의미한다

특정 Service 가 진짜 단순히 특정 1개의 entity 에 접근해서 받아와 리턴만 하는 역할 이라면 상관없지만,

해당 도메인이 만들어지기 위해서는 여러 필드를 의존하여 복잡한 경우가 있다

 

결론

Dto 클래스를 Service 단에 넘겨주지 말자

클래스로 감싸줄거면 Command Class 를 만들어서 넘겨주고 return 은 Entity 로 해라