컨트롤러로부터 $posts 를 넘겨 받아서 뷰에서 작성자의 이름을 출력한다고 가정해봅시다.
@foreach($posts as $post) <p>{{ $post->user->name }}</p> @endforeach
이 코드는 지금은 문제가 되지 않지만 데이터가 많아지면 심각한 성능 문제를 일으킬 수 있습니다. 일명 N+1 문제라고 하는데요.
라라벨 9.35에서 추가된 엘로퀀트 엄격함(Eloquent Strictness) 설정 기능을 이용하면 N+1 문제를 미리 발견할 수 있습니다.
AppServiceProvider 에서 Model::preventLazyLoading() 을 호출해주면
// app/Providers/AppserviceProvider.php public function boot() { Model::preventLazyLoading(); }
아까와 달리 예외가 발생해서 레이지 로딩, 즉 N+1 문제가 발생했다는 것을 알 수 있게 됩니다.
개발 중에는 괜찮지만 이 기능 때문에 프러덕션 환경에서 안나던 예외가 갑자기 발생하기 시작하면 난감해지겠죠. 파라미터를 이용해서 이 기능을 제어할 수 있습니다.
이런식으로 해주면 프러덕션 환경이 아닌 경우에만 기능이 활성화됩니다.
// app/Providers/AppserviceProvider.php public function boot() { Model::preventLazyLoading(! $this->app->isProduction()); }
관련 메뉴얼 위치
영문: https://laravel.com/docs/9.x/eloquent#configuring-eloquent-strictness
한글: https://laravel.kr/docs/9.x/eloquent#configuring-eloquent-strictness