코딩항해기

[DBMS] Eager Loading & Lazy Loading 본문

DBMS

[DBMS] Eager Loading & Lazy Loading

miniBcake 2024. 12. 18. 13:01

 

데이터 로딩 전략의 기본 개념

데이터베이스 프로그래밍에서 Lazy Loading과 Eager Loading은 데이터를 불러오는 두 가지 주요 전략이다. 각각의 전략은 고유한 특징과 사용 사례를 가지고 있으며, 애플리케이션의 성능과 사용자 경험에 큰 영향을 미친다.

 

Lazy Loading

Lazy Loading은 데이터가 실제로 필요한 시점에 로드하는 방식이다. 처음에는 기본 데이터만 로드하고, 관련 데이터는 실제로 요청이 있을 때 추가로 로드한다. 이는 마치 책의 목차를 먼저 보고, 관심 있는 페이지를 필요할 때 펼쳐보는 것과 같다. 초기 로딩 시간을 단축할 수 있다는 장점이 있지만, 여러 번의 데이터베이스 호출이 발생할 수 있다는 단점도 존재한다.

 

// Lazy Loading 예시
const user = await User.findOne({ where: { id: 1 } });
// 필요한 시점에 posts 데이터를 추가로 로드
const posts = await user.getPosts();

 

Eager Loading

Eager Loading은 처음부터 관련된 모든 데이터를 한 번에 로드하는 방식이다. 책의 전체 내용을 한 번에 펼쳐보는 것과 유사하다. 한 번의 쿼리로 필요한 모든 데이터를 가져오기 때문에 전체적인 성능이 향상될 수 있지만, 초기 로딩 시간이 길어질 수 있다는 특징이 있다.

// Eager Loading 예시
const user = await User.findOne({
    where: { id: 1 },
    include: [{
        model: Post,
        include: [Comment]
    }]
});

 

 

주의사항

Lazy Loading을 사용할 때 주의해야 할 가장 큰 문제는 N+1 쿼리 문제다. 이는 하나의 쿼리로 N개의 레코드를 조회한 후, 각 레코드의 연관 데이터를 조회하기 위해 N번의 추가 쿼리가 발생하는 상황을 말한다. 이는 데이터베이스에 불필요한 부하를 주고 성능을 저하시킬 수 있다.

 

반면 Eager Loading은 JOIN 쿼리를 통해 한 번에 모든 데이터를 가져오므로 N+1 문제를 해결할 수 있다. 하지만 이 경우에도 너무 많은 데이터를 한 번에 로드하면 메모리 사용량이 증가하고 초기 응답 시간이 길어질 수 있다는 점을 고려해야 한다.

 

애플리케이션의 특성에 따라 적절한 로딩 전략을 선택하는 것이 중요하다. 실시간 데이터 처리가 필요하거나 데이터 일관성이 중요한 경우에는 Eager Loading이 적합할 수 있다. 반면, 메모리가 제한적이거나 초기 로딩 시간이 중요한 경우에는 Lazy Loading이 더 나은 선택일 수 있다.

 

실제 구현에서는 두 전략을 상황에 따라 혼합하여 사용하는 것이 일반적이다. 예를 들어, 자주 사용되는 관계는 Eager Loading으로 미리 로드하고, 가끔 필요한 데이터는 Lazy Loading으로 처리하는 방식을 택할 수 있다.

'DBMS' 카테고리의 다른 글

[DBMS] N+1 문제  (0) 2024.12.20
[DBMS] ACID  (0) 2024.12.19
[DBMS] ORM (Object-Relational Mapping)  (0) 2024.12.17
[DBMS] PostgreSQL 이해 (ORDBMS)  (0) 2024.11.23
[DBMS] MongoDB 이해 (NoSQL)  (0) 2024.11.22