본문 바로가기
Coding Study/FrontEnd Study Note

HTTP의 ETag

by bell_one 2026. 3. 17.

**ETag(Entity Tag)**는 HTTP 응답 헤더 중 하나로, 특정 버전의 리소스를 식별하기 위한 **"데이터의 지문(Fingerprint)"**과 같은 역할을 합니다. 웹 서버가 리소스의 내용이 변경되었는지 확인하여 불필요한 데이터 전송을 줄이는 데 핵심적인 도구입니다.


1. 작동 원리 (캐시 검증 과정)

브라우저가 서버에 데이터를 요청할 때 ETag는 다음과 같은 흐름으로 작동합니다.

  1. 첫 번째 요청: 클라이언트가 index.html을 요청합니다.
  2. 서버 응답: 서버는 파일을 보내면서 헤더에 **ETag: "v1.2-abcde"**와 같은 고유한 값을 실어 보냅니다.
  3. 클라이언트 저장: 브라우저는 받은 파일과 함께 이 ETag 값을 캐시에 저장합니다.
  4. 두 번째 요청 (재검증): 나중에 다시 같은 파일을 요청할 때, 브라우저는 저장해둔 ETag를 If-None-Match: "v1.2-abcde" 헤더에 담아 서버에 물어봅니다.
  5. 서버 판단:
    • 내용이 같다면: 서버는 304 Not Modified 응답을 보냅니다. 이때 메시지 본문(Body)은 비어 있어 매우 빠릅니다.
    • 내용이 바뀌었다면: 서버는 새로운 데이터와 함께 200 OK 및 새 ETag를 보냅니다.

2. 강한 검증(Strong) vs 약한 검증(Weak)

ETag는 검증의 엄격함에 따라 두 가지 형태로 나뉩니다.

  • 강한 ETag (Strong ETag):
    • 형태: "abcde123"
    • 특징: 리소스가 바이트 단위로 완벽하게 일치해야 합니다. 조금이라도 다르면 다른 값으로 취급합니다.
  • 약한 ETag (Weak ETag):
    • 형태: W/"abcde123"
    • 특징: 리소스가 의미적으로 동일하면 같다고 간주합니다. (예: 광고 문구만 바뀌거나 성능상 큰 차이가 없는 사소한 변경)

3. ETag vs Last-Modified

데이터의 수정 여부를 확인하는 방법에는 Last-Modified(최종 수정 시각)도 있습니다. 왜 ETag를 더 선호할까요?

비교 항목 Last-Modified ETag (Entity Tag)
판단 기준 파일의 마지막 수정 시간 파일 내용의 해시(Hash) 값
정밀도 초 단위까지만 측정 가능 (1초 이내 변경 감지 불가) 내용이 바뀌면 무조건 감지 (매우 정밀)
단점 내용이 그대로인데 시간만 바뀌어도 재다운로드함 해시 계산을 위한 서버 CPU 자원 소모
권장 사항 보조적인 수단 현대 웹의 표준적인 캐시 검증 수단

4. 실무 활용 팁

  • 성능 최적화: ETag를 사용하면 서버는 데이터 전체를 다시 보낼 필요 없이 "바뀐 거 없으니 네 캐시 그대로 써!"라고 짧게 대답할 수 있습니다. 이는 네트워크 대역폭을 크게 아껴줍니다.
  • 로드 밸런싱 주의: 서버가 여러 대일 때, 같은 파일이라도 서버마다 해시를 만드는 방식이 다르면 ETag 값이 달라질 수 있습니다. 이 경우 클라이언트는 내용이 같은데도 계속 새로 다운로드하는 문제가 생기므로, 클러스터 환경에서는 서버 간 ETag 생성 알고리즘을 통일해야 합니다.

5. 요약

ETag는 서버가 리소스에 붙여주는 '버전 태그'입니다.

클라이언트가 "내가 가진 이 태그(If-None-Match)랑 네가 지금 가진 거랑 같아?"라고 물어봤을 때, 서버가 "응 같아(304)"라고 하면 통신 비용을 획기적으로 줄일 수 있습니다.