본문 바로가기

cs(with 매일메일)

[260123금] @OneToOne 관계에서 Lazy Loading을 설정할 때 주의할 점은 무엇일까요?

양방향 @OneToOne일 때 연관관계의 주인이 아닌 엔티티를 조회할 경우, Lazy Loading이 동작하지 않는다. 

 

JPA는 연관된 엔티티가 없으면 null로 초기화하고, 있으면 Lazy Loading이 설정되어 있을 경우 프록시 객체로 초기화한다. 

 

하지만 데이터베이스의 테이블 관점에서 보면, 연관관계의 주인이 아닌 엔티티는 연관관계를 참조할 FK가 없기 때문에 연관관계의 존재 여부를 알지 못한다. 

그래서 JPA는 null 혹은 프록시 객체 중 무엇으로 초기화할지 결정할 수 없게 되고, 

결과적으로 연관된 엔티티의 존재 여부를 확인하는 추가 쿼리를 실행하기 때문에 Lazy Loading이 동작하지 않는다. 

 

Lazy Loading (지연 로딩)

  • 연관된 데이터를 나중에 필요할 때 가져오는 방식
  • 처음엔 프록시(가짜) 객체를 줌
  • 실제로 사용할 때 진짜 데이터를 DB에서 조회
  • 성능 최적화에 좋음