솜이의 데브로그

Spring Data JPA 에서 get~ 메서드와 find~ 메서드의 차이점을 알아보자 본문

dev/Spring Boot

Spring Data JPA 에서 get~ 메서드와 find~ 메서드의 차이점을 알아보자

somsoming 2024. 2. 4. 17:50

GET

  • 프록시 객체 반환
    • 실제 사용할 때 DB 접근
    • Lazy Loading
  • 비어있는 객체를 반환할 경우 EntityNotFoundException 발생
 

FIND

  • 프록시가 아니라 실제로 DB에서 값을 찾아옴
  • Optional 로 한번 감싸서 값을 가져옴. 해당 id의 값이 없다면 Null 반환
    • 해당하는 Entity가 없을 경우 Optional.empty() 반환
 

정리

내부의 값을 필요로 하지는 않고 다른 객체에게 할당하는 목적으로만 조회하는 경우, getReferenceById 를 사용하면 성능상 이점이 있을 수 있다.
getReferenceById 는 EntityManager의 getReference 메서드를 호출하여 참조값만 가져온 후, 조회된 entity의 내부 값이 필요해지는 시점에 lazy loading으로 DB를 조회해 값을 가져오도록 동작한다.
그러나 get 을 사용하여 가져왔는데 이후 DB에 해당 값이 없으면 NPE가 발생하므로 변경이 빈번한 경우 직접적으로 DB에 접근하여 찾아오는 find 방식이 더 좋다.
 
상황에 따라 맞추어 사용하자!