ETag란? HTTP 캐싱을 똑똑하게 만드는 헤더

ETag의 정의

ETag(엔티티 태그, Entity Tag)는 서버가 특정 리소스의 버전을 식별하기 위해 발급하는 고유한 값으로, HTTP 응답 헤더에 담겨 전달됩니다. 쉽게 말해 파일의 ‘지문’과 같습니다. 파일 내용이 조금이라도 바뀌면 지문도 달라지기 때문에, 클라이언트는 이 값만 비교해도 리소스가 변경되었는지 알 수 있습니다. 보통 ETag: \"a1b2c3d4\"처럼 해시값이나 체크섬 형태로 표현됩니다.

동작 원리와 예시

브라우저가 처음 이미지를 요청하면 서버는 응답과 함께 ETag 값을 내려줍니다. 이후 같은 리소스를 다시 요청할 때, 브라우저는 If-None-Match 헤더에 저장해둔 ETag 값을 실어 보냅니다. 서버는 이 값을 현재 리소스의 ETag와 비교해서 같으면 리소스를 다시 보내지 않고 304 Not Modified 상태 코드만 응답합니다. 다르면 새 리소스와 새로운 ETag를 함께 내려줍니다.

비유하자면 택배 재배송 확인과 비슷합니다. 이미 받은 물건과 똑같은 물건인지 송장 번호(ETag)만 비교해보고, 같으면 굳이 다시 보내지 않는 것이죠. 이 방식은 파일 수정 시간을 기준으로 하는 Last-Modified 헤더보다 더 정밀합니다. 같은 초 안에 파일이 여러 번 수정되거나, 내용은 그대로인데 타임스탬프만 바뀌는 경우에도 ETag는 실제 내용 변화 여부를 정확히 판단할 수 있기 때문입니다.

실무에서 왜 쓰는가

ETag를 활용하면 불필요한 데이터 전송을 줄여 네트워크 비용과 서버 부하를 크게 낮출 수 있습니다. 이미지, CSS, JS 같은 정적 리소스는 물론이고 API 응답 캐싱에도 자주 사용됩니다. 특히 다음과 같은 상황에서 유용합니다.

  • 대용량 이미지나 파일을 자주 재요청하는 서비스에서 트래픽 절감
  • REST API에서 동일 데이터 재조회 시 대역폭 절약
  • CDN이나 프록시 서버와 결합해 캐시 유효성 검사를 자동화

다만 ETag를 서버 인스턴스마다 다르게 생성하면(예: 로드밸런싱 환경에서 각기 다른 해시 알고리즘 사용) 오히려 캐시가 제대로 동작하지 않을 수 있으니, 여러 서버 간 ETag 생성 방식을 일관되게 맞추는 것이 중요합니다. 결국 ETag는 ‘내용이 같으면 다시 보내지 않는다’는 단순한 원칙으로 웹 성능을 효율적으로 개선하는 핵심 캐싱 도구입니다.

댓글 남기기