JPA에서 Entity 간의 관계 2 [Spring]

jbong·2025년 2월 4일
0

스프링부트

목록 보기
7/15
이전 포스터에서는 cascade 속성에 대해 설명을 하였다. 이에 이번에는 JPA에서 entity 간의 관계를 설정하는 fetch 속성에 대해 설명을 하려고 한다.

배경

spring으로 구현을 하면서, 엔티티간의 관계를 설정을 해야 할 상황

Fetch

엔티티를 조회할 때 관련된 엔티티를 어떻게 로드할지를 결정할 때 사용한다.

대표적으로 즉시 로딩 방식(FetchType.EAGER)지연 로딩 방식(FetchType.LAZY) 속성이 존재한다.

📌FetchType.LAZY

장점
데이터베이스에서 필요한 데이터만 가져오므로 성능이 향상될 수 있고, 메모리 사용량을 줄일 수 있다.
단점
자식 엔티티에 접근할 때 추가 쿼리가 발생하며, 이로 인해 지연 로딩된 데이터를 로드하기 위해 데이터베이스에 추가 요청을 보내야 한다.

지연 로딩 방식은 부모 엔티티를 조회할 때 관련된 자식 엔티티를 즉시 로드하지 않고, 실제로 필요할 때 로드한다. 따라오는 문제는 성능상 이점이 있을 수 있지만, 자식 엔티티에 접근할 때 추가 쿼리가 발생할 수 있습니다.


📌FetchType.EAGER

장점
모든 자식 엔티티를 한 번에 가져오므로, 이후에 별도의 쿼리 없이 자식 데이터를 사용할 수 있다.
단점
더 많은 데이터를 한 번에 가져오기 때문에 성능 저하가 발생할 수 있다.

즉시 로딩 방식은 부모 엔티티를 조회할 때 관련된 자식 엔티티도 함께 즉시 로드되는 방식이다. 데이터베이스에서 더 많은 데이터를 한 번에 가져오기 때문에 성능에 영향을 줄 수 있으며, 불필요한 데이터 로드를 피할 수 없다.

즉, 자주 사용하는 데이터라면 EAGER, 드물게 사용하는 데이터라면 LAZY를 사용하는 것이 성능 및 메모리 측면에서도 좋다고 볼 수 있다.

profile
노력하는 개미

0개의 댓글