Coding 01

OneToOne관계에서 Lazy Loading 본문

기술면접

OneToOne관계에서 Lazy Loading

하루우울루 2025. 4. 8. 13:58

JPA는 Lazy Loading을 사용할 때 프록시 객체를 사용한다. 그런데 OneToOne관계에서 프록시 객체 생성에 제약이 있다.

그리고 연관관계의 주인이 아닌 엔티티를 조회할 때 Lazy Loading이 동작하지 않는다.

 

여기서 프록시 객체란 지연 로딩을 구현하기 위해 엔티티를 감싸는 가상의 객체이다.

데이터베이스를 조회할 때 최대한 조회를 늦추는 역할이다.

프록시 객체는 실제 엔티티와 같은 인터페이스를 가지지만 내부에는 실제 데이터가 없다.

조회할 때, 조회 -> 프록시 객체 -> 필요한 경우 실제 엔티티 데이터 로딩의 흐름을 가진다.


양방향 @OneToOne관계에서 mappedBy가 있는 쪽은 Lazy Loading이 잘 동작하지만, 주인 쪽은 제대로 동작하지 않을 수 있다.

외래 키 제약조건에서 JPA는 외래키를 확인해야 연관된 엔티티의 존재 여부를 알 수 있기 때문이다.

 

외래 키 값이 null일 때 NullPointException이 발생할 수도 있다.

그래서 null 체크, 혹은 Optional을 사용하는 방식으로 처리하는게 좋다.

 

그래서 애초에 단방향관계로 설계하거나 양방향관계에서는 주인이 아닌 쪽에서 Lazy Loading을 사용하거나, 외래 키를 양쪽 테이블에 모두 두는 방식을 생각해봐야 한다.

'기술면접' 카테고리의 다른 글

String의 타입 캐스팅과 String.valueOf()의 차이점  (1) 2025.04.14
트라이 자료구조  (0) 2025.04.10
try-with-resources  (0) 2025.04.07
캐시 스탬피드 현상  (0) 2025.01.30
컨텍스트 스위칭  (0) 2025.01.27