ABOUT ME

Paragon의 Cave 블로그~

Today
Yesterday
Total
  • [Spring] 지연로딩, 즉시 로딩
    Spring 2025. 4. 16. 23:11

                                    

    minecraft-font

    #LazyLoading #EagerLoading

    💡 Spring 정리: 지연 vs 즉시 로딩

    📘 개념 정리

      지연 로딩(LAZY) 즉시 로딩(EAGER)
    특징 연관된 엔티티는 실제로 접근하는 순간 로딩된다. 엔티티를 조회할 때 연관된 엔티티도 즉시 같이 조회
    코드에서
    사용법
    (fetch = FetchType.LAZY) ( fetch = FetchType.EAGER)
    기본 값
    사용
     @OneToMany   , @ManyToMany  @ManyToOne,  @OneToOne 
    장점 초기 조회 시: 연관된 엔티티를 불러오지 않아서 빠름
    (불필요한 쿼리 방지)


    필요한 순간에만 쿼리를 날리므로, 메모리 낭비 방지 & 성능 최적화

    자주 접근하는 연관 데이터라면: 캐시나 프록시 객체 덕분에 반복 조회 시 효율적


    지연 로딩은 느린 게 아니라, "필요한 순간에 최적화된 방식"이다.
    처음부터 필요한 데이터를 한 번에 가져올 수 있음



    개발자가 예상하지 못한 SQL이 실행된다.
    단점 사용 시점마다 쿼리가 추가발생하여 N+1 문제가 발생한다. 필요 없는 데이터까지 불러올 수 있어 쿼리와
    메모리 비용 증가 위험. 

     

    ⚠️ 실수 및 주의사항

      즉시 로딩을 사용하면 개발자가 예상치 못한 SQL이 실행된다.

    • 연관된 Entity만큼 JOIN되어 과도한 쿼리 발생 한다.
    • FetchType.LAZY 설정 필요
    • 꼭 필요한 경우가 아니라면 지연 로딩을 사용하자.

    ✨ 팁 & 인사이트

    연관관계는 기본적으로 Lazy로 설정하고,  정말 꼭 필요할 때만 Eager 또는 
    fetch join/EntityGraph로 제어하는 것이 JPA 최적화의 핵심이다.

     

    'Spring' 카테고리의 다른 글

    [Spring] 고아 객체  (0) 2025.04.17
    [Spring] 영속성 전이 (Cascade)  (0) 2025.04.17
    [Spring] Proxy  (0) 2025.04.16
    [Spring] 연관관계 유형  (0) 2025.04.16
    [Spring] 연관관계1  (1) 2025.04.16
Designed by Tistory.