Cộng đồng Hỏi & Đáp của Inflearn
조회 시 엔티티를 조회하는 것이 아닌QueryDSL을 많이 사용 시 Dto는 어떻게 하나요?
Viết
·
107
·
Đã chỉnh sửa
0
일반적인 JpaRepository를 사용할 경우
Entity -> Domain model 객체로 변환하는데
보통 상세 조회, 목록 조회 시에는 QueryDSL를 사용하고, 또한 조회 시 Projections을 이용하여 Dto로 반환하는데요.
이 때, 조회된 Dto는 User와 마찬가지로 UserDetail, UserList(목록 Dto 명칭이 마땅히 생각나질 않네요.) 와 같은 도메인 모델을 추가로 만들어서 사용하는 건가요?
위와 같은 질문을 드리는 이유는 만약 User가 Team라는 도메인과 연관 관계가 있을 때 Team 정보를 포함하여 응답할 경우 User 따로 조회, Team 따로 조회 하여 응답 dto로 변환해야 할 것같은데 그럼 성능적인 이슈가 생기지 않을까 해서 질문드립니다.
(위 예시는 간단해서 성능적 이슈는 크게 없지만 복잡한 도메인에서는 여러 도메인의 정보를 조회해와야 하기 때문에 충분히 성능적 이슈가 있을걸로 판단됩니다.)
Câu trả lời 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





