대용량 데이터셋에서 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)을 사용하기도 했지만, 실제로는 결과가 일관되지 않았습니다. 안전을 위해 모든 관계를 비우는 것이 권장됩니다.