왜 걷어냈나
처음에는 당연히 워드프레스로 갔습니다. SEO 플러그인, 사이트맵 자동 생성, 스키마 마크업. 검색하면 전부 워드프레스로 하라고 나옵니다.
그런데 막상 만들다 보니 제가 필요한 건 정적인 페이지 몇십 개와 자바스크립트 계산기였습니다.
- 댓글 기능 — 안 씁니다
- 사용자 관리 — 저 혼자 씁니다
- 글 작성 화면 — 어차피 코드로 씁니다
- 테마 시스템 — 테마 하나만 씁니다
- 데이터베이스 — 저장할 데이터가 없습니다
RAM 960MB짜리 서버에서 안 쓰는 기능을 위해 MySQL을 띄우고 PHP로 매 요청마다 테마와 플러그인을 로딩하고 있었던 겁니다.
결과
| 워드프레스 | 순수 PHP | |
|---|---|---|
| 로드 타임 | 659ms | 133ms |
| 데이터베이스 | MariaDB 사용 | 미사용 |
약 5배입니다. 그리고 이후 최적화를 더 해서 지금은 TTFB 67ms까지 내려왔습니다.
속도가 SEO에 얼마나 영향을 주는지는 사실 논쟁적입니다. 하지만 메모리가 남는다는 것은 확실한 이득이었습니다. 이때부터 스왑을 건드리지 않게 됐습니다.
구조 — config 하나가 단일 소스
프레임워크 없이 만들면서 딱 하나 규칙을 정했습니다. 같은 정보를 두 군데 적지 않는다.
inc/config.php 하나에 계산기 목록, 가이드 목록, 관련 링크 맵을 두고 나머지는 전부 여기서 읽어갑니다.
inc/config.php (계산기 목록 · 가이드 목록 · 관련 링크)
↓ 자동 반영
홈 카드 · sitemap.xml · 홈 타이틀("계산기 15종") · 관련글 블록
계산기를 하나 추가하면 배열에 한 줄 넣는 것으로 끝입니다. 홈에 카드가 생기고, 사이트맵에 URL이 들어가고, 관련 계산기 블록에 링크가 걸립니다.
이 글의 목록도 같은 방식입니다. 개발기를 한 편 추가하면 목록 페이지와 사이트맵, 그리고 아래 이전/다음 글 링크가 전부 따라옵니다.
캐시 무효화는 filemtime으로
CSS를 고쳤는데 브라우저가 옛날 걸 들고 있는 문제, 다들 겪습니다. 이건 한 줄로 해결했습니다.
/assets/site.css?v=1787795994
파일의 수정 시각(filemtime)을 쿼리스트링에 붙입니다. 파일을 고치면 숫자가 바뀌고, 브라우저는 다른 파일로 인식해서 새로 받아갑니다.
덕분에 캐시 삭제라는 작업이 아예 없습니다. 배포하고 새로고침하면 끝입니다.
이전하면서 지킨 것
기존 사이트를 갈아엎을 때 제일 무서운 건 검색엔진이 그동안 쌓아둔 것을 날리는 것입니다. 두 가지를 지켰습니다.
- 모든 URL을 그대로 유지했습니다. 구조를 바꾸고 싶은 유혹이 있었지만 참았습니다.
- 사이트맵 주소를
/sitemap_index.xml로 유지했습니다. 워드프레스 SEO 플러그인이 쓰던 주소입니다. 기술적으로는/sitemap.xml이 자연스럽지만, 이미 Search Console에 등록해둔 주소가 그거였습니다.
덕분에 Search Console에 아무것도 재제출하지 않았습니다. 구글 입장에서는 사이트가 갑자기 빨라진 것 외에는 바뀐 게 없습니다.
삽질 ① 홈이 403
업로드하고 접속했더니 홈페이지가 403이었습니다. 권한 문제라고 생각하고 한참 chmod를 만졌습니다.
진단은 이렇게 했습니다.
/index.php를 직접 요청 → 404/assets/site.css요청 → 200
CSS는 되는데 index.php만 404라면 권한이 아니라 파일 자체가 없다는 뜻입니다. nginx는 디렉터리 인덱스 파일을 못 찾으면 403을 냅니다.
FileZilla로 올리는 중에 루트의 index.php가 누락됐던 것이었습니다. 전송 목록에 빨간 줄이 하나 있었는데 못 봤습니다.
삽질 ② 흰 화면
더 무서운 건 이쪽이었습니다. 배포했더니 전 페이지가 흰 화면이 됐습니다.
원인은 업로드 순서였습니다. header.php를 먼저 올리고 config.php를 나중에 올렸는데, 그 사이에 접속하면 header.php가 아직 존재하지 않는 상수를 참조합니다. PHP는 치명적 오류를 내고 아무것도 출력하지 않습니다.
여기서 규칙 하나가 생겼습니다.
inc/ 를 항상 먼저 올린다.
설정과 공통 파일이 먼저 있어야 그걸 쓰는 페이지가 동작합니다. 지금도 배포할 때마다 이 순서를 지킵니다.
정리
워드프레스가 나쁘다는 얘기는 아닙니다. 글을 자주 쓰고, 여러 명이 관리하고, 기능을 계속 붙일 거라면 여전히 좋은 선택입니다.
제 경우는 필요한 기능이 거의 없었고 서버가 작았습니다. 그 조합에서는 직접 만드는 쪽이 압도적으로 단순했습니다. 지금 이 사이트 전체가 PHP 파일 몇십 개와 CSS 한 장, 계산기별 JS 한 장씩입니다.