인프런 커뮤니티 질문&답변
DTO를 반대로 엔티티로 변환하는 경우에 대해 질문 드립니다.
작성
·
874
6
안녕하세요.
SpringBoot와 JPA를 활용해 개인적인 프로젝트를 진행중에 있습니다.
DTO를 엔티티로 만들기위해 처음에 서비스계층에서 작성하다보니 코드가 많아지는거 같아 요청받은 DTO에서 바로 엔티티로 바꾸는 메서드를 만드려고 했습니다.
엔티티사이에 연관관계가 있다보니 DTO에 Repository를 이용하여 연관관계의 엔티티를 불러와야 하는데 DTO에서 Repository의존성을 받아서 DTO를 엔티티로 작성하는 메서드를 작성해도 되는지 안된다면 어떤 문제때문에 그렇게 구현하면 안되는지에 대해 궁금합니다.
답변 1
20
안녕하세요. weekbelt님 좋은 질문입니다^^
어떤 상황인지 이해가 되네요.
DTO에 Repository 의존성을 받아서 구현해도 되는가? 라고 하면 원칙적으로 안될 이유는 없습니다.
하지만 저는 다음과 같은 이유로 그렇게 사용하지는 않습니다.
1. DTO는 단순한 자료구조로만 사용하는 것이 좋다. DTO의 의미는 데이터를 전송하기 위한 객체(Data Transfer Object)다. 정말 데이터만 있고 단순한 조회용 로직 정도만 있는게 좋다.
2. 1에 의한 관례상 DTO에서 SQL이 실행될 것이라고 생각하는 개발자는 없다. 결국 유지보수가 어려워진다.
3. DTO가 Repository를 의존하면 단위 테스트를 작성하기 어려워진다. (MOCK 처리 등등 할께 많아진다.)
그러면 대안이 있어야 하는데요^^!
저 같은 경우 엔티티를 생성하는게 너무 복잡하면 서비스 계층에서 이 문제를 해결하지 않고, 별도의 생성 클래스를 만들어서 문제를 해결합니다. 생성 클래스가 필요한 DTO와 리포지토리를 모두 의존하고 최종 완성된 엔티티를 반환하는 형식으로 사용하는 것이지요. 그러면 여기서 생성이 다 일어나는 구나 알 수도 있구요^^
도메인 주도 설계(DDD)에서도 엔티티 생성이 단순할 때는 그냥 생성자를 쓰지만 복잡해지면 팩토리 오브젝트를 사용하라고 권장합니다^^
감사합니다.





