JPA에서 EAGER와 LAZY는 엔티티 연관 관계를 조회할 때 데이터 로딩 방식을 지정하는 FetchType 옵션이다.

1. EAGER (즉시 로딩)

  • 연관된 엔티티를 즉시 조회합니다.
  • 부모 엔티티를 조회할 때 연관된 자식 엔티티도 즉시 함께 가져옵니다.

특징

  • N+1 문제가 발생할 수 있음
  • 즉시 로딩이므로 불필요한 데이터가 로드될 가능성 있음
  • 연관 데이터가 반드시 필요한 경우 적합

코드 예시

@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="job_id")//생성시 칼럼 이름은 //외래키 만드는 구문
	JobEntity job;

 

2. LAZY (지연 로딩)

  • 연관된 엔티티를 실제로 접근하는 시점에 조회합니다.
  • Proxy 객체를 통해 데이터를 필요할 때만 로딩합니다.

특징

  • N+1 문제를 예방할 수 있음 (JPQL 또는 Fetch Join으로 최적화 가능)
  • 필요할 때만 데이터를 로드하여 메모리와 성능 최적화
  • 연관 데이터가 필수적이지 않을 경우 적합

코드 예시

@Entity public class Parent { @OneToMany(fetch = FetchType.LAZY) private List<Child> children; }

EAGER vs LAZY 요약

특징EAGER LAZY

로딩 시점 즉시 지연
성능 이슈 N+1 문제 위험 최적화 가능
사용 사례 데이터 필수 데이터 선택적

권장 사항

  • 기본적으로 FetchType.LAZY를 사용하는 것이 좋다
  • 필요한 경우에만 JPQL의 fetch join이나 @EntityGraph를 통해 최적화 하는것이 좋다

'SpringBoot > JPA' 카테고리의 다른 글

JPA 어노테이션  (0) 2025.02.06
JPQL  (0) 2025.02.03

+ Recent posts