접속 로그가 두 번 쌓이고 있었다
어제 압축 설정을 고치느라 아파치 설정 파일을 열었다가, 그 김에 나머지 설정도 실제 응답과 하나씩 맞춰 봤습니다. 두 군데가 어긋나 있었습니다. 접속 로그는 모든 요청을 두 번 기록하고 있었고, 정적 파일에는 1년짜리 캐시가 걸려 있는데도 이미지 전송량의 36%가 재요청이었습니다. 설정 파일만 읽었을 때는 둘 다 정상으로 보입니다. 로그 쪽에는 “성능을 위한 로그 최적화”라는 주석까지 달려…
어제 압축 설정을 고치느라 아파치 설정 파일을 열었다가, 그 김에 나머지 설정도 실제 응답과 하나씩 맞춰 봤습니다. 두 군데가 어긋나 있었습니다. 접속 로그는 모든 요청을 두 번 기록하고 있었고, 정적 파일에는 1년짜리 캐시가 걸려 있는데도 이미지 전송량의 36%가 재요청이었습니다. 설정 파일만 읽었을 때는 둘 다 정상으로 보입니다. 로그 쪽에는 “성능을 위한 로그 최적화”라는 주석까지 달려…
어제 이 블로그의 정적 파일을 재면서 두 가지를 찾았습니다. 업로드된 PNG 열 장이 압축되지 않은 채로 저장돼 있었고, 아파치가 타입을 가리지 않고 모든 응답을 gzip으로 누르고 있었습니다. 오늘 둘 다 고쳤습니다. 열 장은 12.7MB에서 2.6MB가 됐고, 이미지에 붙던 gzip은 사라졌습니다. 그리고 같은 주소들을 다시 재 봤더니, 실제 전송량은 2,540,730바이트에서 2,528,074바이트로 12,656바이트, 0.5% 줄었습니다. 파일에서 덜어낸…
브라우저가 글 한 편을 다 그리려면 파일 여러 개를 받아야 합니다. 이 블로그의 글 한 편은 그 파일이 23개, 압축을 풀었을 때 기준으로 5.8MB였습니다. 서버가 gzip으로 눌러 보낸 실제 전송량은 2.5MB였고, 줄어든 양은 3.2MB였습니다. 절반 넘게 줄었으니 압축이 잘 걸린 것처럼 보입니다. 그런데 3.2MB를 항목별로 갈라 보니 3.0MB, 그러니까 93%가 PNG 파일 세 장에서 나왔습니다….
워드프레스 글 한 편을 열면 데이터베이스에 몇 번이나 물어볼까요. 본문 한 번, 댓글 한 번 정도를 떠올리기 쉽지만 실제로는 그렇지 않았습니다. 이 블로그의 글 한 편을 여는 동안 나간 SQL 쿼리는 63개였습니다. 글 12편의 목록이 뜨는 홈 화면은 38개였습니다. 글 하나가 열두 편짜리 목록보다 데이터베이스를 더 많이 두드립니다. 쿼리마다 붙어 있는 호출 경로를 따라가서 63개가…
워드프레스가 무겁다는 말을 들으면 보통 플러그인을 의심합니다. 그러면 플러그인이 하나도 없는 사이트는 얼마나 가벼울까요. 이 블로그가 그 조건입니다. 활성 플러그인 0개, 테마는 Kadence 하나입니다. 글 한 편을 열 때 브라우저가 받는 파일을 전부 세어 봤습니다. HTML 하나에 CSS 8개, JS 5개, 인라인 스타일 6개였고, 압축 전 기준으로 520KB였습니다. 그리고 그 절반 가까이는 워드프레스도 테마도 아닌…
워드프레스는 설치만 하면 REST API가 켜집니다. 플러그인을 붙이지 않아도, 설정을 건드리지 않아도 그렇습니다. 그런데 이 API가 로그인하지 않은 사람에게 무엇까지 보여주는지는 대부분 확인하지 않고 넘어갑니다. 그래서 운영 중인 사이트에서 직접 세어 봤습니다. 라우트가 몇 개인지, 어떤 주소가 인증 없이 열리는지, 열리는 응답에 무엇이 들어 있는지입니다. 먼저 라우트 개수부터 REST API는 주소 하나가 아니라 여러 개의…
워드프레스 속도 이야기가 나오면 자주 등장하는 것이 wp_options 테이블의 autoload 옵션입니다. 쓰지 않는 플러그인이 남긴 찌꺼기가 쌓여 모든 요청을 느리게 만든다는 설명입니다. 그런데 이 조언은 대부분 “정리하십시오”에서 끝나고, 정작 내 사이트의 현재 값이 얼마인지 재는 방법과 정상 범위가 어느 정도인지는 알려주지 않습니다. 그래서 직접 재봤습니다. 결과는 흔히 지목되는 대상과 달랐습니다. autoload가 무엇을 뜻하는가 wp_options 테이블에는…
워드프레스 사이트 루트에 ads.txt나 robots.txt를 올렸는데 브라우저에서는 404가 뜨는 경우가 있습니다. FTP 화면에는 파일이 분명히 보이고 파일명도 맞는데 주소창으로는 열리지 않습니다. 이때 대부분 퍼머링크 설정을 다시 저장하거나 플러그인을 껐다 켜는 쪽으로 시간을 씁니다. 하지만 이 문제는 워드프레스 내부 설정보다 파일을 올린 위치와 웹서버가 실제로 바라보는 문서 루트가 어긋난 상황인 경우가 훨씬 많습니다. 이 글에서는 404의…
워드프레스에서 요금제나 제품 사양, FAQ를 한 페이지에 모두 펼쳐 놓으면 내용이 길어지고 핵심을 찾기 어려워집니다. 워드프레스 7.1의 탭(Tabs) 블록은 이런 정보를 주제별로 나눠 한 영역 안에 정리하는 기능입니다. 엘리멘터 같은 페이지 빌더를 추가하지 않아도 구텐베르크 블록 편집기에서 사용할 수 있다는 점이 가장 큰 변화입니다. 워드프레스 탭 블록은 어떤 기능인가 탭 블록은 상단에 여러 개의 탭…
사이트를 새 서버나 새 도메인으로 이전한 뒤 홈페이지는 정상적으로 열리는데 /wp-admin/ 로그인 과정에서 이전 도메인으로 이동하는 경우가 있습니다. 이 현상은 단순히 파일 복사가 덜 된 문제가 아닙니다. 워드프레스 데이터베이스에 저장된 URL, wp-config.php의 강제 설정, 웹 서버와 CDN의 리디렉션, 브라우저 쿠키가 각각 영향을 줄 수 있습니다. 문제를 빠르게 해결하려면 여러 설정을 한꺼번에 바꾸기보다 브라우저에서 시작해 워드프레스,…
워드프레스 예약 글이 발행 시각을 지났는데도 공개되지 않고 ‘예약을 놓침(Missed Schedule)’으로 표시되는 경우가 있습니다. 예약 시간을 다시 지정하면 한 번은 해결되는 것처럼 보여도 같은 현상이 반복된다면 글 편집기보다 예약 작업을 실행하는 WP-Cron을 살펴봐야 합니다. 다만 모든 문제가 WP-Cron 때문인 것은 아닙니다. 관리자 화면에서는 이미 공개됐지만 홈페이지 캐시가 갱신되지 않아 발행되지 않은 것처럼 보일 수도 있고,…
악성 파일을 하나 찾아 삭제했는데 며칠 뒤 같은 파일이나 비슷한 코드가 다시 생긴다면, 단순히 삭제가 제대로 되지 않았다고만 보기는 어렵습니다. 공격자가 다시 들어올 수 있는 취약점이 남아 있거나, 서버 안에 설치된 백도어가 파일을 재생성하고 있을 수 있습니다. 워드프레스 보안 사고에서는 악성코드 제거와 재침입 원인 차단을 분리해서 봐야 합니다. 눈에 보이는 PHP 파일은 원인이 아니라 이미…