본문 바로가기
회고

TIL_210930

코동이 2021. 10. 5.

1. Facts(사실, 객관)

- N + 1 강의 및 정리

 

2. Feelings(느낌, 주관)

- N + 1에 대해 다시 공부하고 정리했습니다. 들으면 들을수록 새로우면서도 내용이 정리되고 직접 코드로 상황을 만들어보니 기억에 남습니다. N + 1 자체를 외우기보다 그 배경을 먼저 알아야하고 해결책까지 흐름에 따라 이해했습니다. 이제 JPA 성능이슈나 주요 의젠는 연관 엔티티를 어떻게 효과적으로 쿼리를 해올 것인가라는 생각이 듭니다. 연관 엔티티가 하나의 단일 엔티티인지, 혹은 리스트 엔티티인지에 따라 다릅니다. 

 

3. Findings (배운 점)

 N + 1은 연관관계에서 LAZY 혹은 EAGER 어느 전략을 사용하든지 발생한다. 왜냐하면 연관관계에 있는 칼럼을 조회할 때 N개의 갯수만큼 추가조회는 시점만 다를 뿐 결과는 똑같아야 하기 때문이다.

 

 연관관계에 있는 엔티티들을 한번에 조회해오고 싶다면, JOIN FETCH를 이용한다. 그런데, 리스트 엔티티와 조인과정에서는 결과값이 뻥튀기 되므로 꼭 DISTINCT를 추가로 써서 중복 데이터를 방지해야 한다.

 

 EAGER와 차이점은 EAGER는 LEFT OUT JOIN인 반면, JOIN FETCH는 INNER JOIN을 사용한다. 즉, JOIN FETCH를 사용하면, 연관이 있는 엔티티들만 조회를 해온다.

 

 JOIN FETCH 이외에도 EntityGraph를 이용해서 한번에 조회해올 수 있다.

 

 

- N+1 정리

https://escapefromcoding.tistory.com/446

 

4. Affirmation (자기 선언)

나는 같은 개념도 다방면으로 공부해서 추가적인 지식을 잘 다지는 사람이다.

반응형

'회고' 카테고리의 다른 글

TIL_211004  (0) 2021.10.05
TIL_211001  (0) 2021.10.05
TIL_210929  (0) 2021.10.05
TIL_210928  (0) 2021.09.28
TIL_210927  (0) 2021.09.28