programming study/B-JPA

JPA fetch 전략 - 왜 LAZY가 성능상 이점인지?

gu9gu 2023. 3. 29. 13:31

JPA에서는 엔티티를 가져오는 방식에 대해 fetch 전략을 설정할 수 있습니다. Fetch 전략은 엔티티와 관련된 연관 관계의 데이터를 어떤 시점에 가져올지를 결정하는 것입니다. JPA에서는 기본적으로 두 가지 fetch 전략을 제공합니다.

  1. EAGER Fetch 전략
    EAGER fetch 전략은 엔티티를 조회할 때 연관된 엔티티도 함께 조회합니다. 즉, 엔티티와 연관된 엔티티들이 모두 로딩됩니다. 이 방식은 필요한 모든 데이터를 한 번에 가져올 수 있어서 편리하지만, 불필요한 데이터를 가져오게 되면 성능 이슈가 발생할 수 있습니다.
  2. LAZY Fetch 전략
    LAZY fetch 전략은 엔티티를 조회할 때 연관된 엔티티를 로딩하지 않고, 실제로 사용될 때 로딩합니다. 이 방식은 필요한 데이터만 가져오기 때문에 성능상 이점이 있습니다. 또한, LAZY fetch 전략은 연관된 엔티티가 많거나 대용량의 데이터를 다룰 때 유용합니다. 하지만, 실제 사용 시에 연관된 엔티티를 로딩하는 과정에서 LazyInitializationException이 발생할 수 있습니다.

따라서, Lazy Fetch 전략을 사용하면 불필요한 데이터를 가져오지 않고 성능을 향상시킬 수 있습니다. 하지만, 때에 따라 EAGER 전략을 사용해야 하는 경우도 있습니다. 예를 들어, 엔티티와 연관된 데이터가 항상 함께 사용되는 경우나, 성능상 이점이 있는 경우 등이 있습니다. 하지만 이러한 경우도 가능한 LAZY 전략을 사용하되, 필요한 경우에는 FETCH JOIN 등의 방법으로 연관된 데이터를 함께 조회할 수 있도록 구현하는 것이 좋습니다.

 

FETCH JOIN 말고도 여러가지 방법이 있습니다.

 

 

결론

EAGER Fetch 전략은 연관된 엔티티들이 모두 로딩되어 불필요한 데이터를 가져오는 경우 성능상 좋지 않습니다.

그래서 LAZY 전략을 사용하되, 필요한 경우에는 FETCH JOIN 등의 방법으로 연관된 데이터를 함께 조회할 수 있도록 구현하는 것이 좋습니다.

'programming study > B-JPA' 카테고리의 다른 글

JPA 관련 메모  (0) 2023.07.24
JPA - N+1 문제에 대해서  (0) 2023.03.27
JPA란?  (0) 2023.01.17
JPA 기초지식  (1) 2023.01.04
Jackson으로 발생한 순환 참조 문제 해결(JPA Entity)  (0) 2023.01.03