본문으로 바로가기
반응형

Spring Boot와 JPA를 이용한 데이터베이스 처리를 할 때, Lazy Loading과 Eager Loading은 중요한 개념 중 하나입니다. 이 둘은 데이터를 가져오는 시점과 방식에 대한 접근을 나타내며, 각각의 장단점을 고려하여 적절히 활용해야 합니다.

Lazy Loading (지연 로딩)

Lazy Loading은 데이터를 실제로 필요한 시점에 가져오는 방식입니다. 예를 들어, 엔터티 간의 관계가 있을 때, 특정 엔터티를 조회할 때 관련된 엔터티들은 초기에는 로딩되지 않고, 실제로 해당 엔터티에 접근할 때 로딩됩니다. 이는 성능 향상을 가져올 수 있으나, 사용자가 이를 실제로 필요로 할 때까지 데이터를 로딩하지 않기 때문에 네트워크 레이턴시를 줄일 수 있습니다.

예를 들어, 다음과 같은 엔터티 구조를 가정해봅시다.

@Entity
public class Question {
    @Id
    private Long id;
    private String title;
    
    @OneToMany(mappedBy = "question", fetch = FetchType.LAZY)
    private List<Answer> answers;
    
    // getters and setters
}

위의 예시에서 Question과 Answer는 일대다 관계를 가지고 있습니다. Question을 조회할 때 관련된 Answer들은 Lazy Loading으로 설정되어 있습니다. 이 경우, Question을 조회할 때 Answer들은 실제로 데이터베이스에서 로딩되지 않고, Question 객체에 접근할 때 비로소 로딩됩니다.

Eager Loading (즉시 로딩)

Eager Loading은 반대로, 연관된 모든 데이터를 미리 가져오는 방식입니다. Lazy Loading과 달리, 해당 엔터티를 조회할 때 즉시 필요한 모든 데이터를 가져오게 됩니다. 이는 데이터를 사용하는 즉시 관련 데이터를 모두 로딩하기 때문에 성능적으로는 부하가 있을 수 있으나, 사용자가 데이터에 접근할 때마다 따로 로딩할 필요가 없어 편리합니다.

예를 들어, 위의 Question 엔터티를 Eager Loading으로 설정해보겠습니다.

@Entity
public class Question {
    @Id
    private Long id;
    private String title;
    
    @OneToMany(mappedBy = "question", fetch = FetchType.EAGER)
    private List<Answer> answers;
    
    // getters and setters
}

위의 설정에서 answers 필드는 Eager Loading으로 설정되어 있습니다. 따라서 Question을 조회할 때 관련된 모든 Answer들도 함께 가져오게 됩니다.

Spring Boot JPA에서의 Lazy Loading과 Eager Loading 활용

Spring Boot와 JPA를 함께 사용할 때는, Lazy Loading과 Eager Loading을 적절히 활용하여 성능을 최적화할 수 있습니다. 대규모 데이터베이스 애플리케이션에서는 Lazy Loading을 사용하여 필요한 데이터만을 가져오는 것이 효율적일 수 있으며, 작은 규모의 애플리케이션에서는 Eager Loading을 통해 간편하게 관련 데이터를 한 번에 가져올 수 있습니다.

또한, 실제 사용 사례에 따라 Lazy Loading과 Eager Loading을 혼합하여 사용할 수도 있습니다. 이는 각각의 상황에 맞게 최적의 성능을 얻기 위해 필요한 전략입니다.

이상으로 Spring Boot와 JPA에서의 Lazy Loading과 Eager Loading에 대한 개념과 활용에 대해 알아보았습니다. 이러한 데이터 로딩 전략을 적절히 활용하여 애플리케이션의 성능을 최적화할 수 있습니다.

반응형