로그인 입점하기
← 가이드 목록
시작하기

304 Not Modified란? 브라우저 캐시를 다시 다운로드하지 않는 원리 쉽게 이해하기

304는 기존 캐시가 최신이니 다시 받지 말라는 뜻입니다. 200과의 차이, ETag·Last-Modified, Cache-Control, 301과의 혼동까지 초보 기준으로 정리합니다.

304 Not Modified란? 브라우저 캐시를 다시 다운로드하지 않는 원리 쉽게 이해하기

개발자 도구에서 304 Not Modified를 보면, 3xx라서 301·302 리디렉션과 같다고 오해하기 쉽습니다. 역할은 다릅니다.

304는 — 「그 파일은 지난번과 똑같습니다. 다시 받지 말고 가지고 있는 것을 사용하세요.」

처음 방문은 200으로 파일을 받고, 이후 방문은 304로 기존 캐시를 쓰는 흐름
첫 방문 200 + 다운로드 → 이후 확인 → 304면 캐시 재사용

전화로 「최신인가요?」를 묻는 것과 비슷합니다

100페이지 매뉴얼을 매일 본사에서 새로 받을 필요는 없습니다. 「제가 가진 버전이 아직 최신인가요?」라고 묻고, 「변경 없음 — 그대로 쓰세요」라는 답이 오면 전체를 다시 받지 않습니다. 304도 변경 여부만 확인하는 응답입니다. Not Modified는 「수정되지 않음」입니다.

처음 방문과 두 번째 방문

  • 처음 — 캐시 없음 → 200 OK + 실제 파일 전송 → 브라우저 캐시에 저장 가능
  • 이후 — 「내가 가진 logo.png가 최신인가요?」 → 변경 없으면 304 → 기존 캐시 사용

쉽게 말하면 200 = 새 문서를 보내드립니다, 304 = 가지고 있는 문서가 아직 최신입니다.

304는 오류가 아닙니다

캐시가 정상 동작할 때 자주 보이는 응답입니다. 사용자는 화면을 정상적으로 봅니다. 3xx는 「추가 동작」 계열로 넓게 묶이지만, 301·302가 주소 이동인 반면 304는 기존 캐시를 쓰라는 뜻입니다. 주소창이 바뀌지 않습니다.

ETag · Last-Modified · 확인 헤더

브라우저는 파일 내용을 한 글자씩 비교하지 않습니다. 서버가 준 버전 정보를 기억했다가 다시 묻습니다.

  • ETag — 버전 번호표. 요청에 If-None-Match로 「이 번호와 다를 때만 새 파일을」이라고 물을 수 있음. 자세한 내용은 ETag란?
  • Last-Modified — 최종 수정 시각. 요청에 If-Modified-Since로 「이 시각 이후 바뀌었나요?」. 자세한 내용은 Last-Modified란?

번호표가 같으면 304, 바뀌었으면 보통 200 + 새 파일입니다. 관련 헤더는 HTTP 헤더·브라우저 캐시 글과도 이어집니다.

왜 무조건 캐시만 안 쓸까?

로고·CSS가 바뀌었는데 몇 달 전 파일을 계속 쓰면 예전 화면이 남습니다. 그래서 유효기간이 지나면 서버에 「아직 최신인가요?」를 확인합니다. 304는 그 확인 결과입니다.

장점 — 5MB 이미지를 매번 다시 받지 않아도 되어 전송량·서버 부담이 줄 수 있습니다. 304 응답에는 보통 파일 전체가 다시 실리지 않습니다.

주의 — 304여도 확인 요청(네트워크)은 갑니다. 「요청 자체가 없다」는 뜻은 아닙니다.

캐시에서 바로 쓰기 vs 304

Cache-Controlmax-age=3600처럼 아직 「신선」하면 서버에 묻지 않고 로컬 캐시만 쓸 수 있습니다. 이때 304도 필요 없습니다. 기간이 지나면 확인하고, 변경 없으면 304입니다. max-age가 끝났다고 해서 무조건 재다운로드는 아닙니다.

수정이 안 보일 때 · CDN

파일을 바꿨는데도 예전 화면이면 ETag·CDN·브라우저 캐시 등이 예상과 다르게 남을 수 있습니다. 304가 반복된다고 해서 항상 잘못된 것은 아닙니다 — 진짜로 안 바뀌었으면 정상입니다. 문제는 「분명히 수정했는데」인데도 옛 버전이 남을 때입니다.

브라우저 캐시 = 내 책상 서랍, CDN 캐시 = 동네 물류창고. 둘 다 원본까지 매번 가지 않게 돕습니다.

캐시 버스팅과 함께

오래 안 바뀌는 파일은 긴 캐시 + 내용 변경 시 style.abc123.css처럼 URL을 바꾸는 방식을 함께 쓰기도 합니다. 304(같은 URL 검증)와 캐시 버스팅(새 URL)은 경쟁이 아니라 병행 전략입니다.

301·302와 헷갈리지 않기

  • 301 — 주소 영구 이동
  • 302 — 일시 이동
  • 304 — 캐시 재사용(이동 아님)

캐시를 지우면 비교할 파일이 없어 다음엔 200 + 재다운로드가 나올 수 있습니다. 304가 많이 보이는 것 자체가 SEO 순위 상승을 의미하지는 않습니다.


자주 묻는 질문

304는 오류인가요?

아닙니다. 캐시를 효율적으로 쓰기 위한 정상 응답입니다.

200과 304 차이는?

200은 실제 콘텐츠를 보낼 수 있고, 304는 기존 캐시가 유효하니 전체 재전송이 필요 없다는 뜻입니다.

캐시 삭제 후 304가 사라지나요?

비교할 캐시가 없으면 보통 파일을 다시 받아 200이 나타날 수 있습니다.


정리

200 = 새 파일을 보내드립니다. · 304 = 가지고 있는 파일이 아직 최신입니다.

브라우저가 「이 파일이 정말 그대로인가요?」를 확인할 때 쓰는 대표 정보가 ETag입니다. 자세한 내용은 ETag란?을 참고하세요.