[HTTP] ETag를 이용한 캐싱 그리고 예시

Posted on Jun 22, 2025

ETag란 무엇인가?

ETag는 HTTP 응답 헤더에서 서버가 리소스의 버전을 나타내기 위해 사용하는 값입니다. 클라이언트는 이 값을 사용하여 서버에 재요청할 때, 이전에 받은 리소스와 변경된 부분을 비교할 수 있게 됩니다. 이를 통해 불필요한 리소스 전송을 줄여주고, 네트워크 대역폭과 서버 부하를 절감할 수 있습니다.

클라이언트는 서버에 요청을 보낼 때 If-None-Match 헤더에 ETag 값을 삽입합니다. 서버는 클라이언트가 보낸 ETag 값을 바탕으로 리소스가 변경되었는지 확인하고, 변경되지 않았다면 304 Not Modified 상태 코드를 반환합니다. 리소스가 변경되었을 경우, 새로운 ETag와 함께 리소스를 전송합니다.

장점

  • 서버의 상태를 최신으로 유지하면서 클라이언트 버전에 맞게 적절한 리소스를 제공합니다.
  • 트래픽을 줄이고, 클라우드 환경에서의 비용 최적화를 도울 수 있습니다.
sequenceDiagram participant Client participant CDN Client->>CDN: GET /data.json Note over Client: header: If-None-Match: {ETag | null} alt Same ETag CDN-->>Client: 304 status code else modified resource Note over CDN: header: ETag: {ETag} CDN-->>Client: resource end

실제 AWS CloudFront에서?

많은 웹 서비스가 S3에서 파일을 제공하고, 이를 CloudFront를 통해 빠르게 제공하고 있습니다. CloudFront는 빠른 응답을 제공하고, 캐싱을 통해 비용을 절감하는 데 유용합니다. 이때 ETag를 사용하여 클라이언트가 변경된 리소스를 요청할 때만 데이터를 전송하도록 유도할 수 있습니다.

웹 브라우저는 대부분 자동으로 ETag를 처리하지만, 만약 다른 플랫폼(예: Unity)에서 서비스를 제공한다면 ETag를 활용할 수 있는지 확인해야 합니다.

Weak Validator

“Weak ETag"는 ETag 값 앞에 “W/“를 붙여서 사용하는 형식입니다. 이는 리소스의 내용이 완전히 일치하지 않아도 ETag 값을 그대로 사용할 수 있도록 해줍니다. 즉, 콘텐츠의 변경 여부를 보다 유연하게 판단할 수 있게 해주는 방식입니다.

예를 들어, Binance의 API 요청을 보면 If-None-Match 헤더에 W/“59031820121fc2dbdf7237db4ef883af"와 같은 weak ETag 값이 사용되는 것을 볼 수 있습니다. 이 값은 실제 바이트값이 변경되지 않더라도 리소스가 사실상 동일하면 변경된 ETag를 그대로 사용할 수 있다는 것을 의미합니다.

If-None-Match: W/“59031820121fc2dbdf7237db4ef883af”

Unity와 같은 클라이언트에서의 사용

만약 게임 클라이언트(예: Unity)에서 ETag를 사용하려면, 클라이언트가 ETag를 제대로 처리하고 있는지 확인해야 합니다. 예를 들어, “로열 매치"와 같은 게임에서는 S3에서 동적으로 맵 데이터를 받아오고, ETag를 활용하여 캐싱 최적화를 하고 있음을 알 수 있습니다. 이 게임에서는 강한 검증(Strong ETag)을 사용하여, 변경된 리소스를 정확하게 추적하고 있음을 확인할 수 있었습니다.

요청:

If-None-Match: “9fe7e6272457cf0385cb1672fc3a1390”

응답:

ETag: “9fe7e6272457cf0385cb1672fc3a1390”

이처럼, ETag는 Unity와 같은 게임 클라이언트에서도 매우 유용하게 활용될 수 있습니다. 실제로 ETag를 사용하여 트래픽을 줄이고, 비용을 최적화하는 방법에 대해 많은 게임들이 채택하고 있습니다.

결론

ETag를 사용한 캐싱은 네트워크 대역폭을 절감하고, 서버의 부하를 줄이며, 클라우드 환경에서 비용을 최적화하는 데 매우 유용한 방법입니다. AWS CloudFront와 같은 CDN에서는 ETag를 적극 활용하여 더 효율적인 리소스 관리를 할 수 있으며, 웹 브라우저뿐만 아니라 게임 클라이언트에서도 잘 활용되고 있습니다. 다양한 환경에서 ETag를 활용하여 더욱 스마트한 리소스 관리와 비용 절감을 이끌어낼 수 있습니다.

참고 자료