성능 최적화의 첫 번째 단계
웹사이트가 커지면서 데이터베이스 성능이 문제가 되기 시작했습니다. 쿼리가 느려지면서 페이지 로딩이 지연되는 경험을 여러 번 했습니다.
N+1 쿼리 문제 해결
가장 흔한 실수는 루프 안에서 계속 데이터베이스를 조회하는 것입니다.
// 나쁜 예 - N+1 쿼리
$posts = $mysqli->query("SELECT * FROM as_blog");
while ($row = $posts->fetch_assoc()) {
$author = $mysqli->query("SELECT * FROM as_staff WHERE idx = " . $row['staff_idx']);
// 각 포스트마다 추가 쿼리 실행
}
// 좋은 예 - JOIN 사용
$result = $mysqli->query("
SELECT b.*, s.username
FROM as_blog b
LEFT JOIN as_staff s ON b.staff_idx = s.idx
");
while ($row = $result->fetch_assoc()) {
// 한 번의 쿼리로 모든 데이터 조회
}
인덱스의 중요성
published_at, category_idx, is_active 같은 자주 조회되는 칼럼에 인덱스를 추가하면 조회 속도가 크게 개선됩니다.
쿼리 캐싱
자주 변경되지 않는 데이터(카테고리, 태그 등)는 메모리에 캐시하여 데이터베이스 접근을 줄일 수 있습니다.