TIL

TIL 241224

muerha 2024. 12. 24. 20:53

 

 

 

Proxy란?

JPA에서 엔티티 객체의 지연 로딩(Lazy Loading)을 지원하기 위해 사용하는 대리 객체.

실제 엔티티 객체를 생성하거나 데이터베이스에서 값을 읽어오지 않고도 엔티티의 참조를 사용할 수 있다.

 

 

 

 

지연로딩(Lazy Loading)즉시로딩(Eager Loading)

 

지연 로딩(Lazy Loading)

데이터를 실제로 사용할 때 DB에서 조회하는 방식

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "company_id")
private Company company;

 

지연 로딩을 사용하면 연관된 객체를 Proxy로 조회한다.

실제 값에 접근할 때 조회 SQL이 실행

 

 

 

즉시 로딩(Eager Loading)

엔티티를 조회할 때 연관된 데이터까지 모두 한 번에 로드하는 방식

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "company_id")
private Company company;

 

Proxy 객체를 조회하지 않고 한 번에 연관된 객체까지 조회한다.

연관된 모든 엔티티를 조인하여 한 번의 쿼리로 데이터를 가져기 때문에 불필요한 데이터 로드가 발생할 수 있다.

JPQL에서 N+1 문제 발생 -> fetch join으로 해결

 

@OneToMany, @ManyToMany 의 기본 값 : 지연 로딩

@ManyToOne, @OneToOne 의 기본 값 : 즉시 로딩 -> FetchType.LAZY 설정 필요

꼭 필요한 경우가 아니라면 지연 로딩을 사용!

 

 

 

'TIL' 카테고리의 다른 글

TIL 250108  (0) 2025.01.08
TIL 250107  (0) 2025.01.07
TIL 241219  (0) 2024.12.19
TIL 241213  (0) 2024.12.13
TIL 241129  (1) 2024.11.29