본문 바로가기

JPA

[JPA+Spring] 개발 할 때, 신경써야할 체크리스트

1. 컨트롤러에서 요청과 응답은 Dto로 빼주자.

엔티티를 직접 노출 X

꼭 DTO를 만들어서 반환해주자.

2. 페치 조인을 활용하자

Lazy Fetch로 설계된 엔티티들을 Eager Fetch로 수정하지말고, 페치 조인을 써서 한방 쿼리로 최적화 시켜주자. 

N+1도 해결된다.

 

쿼리문에서 쿼리용 Dto로 필요한 데이터들만 명시해주면, 불필요한 데이터들은 가져오지 않아, 조금 더 최적화 시켜줄 수 있다.  

3. 1 대 다 페치 조인에서는 페이징을 쓰면 안된다.

".setFirstResult(n1)" , ".setMaxResults(n2)"와 같은 페이징은 쓰면 안된다.

 - DB에서 가져온 뻥튀기된 데이터들이 메모리에 올라가 메모리가 가득 찰 수도 있다.

 

1 대 다 컬렉션 조회 시, 페이징 구현하는 방법  

먼저, "...ToOne" 관계들만 페치조인 명시 + 페이징 해주고, "...ToMany"같은 컬렉션 조회들은 배치설정으로 페치조인해주자.  

4. 컬렉션 페치 조인은 하나만 사용하자.

쿼리에서 컬렉션 페치 조인을 2개 이상 사용하면, 데이터의 복잡도가 올라가고, 부정확하게 조회될 가능성이 높아진다.