Laravel 애플리케이션에서 데이터베이스 쿼리를 90% 최적화한 방법

발행: (2025년 12월 22일 오전 09:48 GMT+9)
2 분 소요
원문: Dev.to

Source: Dev.to

배경

성능에 문제가 있던 Laravel 애플리케이션을 인수받았을 때, 사용자 대시보드에서 주문, 고객, 제품과 같은 관련 데이터를 로드하는 속도가 매우 느렸습니다. Laravel Debugbar를 사용해 쿼리를 분석한 결과, 전형적인 N+1 문제가 있음을 발견했습니다.

단계 1: Eager Loading

// Before: N+1 queries
$orders = Order::all();
foreach ($orders as $order) {
    echo $order->customer->name; // New query each time!
}

// After: Optimized
$orders = Order::with(['customer', 'items.product'])->get();

단계 2: Query Scoping

public function scopeWithFullDetails($query)
{
    return $query->with([
        'customer.priceList',
        'items.product.category',
        'payments',
    ]);
}

단계 3: 전략적 캐싱

$products = Cache::remember('products.catalog', 3600, function () {
    return Product::with('category')->get();
});

결과

  • 페이지 로드 시간: 3–5 초 → 500 ms 이하
  • 데이터베이스 쿼리: 100+ → 페이지당 10개 이하
  • 서버 부하 크게 감소
  • 사용자 경험 향상

주요 시사점

  • 최적화 전에 항상 프로파일링 – 병목 현상이 어디인지 추측하지 마세요.
  • Eager loading은 당신의 친구이지만, 모든 것을 과도하게 eager‑load 하는 것은 피하세요.
  • 현명하게 캐시 – 실시간 데이터가 반드시 필요한 것은 아닙니다.
  • 관계에 대해 생각하기 – 데이터가 어떻게 연결되는지를 기준으로 쿼리를 설계하세요.
  • 성능 최적화는 마법이 아니라 체계적인 분석과 사려 깊은 해결책입니다.
Back to Blog

관련 글

더 보기 »