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 |