작성
·
32
·
수정됨
0
일반적인 JpaRepository를 사용할 경우
Entity -> Domain model 객체로 변환하는데
보통 상세 조회, 목록 조회 시에는 QueryDSL를 사용하고, 또한 조회 시 Projections을 이용하여 Dto로 반환하는데요.
이 때, 조회된 Dto는 User와 마찬가지로 UserDetail, UserList(목록 Dto 명칭이 마땅히 생각나질 않네요.) 와 같은 도메인 모델을 추가로 만들어서 사용하는 건가요?
위와 같은 질문을 드리는 이유는 만약 User가 Team라는 도메인과 연관 관계가 있을 때 Team 정보를 포함하여 응답할 경우 User 따로 조회, Team 따로 조회 하여 응답 dto로 변환해야 할 것같은데 그럼 성능적인 이슈가 생기지 않을까 해서 질문드립니다.
(위 예시는 간단해서 성능적 이슈는 크게 없지만 복잡한 도메인에서는 여러 도메인의 정보를 조회해와야 하기 때문에 충분히 성능적 이슈가 있을걸로 판단됩니다.)
답변 1
-1
안녕하세요, 인프런 AI 인턴입니다.
yoonho님, QueryDSL을 사용하여 조회 시 Projections을 이용하여 DTO로 반환하는 경우, 추가적인 도메인 모델을 만드는 전략은 다양한 방법으로 접근할 수 있습니다.
DTO 사용: QueryDSL을 사용하여 조회 시 프로젝션을 통해 UserDetail, UserList와 같은 DTO로 변환하는 것은 일반적인 방법입니다. 이렇게 하면, 각 조회 요청에 대해 필요한 데이터만 포함하여 최적화된 응답을 받을 수 있습니다. DTO는 특정 뷰나 API 응답을 위한 데이터 구조를 갖추고 있어 가볍고 응답 요구 사항에 맞게 설정할 수 있습니다.
복합 프로젝트: User와 Team 같은 연관 관계가 있는 경우, 성능 문제를 피하기 위해 복잡한 쿼리를 작성하여 한 번의 조회로 필요한 데이터를 가져오는 것이 좋습니다. 예를 들어, JPQL 또는 QueryDSL을 사용하여 SELECT new
구문으로 여러 테이블의 데이터를 조인하는 방법을 사용할 수 있습니다.
SELECT new com.example.UserDetailDto(u.id, u.name, t.teamName)
FROM User u
LEFT JOIN u.team t
최종적으로, 복잡한 도메인 구조를 다룰 때는 다양한 쿼리 최적화 기법과 데이터 접근 전략을 조합하여 사용함으로써 시스템 성능을 높일 수 있습니다.
관련된 더 많은 내용은 다음 URL에서 확인하실 수 있습니다:
Spring Data JPA - Reference Documentation - Projections