Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

나만의 개발 로그 | 고민 로그

23.02.06 TIL 본문

TIL&WIL

23.02.06 TIL

ultramancode 2023. 2. 7. 03:23

☑️ JPA Fetch Join 정리

항목 내용
정의 JPQL에서 fetch join 키워드로 연관 엔티티를 한 번의 SELECT 로 즉시 로드
장점 N+1 문제 제거, 네트워크 지연 감소
Eager 로딩과 차이 EAGER 은 엔티티 먼저 조회 후 관계 로딩 결정 → 쿼리 2 회 이상 가능
fetch join 은 애초에 한 방에 가져옴
제한 fetch join 이 적용되면 컬렉션 페이징이 불가 (하이버네이트가 경고)
// 예시: 
Order ↔ OrderItem 
select o from Order o join fetch o.orderItems oi where o.member.id = :memberId

☑️ OSIV(Open-Session-In-View) – true vs false

설정 동작 장점 단점
true (기본) 컨트롤러/뷰 렌더링 종료까지 영속성 컨텍스트·DB 커넥션 유지 지연 로딩(Lazy) → View 단계도 안전 커넥션 점유 길어짐 → 고트래픽 서비스에서 부족 현상
false 트랜잭션 종료 시 바로 닫힘 커넥션 즉시 반환 → 자원 효율 컨트롤러 이후 Lazy 로딩 시 LazyInitializationException 발생
 

권장 판단 기준

  1. API 서버·실시간 트래픽 크면 → false + DTO 변환 단계에서 모두 조회
  2. 관리자 페이지·통계 레포트 같이 트래픽 낮고 View 템플릿 사용 → true 로 편의 확보
  3. OSIV false 전환 시 필수 작업
    • Service 계층 안에서 모든 데이터 완전 조회 → DTO 변환
    • 페이지네이션 + Fetch Join 불가 구간은 default_batch_fetch_size 로 튜닝

'TIL&WIL' 카테고리의 다른 글

23.03.27 TIL [최종 프로젝트 회고!]  (0) 2023.03.28
23.02.08 TIL  (0) 2023.02.09
23.02.03 TIL  (0) 2023.02.04
23.02.01 TIL  (1) 2023.02.02
23.01.31 TIL  (0) 2023.02.01
Comments