속도 이야기에서 캐시는 늘 등장하지만 설명은 대개 “저장해 두고 다시 쓴다” 에서 멈춥니다. 틀린 말은 아닌데, 이 정도만 알고 손대면 여러 캐시를 아무렇게나 겹쳐 켜게 됩니다. 그 결과가 “내 화면에서는 안 바뀌는데 다른 사람은 바뀐 걸 본다” 는 상태입니다.
비개발자를 위한 정확한 모델은 이것입니다 — 캐시는 계층이고, 계층마다 저장하는 것이 다릅니다.
세 계층, 세 가지 다른 일
페이지 캐시는 완성된 화면을 통째로 보관합니다. 같은 페이지를 보러 온 다음 방문자에게는 보관해 둔 화면을 그대로 내주므로, 워드프레스가 아예 일하지 않습니다. 효과가 가장 크고, 대신 사람마다 달라야 하는 화면에는 쓸 수 없습니다 — 로그인한 사용자나 장바구니가 그렇습니다.
오브젝트 캐시는 화면이 아니라 조각을 보관합니다. “이 글의 분류가 무엇인가” 같은 조회를 한 번 해 두고 재사용하는 방식입니다. 사람마다 화면이 다른 경우 — 관리자 화면, 로그인 영역 — 에서도 작동하기 때문에 페이지 캐시가 닿지 못하는 곳을 메웁니다.
오프코드 캐시는 더 아래에 있습니다. 사이트를 이루는 프로그램 코드를 매번 다시 해석하지 않도록 해석 결과를 보관합니다. 대개 서버에서 이미 켜져 있고, 창업가가 직접 만질 일은 거의 없습니다.
겹쳐서는 안 되는 조합이 하나 있습니다
여기가 실제 사고가 나는 지점입니다. 페이지 캐시를 두 겹으로 두지 않습니다. 서버 쪽에 이미 페이지 캐시가 있는데 그 위에 캐시 플러그인을 얹으면, 같은 화면을 두 곳이 각자 보관하게 됩니다.
문제는 저장이 아니라 지우는 시점입니다. 글을 수정하면 플러그인은 자기 보관본을 지우지만, 서버 쪽 보관본은 그 사실을 모릅니다. 그래서 방문자는 여전히 옛 화면을 받습니다. 반대 순서로 지워지면 이번에는 잠깐 옛 화면이 되살아납니다.
증상이 고약한 이유는 대부분의 화면이 멀쩡해 보인다는 점입니다. 관리자에게는 바뀐 화면이 보이고 방문자에게만 옛 화면이 남기 때문에, 문제 제기는 고객에게서 옵니다.
지금 무엇을 하면 되나
순서는 단순합니다. 먼저 지금 어떤 캐시가 켜져 있는지 확인합니다. 호스팅 관리 화면에 캐시 항목이 있는지, 플러그인 목록에 캐시 플러그인이 있는지 두 곳만 보면 됩니다. 둘 다 페이지를 저장하고 있다면 하나를 끕니다 — 남길 쪽은 대개 서버 쪽입니다.
그리고 지워야 할 자리를 정해 둡니다. 화면을 고쳤는데 반영이 안 될 때 누를 버튼이 어디인지 미리 알고 있으면, 그것만으로 급한 순간의 혼란이 사라집니다.
계층별 구성과 무효화 규칙은 성능 최적화 아카이브에서 더 다루고, 실제로 어떤 순서로 계층을 세우는지는 작업 과정에 공개돼 있습니다.
다음 회차
캐시가 정리되면 평상시 속도는 안정됩니다. 다음 회차는 평상시가 아닌 순간 — 소개 글 하나로 유입이 갑자기 몰릴 때 사이트가 버티게 하는 최소 준비입니다.