글 하나가 홈 화면보다 쿼리를 더 쓴다
워드프레스 글 한 편을 열면 데이터베이스에 몇 번이나 물어볼까요. 본문 한 번, 댓글 한 번 정도를 떠올리기 쉽지만 실제로는 그렇지 않았습니다. 이 블로그의 글 한 편을 여는 동안 나간 SQL 쿼리는 63개였습니다. 글 12편의 목록이 뜨는 홈 화면은 38개였습니다. 글 하나가 열두 편짜리 목록보다 데이터베이스를 더 많이 두드립니다. 쿼리마다 붙어 있는 호출 경로를 따라가서 63개가…
워드프레스 글 한 편을 열면 데이터베이스에 몇 번이나 물어볼까요. 본문 한 번, 댓글 한 번 정도를 떠올리기 쉽지만 실제로는 그렇지 않았습니다. 이 블로그의 글 한 편을 여는 동안 나간 SQL 쿼리는 63개였습니다. 글 12편의 목록이 뜨는 홈 화면은 38개였습니다. 글 하나가 열두 편짜리 목록보다 데이터베이스를 더 많이 두드립니다. 쿼리마다 붙어 있는 호출 경로를 따라가서 63개가…
워드프레스가 무겁다는 말을 들으면 보통 플러그인을 의심합니다. 그러면 플러그인이 하나도 없는 사이트는 얼마나 가벼울까요. 이 블로그가 그 조건입니다. 활성 플러그인 0개, 테마는 Kadence 하나입니다. 글 한 편을 열 때 브라우저가 받는 파일을 전부 세어 봤습니다. HTML 하나에 CSS 8개, JS 5개, 인라인 스타일 6개였고, 압축 전 기준으로 520KB였습니다. 그리고 그 절반 가까이는 워드프레스도 테마도 아닌…
워드프레스 속도 이야기가 나오면 자주 등장하는 것이 wp_options 테이블의 autoload 옵션입니다. 쓰지 않는 플러그인이 남긴 찌꺼기가 쌓여 모든 요청을 느리게 만든다는 설명입니다. 그런데 이 조언은 대부분 “정리하십시오”에서 끝나고, 정작 내 사이트의 현재 값이 얼마인지 재는 방법과 정상 범위가 어느 정도인지는 알려주지 않습니다. 그래서 직접 재봤습니다. 결과는 흔히 지목되는 대상과 달랐습니다. autoload가 무엇을 뜻하는가 wp_options 테이블에는…
워드프레스 사이트가 하루 종일 느린 것이 아니라 매일 비슷한 시간에만 지연된다면, 단순한 서버 사양 부족으로 보기 어렵습니다. 특정 시점에 방문자 요청이 몰렸거나 예약 작업이 실행됐을 수 있고, PHP Worker가 외부 API나 데이터베이스 응답을 기다리느라 묶였을 수도 있습니다. 먼저 문제가 발생한 정확한 시간과 함께 CPU, 메모리, PHP 처리량, 예약 작업 로그를 비교해야 불필요한 업그레이드를 피할 수…
워드프레스 사이트의 방문자 수가 평소와 비슷한데 CPU 사용률과 대역폭이 갑자기 치솟는다면 실제 독자보다 봇이 더 많은 요청을 보내고 있는지 확인할 필요가 있습니다. 특히 /wp-login.php, /xmlrpc.php, 존재하지 않는 PHP 파일을 반복해서 호출하는 IP는 정상 방문자로 보기 어렵습니다. 클라우드웨이즈에서는 서버 보안 로그와 애플리케이션 트래픽 분석 기능을 이용해 문제의 IP와 봇을 찾아낼 수 있습니다. 다만 모든 봇을 무조건…
캐시를 붙이고 나면 사이트가 빨라졌다고 생각하기 쉽습니다. 저도 그랬습니다. 그런데 로그인한 상태로 들어가 보면 이야기가 달랐습니다. 로그인 상태에서 응답이 2초를 넘는 구간이 반복해서 나왔습니다. 캐시가 안 듣는 것이 아니라 애초에 로그인 사용자에게는 캐시를 쓰지 않도록 되어 있었던 것입니다. 그게 맞는 설계라고 여겼던 것이 문제였습니다. 이 글은 그 전제를 의심하기까지, 그리고 중간에 한 번 실패하고 방향을…