JPA에서 fetch 타입 : 연관관계 데이터를 조회할 때 언제 로딩할지를 결정
종류
- EAGER (즉시 로딩)
- 엔티티를 조회할 때 연관된 엔티티도 바로 같이 조회
- 예: `Schedule s = scheduleRepository.findById(1L);` → `s.getStore()`도 즉시 DB에서 가져옴
- 장점: 코드에서 바로 객체 사용 가능
- 단점: 연관관계가 많으면 불필요한 JOIN/조회 증가 → 성능 저하
- LAZY (지연 로딩, 기본값)
- 실제로 해당 필드를 접근할 때 DB에서 조회
- 예: `Schedule s = scheduleRepository.findById(1L);` → `s.getStore()` 호출 전까지 DB 접근 안 함
- 장점: 필요할 때만 DB 접근 → 성능 효율적
- 단점: 영속성 컨텍스트 밖에서 접근하면 LazyInitializationException 발생 가능
Example
`@ManyToOne(fetch = FetchType.LAZY)`
`@JoinColumn(name = "store_id")`
`private Store store;`
- Schedule을 조회할 때는 Store를 바로 가져오지 않고,
- 실제 schedule.getStore() 호출 시점에 DB에서 조회
일반적인 규칙
- @ManyToOne / @OneToOne → 기본 EAGER, 보통 LAZY로 바꿈
- @OneToMany / @ManyToMany → 기본 LAZY, 그대로 두는 것이 성능상 안전
FetchType은 성능 최적화와 연관관계 객체 로딩 시점 결정
실무에서는 대부분 ManyToOne, OneToOne도 LAZY로 바꿔서 필요할 때만 불러오는 방식 사용
'백엔드 공부(BE, AWS)' 카테고리의 다른 글
| [백엔드] API 명세서 배포하기 Swagger 활용 (0) | 2026.02.03 |
|---|---|
| [Spring] AOP, 직렬화, 람다식 (0) | 2025.11.03 |
| 25.07.02 생성시각 삽입 (0) | 2025.07.02 |
| 게시판 CRUD 인기순 정렬(조회수기반) (0) | 2025.07.02 |
| Article 파일 수정(오류수정) (0) | 2025.06.30 |