대용량 데이터셋에서 Laravel Eloquent 메모리 누수 해결

발행: (2026년 3월 3일 오전 10:36 GMT+9)
2 분 소요
원문: Dev.to

Source: Dev.to

Problem

대용량 데이터셋을 처리할 때, Eloquent 속성을 통해 관계에 접근하면 메모리 사용량이 계속 증가합니다. 각 모델 인스턴스는 로드된 관계를 자체에 캐시하고, 루프를 순회한 뒤에도 이 객체들이 메모리에 남아 있기 때문입니다.

이 문제는 Laracasts 토론 스레드에서도 보고되었으며, 누군가 해결책을 찾았습니다.

Solution

관계를 사용한 뒤에 setRelations([])를 수동으로 호출하여 캐시를 비워줍니다:

$users = User::with('posts')->get();

foreach ($users as $user) {
    $posts = $user->posts;
    // 관계 캐시를 비워 메모리를 해제합니다.
    $user->setRelations([]);
}

스레드에 있던 일부 사람들은 단일 관계만 비우기 위해 $user->setRelation('posts', null)을 사용하기도 했지만, 실제로는 결과가 일관되지 않았습니다. 안전을 위해 모든 관계를 비우는 것이 권장됩니다.

0 조회
Back to Blog

관련 글

더 보기 »

구리지 않은 시맨틱 무효화

캐싱 문제 웹 애플리케이션을 어느 정도 기간 동안 작업해 본 사람이라면 캐싱에 대한 상황을 잘 알 것입니다. 캐시를 추가하면 모든 것이 빨라지고, 그 다음에 누군가…