가장 교묘한 장애 유형: 서버는 계속해서 200을 반환하지만, 페이지는 계속 오류를 보고합니다.
당사 백엔드 스크립트는 nginx의 영향을 받습니다. expires 7d 브라우저가 7일 동안 캐시하여 스크립트 개정 후에도 브라우저가 이전 버전을 실행 중이며, 새 데이터 형식을 렌더링할 때 충돌합니다. 코드는 모든 예외를 「서버를 읽을 수 없음」으로 보고하므로, 서버를 수시간 동안 조사했지만 사실 서버는 항상 정상이었습니다. 이 도구는 파일 유형별로 상호 충돌하지 않는 캐시 전략과 응답 헤더 자가 점검 스크립트를 생성합니다.
—
—
| 현상 | 실제 원인 | 확인 방법 |
|---|---|---|
| CSS/JS를 수정했지만, 프로덕션 환경에서 "적용되지 않은 것처럼 보임" | 장기 캐시 + 참조 시 버전 번호 없음 | curl -I max-age를 확인하세요. 새 버전 번호로 다시 배포합니다. |
| 서버 로그는 모두 200이지만 페이지에서 "데이터를 읽을 수 없습니다" 오류가 발생함 | 브라우저가 오래된 스크립트를 실행하면서 새 데이터 형식을 렌더링할 때 충돌하며, catch 문에서 네트워크 장애로 잘못 보고됩니다. | 콘솔에서 오류 발생 행을 확인하세요; 스크립트의 no-cache 설정 후 Ctrl+F5를 누르세요. |
| 일부 페이지는 새 버전이고, 일부는 구 버전임 | 동일한 CSS 파일이 여러 페이지에서 참조되는데, 그 중 일부 페이지의 버전 번호만 변경함 | 사이트 전체에서 해당 리소스 이름을 검색하여 일괄적으로 버전을 올림 |
| 백엔드에서 변경한 후에는 며칠이 지나야 적용됨 | 백엔드 페이지가 장기 캐시로 설정됨 | 백엔드는 전부 no-store |
| 데이터가 항상 최신 버전이 아님 | 데이터 인터페이스가 CDN 또는 브라우저에 의해 캐시됩니다. | API 인터페이스는 no-store; fetch 시 타임스탬프 파라미터 포함 |
| 로컬 curl은 정상 작동하지만 사용자 브라우저에서는 작동하지 않음 | CDN 계층에서 여전히 이전 버전을 캐시 중임 | 사용 -H 'Cache-Control: no-cache' 비교하고, CDN 콘솔에서 새로 고침함 |
1 · 서버 응답은 200이지만, 페이지에서 오류가 발생합니다.백그라운드 스크립트가 expires 7d 캐시로 인해 개정 후 브라우저가 여전히 구 버전 스크립트를 실행하고, 이 구 버전 스크립트가 새 데이터 형식을 파싱하다가 충돌하며, catch 블록이 렌더링 예외까지 「서버에서 읽을 수 없음」으로 보고하므로 문제 해결 방향이 완전히 틀어집니다.
2 · 설정 변경: 백엔드 스크립트는 별도로 no-cache로 설정location = /assets/js/admin.js { add_header Cache-Control "no-cache"; }— 정확한 매칭(location =)은 정적 자원에 대한 정규식 기반 장기 캐시 규칙보다 우선 적용됩니다.
3 · 오류 메시지는 분류하여 처리해야 함「데이터는 도착했으나 렌더링이 실패함」과 「네트워크 요청 실패」는 반드시 별도의 두 문장으로 보고해야 합니다. 그렇지 않으면 문제 해결 방향이 이틀간 완전히 틀어질 수 있습니다.
4 · 간단한 규칙 하나만 기억하세요:장기 캐시를 설정하려면 반드시 버전 번호를 포함해야 하며, 버전 번호가 없는 리소스는 절대 장기 캐시해서는 안 됩니다.