1. 컨트롤러에서 요청과 응답은 Dto로 빼주자.
엔티티를 직접 노출 X
꼭 DTO를 만들어서 반환해주자.
2. 페치 조인을 활용하자
Lazy Fetch로 설계된 엔티티들을 Eager Fetch로 수정하지말고, 페치 조인을 써서 한방 쿼리로 최적화 시켜주자.
N+1도 해결된다.
쿼리문에서 쿼리용 Dto로 필요한 데이터들만 명시해주면, 불필요한 데이터들은 가져오지 않아, 조금 더 최적화 시켜줄 수 있다.
3. 1 대 다 페치 조인에서는 페이징을 쓰면 안된다.
".setFirstResult(n1)" , ".setMaxResults(n2)"와 같은 페이징은 쓰면 안된다.
- DB에서 가져온 뻥튀기된 데이터들이 메모리에 올라가 메모리가 가득 찰 수도 있다.
1 대 다 컬렉션 조회 시, 페이징 구현하는 방법
먼저, "...ToOne" 관계들만 페치조인 명시 + 페이징 해주고, "...ToMany"같은 컬렉션 조회들은 배치설정으로 페치조인해주자.
4. 컬렉션 페치 조인은 하나만 사용하자.
쿼리에서 컬렉션 페치 조인을 2개 이상 사용하면, 데이터의 복잡도가 올라가고, 부정확하게 조회될 가능성이 높아진다.
'JPA' 카테고리의 다른 글
JPQL의 내장함수와 사용자 정의 함수 (0) | 2024.03.10 |
---|---|
JPA 매핑 애너테이션들! (0) | 2024.03.07 |
[JPA] Named Query - 쿼리를 함수처럼 만들어보자 (0) | 2023.06.01 |
[JPA] 경로 표현 (0) | 2023.05.29 |
조건식 (case, coalesce, nullif) (0) | 2023.05.29 |