본문 바로가기
개발/JPA

[JPA] 즉시로딩과 N+1 문제

by Allonsy 2022. 10. 24.
반응형

즉시로딩(FetchType.EAGER)

연관관계 맺을 때 즉시로딩 설정 시 연관 엔티티 즉시 조회

 

N+1 문제

주로 즉시로딩(FetchType.EAGER)으로 설정해두고, JPQL을 사용할 때 발생

JPQL의 경우 바로 SQL로 변환됨

예)

Order entity에서 Member entity를 즉시로딩으로 설정했을 때

JPQL: select o From order o; → SQL: select * from order;

EAGER 설정이 되어있어도 조인해서 읽어오지 않고, 단건 조회를 수행하게 됨

→ 단건 조회한 후, 조회한 수 만큼 연관 테이블을 가져오는 쿼리를 N개 던지게 되서 성능이슈 발생

 

해결

fetch 조인 또는 엔티티 그래프를 이용해서 조회

 

주의

기본 fetch 전략

@xToOne(@ManyToOne) : fetch = FetchType.EAGER

@xToMany(@OneToMany) : fetch = FetchType.LAZY

→ @xToOne은 전부 LAZY로 설정해줄 것

반응형

댓글