[Spring] 지연 로딩과 즉시 로딩

Jiwoo·2024년 5월 29일
0

Spring

목록 보기
10/19

DB와의 상호 작용을 처리할 때, JPA를 사용하는 경우 Entity 간의 연관 관계를 설정할 때 지연 로딩즉시 로딩 두 가지 전략 사용 가능

@OneToMany Fetch Type의 default 값: LAZY
@ManyToOne Fetch Type의 default 값: EAGER

📌 지연 로딩 (Lazy)

  • Entity 조회 시 연관된 Entity를 실제로 사용할 때까지 로드 X

장점

  • 초기 조회 시 불필요한 데이터 로드하지 않아 메모리 사용량 적다
  • 연관된 데이터를 필요시에만 로드하기에 전체 성능 개선

단점

  • 연관된 데이터 사용할 때마다 추가 쿼리 발생 가능
  • 프록시 객체로 인해 예상치 못한 LazyInitializationException 발생 가능 (Entity를 영속성 컨텍스트 밖에서 접근하려 할 때 발생)

📌 즉시 로딩 (Eager)

  • Entity 조회할 때 연관된 모든 Entity 함께 조회
    → 주 Entity 로드할 때 관련된 모든 Entity 즉시 메모리에 로드

장점

  • 이후 데이터 접근 시 추가 쿼리 발생 X
  • 코드가 간단해지고, DB와의 상호작용 횟수 줄어 성능 개선

단점

  • 불필요한 데이터 미리 로드할 수 있어 메모리 사용량 증가
  • 복잡한 연관 관계 있는 경우, 한 번의 조회로 매우 큰 양의 데이터 로드될 수 있어 오히려 성능 저하 가능

0개의 댓글