달마루
기획자에서 개발자로
달마루
전체 방문자
오늘
어제
  • 분류 전체보기 (344) N
    • 기획 이야기 (3)
    • 개발자로 전향한 이유 (1)
    • Github Address (1)
    • 개발자, 그 여정 (11)
      • 기초특강 (4)
      • 국비학원 선정 (4)
      • BitCamp_수업내용 (1)
      • 학원 프로젝트 후기 (1)
      • 정보처리기사 (1)
      • 개발 이야기 (0)
    • 개념 창고 (136) N
      • JAVA (53) N
      • CS (1)
      • Database (28)
      • NetWork (4)
      • 자료 구조 (2)
      • React (8)
      • Spring (5)
      • JPA (2)
      • HTML & CSS (18)
      • JS (4)
    • algorithm (186)
      • 백준 (161)
      • 프로그래머스 (23)
    • 사는 이야기 (0)

블로그 메뉴

  • Github
  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • BOJ
  • 백준알고리즘
  • BOJ algorithm
  • select
  • 프로그래머스
  • 백준문제풀이
  • SQL고득점Kit
  • Bronze III
  • MySQL
  • 백준
  • 알고리즘
  • 혼자공부하는SQL
  • Bronze IV
  • 알고리즘풀이
  • Bronze V
  • math
  • programmers
  • 혼공MySQL
  • java
  • SQL
  • HTML
  • sql 문제풀이
  • 자바
  • 문제풀이
  • 혼공SQL
  • Algorithm
  • Scanner
  • java algorithm
  • react
  • BRONZE

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
달마루

기획자에서 개발자로

[JPA] 즉시 로딩 (EAGER) 과 지연 로딩 (LAZY) 차이
개념 창고/JPA

[JPA] 즉시 로딩 (EAGER) 과 지연 로딩 (LAZY) 차이

2026. 10. 18. 22:52

엔티티의 관계 필드를 조회할 때 언제 데이터를 가져올지 정하는 정책이다.

즉시 로딩은 관련 데이터를 바로 함께 가져오는 방식이다.

지연 로딩은 실제 필요할 때까지 관련 데이터를 나중에 가져오는 방식이다.

1. 즉시 로딩 (EAGER)

@ManyToOne(fetch = FetchType.EAGER) private Department dept;

엔티티를 조회하는 순간 관계된 데이터를 같이 가져온다.

데이터베이스 쿼리가 JOIN 을 수행하여 한 번에 모든 데이터를 가져온다.

관계 필드를 바로 쓸 때 편리하지만 불필요한 데이터가 포함될 수 있다.

대형 테이블이 많을 경우 성능 저하와 메모리 사용량 증가를 유발한다.

주로 관계 필드가 항상 필요하고 조회 빈도가 높은 경우에 사용한다.

2. 지연 로딩 (LAZY)

@ManyToOne(fetch = FetchType.LAZY) private Department dept;

엔티티를 조회할 때 관계 데이터는 자동으로 가져오지 않는다.

만약 해당 필드를 직접 접근하면 그때서야 관련 데이터를 조회한다.

불필요한 JOIN 을 방지하여 전체 쿼리 수행 시간을 단축할 수 있다.

코드에서 관계 필드를 사용할 때 NullPointerException 에 주의해야 한다.

관계 필드가 항상 필요하지 않은 대부분의 경우에 이 방식을 사용한다.

3. 초기화 문제

Department dept = em.find(Department.class, 1L); // 엔티티만 조회
System.out.println(dept.getName()); // 지연 로딩 시 여기서 쿼리 발생

지연 로딩으로 설정했더라도 필드를 직접 접근하는 시점에 데이터베이스에서 해당 데이터를 조회하게 된다.

엔티티를 조회한 후 바로 닫으면 관계 데이터가 아직 로드되지 않은 상태다.

필요한 경우에만 명시적으로 지연 로딩을 초기화시켜야 안전하다.

4. 추천 전략

// 기본값은 LAZY 가 권장됨
@ManyToOne(fetch = FetchType.LAZY) private Department dept;

JPA 의 기본 설정은 지연 로딩으로 되어 있어 성능에 유리하다.

즉시 로딩은 관계 필드가 항상 필요한 특수한 경우에만 사용한다.

지연 로딩을 사용할 때는 초기화 시점을 잘 설계해야 한다.

불필요한 데이터 로딩을 막아 서버 부하를 줄이는 것이 핵심이다.

저작자표시 비영리 변경금지 (새창열림)

'개념 창고 > JPA' 카테고리의 다른 글

[JPA] ddl-auto 설정  (0) 2023.02.27
    '개념 창고/JPA' 카테고리의 다른 글
    • [JPA] ddl-auto 설정
    달마루
    달마루
    항상 어제보다 좋은 코드를 지향합니다. https://github.com/kk4002

    티스토리툴바