JPA에서 즉시(Eager) 로딩과 지연(Lazy) 로딩이라는 기술을 지원하고 있습니다.
연관관계에 있는 엔티티를 조회하는 기술로
즉시 로딩은 엔티티를 조회할 때 해당 엔티티와 연관된 엔티티를 바로 조회하고
지연 로딩은 연관된 엔티티를 실제 사용할 때 조회합니다.
직원 엔티티가 직급 엔티티를 즉시 로딩하는 것으로 설정하고
직원 엔티티 조회했을 때 직급 엔티티가 바로 확인되는 것을 통해서 즉시 로딩된 것을 확인할 수 있습니다.
반대로 직원 엔티티가 직급 엔티티를 지연 로딩하는 것으로 설정하고
직원 엔티티를 조회했을 때 직급 엔티티가 프록시 객체인 것을 통해서 지연 로딩된 것을 확인할 수 있습니다.
지연 로딩은 프록시 객체를 통해 실제 데이터가 필요한 경우에 호출이 되기 때문에 유용하지만
연관된 엔티티를 계속 사용해야 한다면, 사용할 때마다 DB 조회를 해야 하는 N+1 문제가 발생할 수 있습니다.
따라서 연관된 엔티티는 지연 로딩으로 설정하고, 해당 엔티티가 자주 사용된다면 fetch join을 통해서 조회하는 방법이 유용합니다.
해당 글에 대한 정보는 김영한 님의 JPA 프로그래밍 도서를 참고했습니다.
https://lib.seoul.go.kr/search/detail/CATTOT000000775417
'dev > JPA' 카테고리의 다른 글
JPA QueryDSL Paging (0) | 2023.08.31 |
---|---|
JPA QueryDSL 집계 쿼리 (0) | 2023.08.31 |
JPA Insert Batch (0) | 2023.08.30 |
JPA ID SEQUENCE (0) | 2023.08.30 |
JPA Infinite Recursion 예외 처리 (0) | 2023.08.29 |