본문으로 건너뛰기

마이크로캐시 & 봇 부하 흡수

검색봇·AI 크롤러는 일상적인 부하원입니다. 특히 조합형 URL 표면이 큰 사이트(예: 본문/항목이 수만 개로 갈라지는 콘텐츠 사이트)는 크롤러가 서로 다른 URL 을 빠르게 훑기 때문에, 각 요청이 애플리케이션(PHP)을 끝까지 실행하게 되어 워커가 봇으로 가득 차고 사람의 요청이 밀리는 현상이 생깁니다.

multi-saas-kit 의 리버스 프록시(nginx) 기본 설정은 이 부하를 마이크로캐시 + 캐시 경화로 흡수합니다.

증상

  • 평소엔 빠른데 가끔 홈/페이지가 수 초~십수 초씩 느려진다.
  • 특히 로그인(관리자) 상태에서 더 느리게 느껴진다 — 로그인 요청은 캐시를 우회해 항상 애플리케이션을 실행하므로, 워커가 봇으로 차 있으면 그만큼 대기한다.
  • 접속 로그를 보면 트래픽의 상당 비율이 크롤러(User-Agent 에 bot/crawler/AI 크롤러 이름)다.

동작 원리 (계층)

트래픽처리
알려진 스크레이퍼즉시 차단(403) — 애플리케이션 미실행
검색봇·AI 크롤러 (GET/HEAD)마이크로캐시에 단기 저장 → 같은 URL 재크롤은 캐시로 응답(애플리케이션 미실행)
사람캐시 우회(항상 최신) — 세션/CSRF 영향 없음

여기에 캐시 경화가 더해집니다:

  • 동시 미스 묶음: 같은 URL 을 동시에 여러 봇이 처음 요청해도 애플리케이션은 1번만 실행하고 나머지는 그 결과를 공유합니다.
  • 백그라운드 갱신 + stale 제공: 캐시가 만료돼도 사용자를 기다리게 하지 않고 직전 캐시를 즉시 응답한 뒤 뒤에서 갱신합니다.

결과적으로 봇의 재크롤이 애플리케이션 워커를 점유하지 않으므로, 사람(로그인 관리자 포함)의 요청이 항상 워커를 확보합니다.

튜닝 원칙 (운영자)

구조는 표준, 수치는 사이트별. 기본 설정의 구조는 그대로 두고, 봇 부하가 큰 사이트만 수치를 조입니다.

노브의미조정 방향
봇 요청 속도 제한(rate)AI·기타봇의 초당 허용봇 폭주 사이트는 더 낮게
봇 동시 연결 수봇이 동시에 점유 가능한 연결애플리케이션 워커 수보다 작게(사람 몫 확보)
캐시 보관 시간(TTL)봇 응답 캐시 유효시간콘텐츠가 정적이면 길게(재크롤 흡수↑)

주의:

  • 검색봇은 제한/차단하지 않습니다 — 검색 노출(SEO)을 위해 무제한 허용 + 캐시만 적용합니다.
  • 봇 동시 연결 수는 애플리케이션 워커 수보다 작게 두어, 봇이 몰려도 사람이 쓸 워커가 항상 남게 합니다.
  • 이미 봇이 폭주 중인 사이트의 제한을 함부로 완화하지 마세요 — 완화 시 재폭주합니다. 대규모 트래픽은 엣지(예: Cloudflare)에서 먼저 줄인 뒤 조정합니다.

가장 큰 레버는 엣지

origin(서버)의 캐시·제한은 봇이 소비하는 자원을 줄이는 백스톱입니다. 트래픽 자체를 서버에 도달하기 전에 줄이려면 엣지(Cloudflare)에서 AI 크롤러 차단/챌린지가 가장 효과적입니다(서버 코드 변경 0). 서버 방어 개요와 봇 정책 문서를 함께 참고하세요.

점검

배포 후 다음을 확인합니다(도메인은 운영 도메인으로 대체):

  • 사람으로 홈 접속 → 정상(200).
  • 알려진 스크레이퍼 User-Agent → 차단(403).
  • 같은 콘텐츠 URL 을 크롤러 User-Agent 로 두 번 요청 → 2번째가 눈에 띄게 빠름(캐시 적중).

설정 반영은 무중단 reload 로 적용되며, 설정 오류가 있으면 자동으로 거부되어 운영 중인 사이트에 영향을 주지 않습니다.


관련: 서버 방어 개요 · 봇 차단 정책 · 페이지 관측