HTTP 헤더의 캐싱은 웹 성능 최적화의 핵심적인 부분이다. 캐싱은 서버와 클라이언트 간의 데이터 전송량을 줄여주며, 페이지 로딩 시간을 단축시켜 사용자 경험을 개선한다. 이 과정에서 사용되는 주요 HTTP 헤더를 살펴보자.
- Cache-Control: 이 헤더는 캐시의 동작을 제어한다. 예를 들어, Cache-Control: no-store는 어떠한 캐시도 사용하지 않도록 지시하며, Cache-Control: max-age=3600은 리소스를 3600초 동안 캐시로 저장하고 사용할 수 있음을 나타낸다.
- Expires: 이 헤더는 리소스가 언제 만료되는지를 나타내는 날짜와 시간을 제공한다. Expires 헤더가 설정되어 있으면, 그 시간 이후에는 캐시된 복사본을 사용하지 않고 서버로부터 새로운 복사본을 요청해야 한다.
- Last-Modified: 이 헤더는 서버에서 리소스가 마지막으로 변경된 날짜와 시간을 알려준다. 클라이언트는 If-Modified-Since 헤더를 사용하여 이 날짜 이후에 변경되었는지 서버에 확인을 요청할 수 있다.
- ETag (Entity Tag): 리소스의 특정 버전을 식별하는 데 사용된다. ETag는 리소스가 변경될 때마다 갱신되며, 클라이언트는 If-None-Match 헤더를 통해 캐시된 버전의 유효성을 검증할 수 있다.
캐시를 효율적으로 관리하면 네트워크 대역폭을 절약하고 서버 부하를 줄이며, 전반적인 웹 애플리케이션의 반응 속도를 높일 수 있다.
캐시 검증 헤더와 조건부 요청은 웹 성능 최적화를 위해 중요한 역할을 한다. 이들은 클라이언트와 서버 간에 효율적인 데이터 전송을 가능하게 하며, 불필요한 데이터 전송을 줄여 네트워크 트래픽과 로딩 시간을 최소화한다. 주요 검증 헤더와 그에 따른 조건부 요청에 대해 살펴보자.
- Last-Modified: 이 헤더는 서버에서 해당 리소스가 마지막으로 변경된 시간을 나타낸다. 클라이언트는 이 정보를 사용하여 If-Modified-Since라는 조건부 요청 헤더를 보낼 수 있다. 만약 클라이언트가 보유한 버전의 수정 시간이 서버의 Last-Modified 시간 이후라면, 서버는 304 Not Modified 응답을 반환하여 리소스의 새로운 다운로드가 필요 없음을 알린다.
- ETag (Entity Tag): ETag는 리소스의 특정 버전을 고유하게 식별하는 값이다. 서버는 리소스가 변경될 때마다 이 값을 갱신한다. 클라이언트는 If-None-Match 헤더를 사용하여 자신의 캐시가 최신인지 확인할 수 있다. 이 헤더에 클라이언트가 가지고 있는 ETag 값을 포함시켜 서버에 전송하면, 서버는 이 값을 검사하여 캐시된 버전이 여전히 유효한지 확인한다. 변경 사항이 없으면 304 Not Modified 응답을 보내고, 변경이 있으면 새로운 리소스와 함께 200 OK 응답을 보낸다.
이러한 검증 메커니즘은 데이터의 일관성을 유지하고, 사용자 경험을 향상시키는 데 중요한 역할을 한다. 특히 동적인 콘텐츠가 많은 웹 애플리케이션에서는 이러한 캐시 검증 방법이 서버 부하를 크게 줄여주며, 사용자에게 빠르고 원활한 서비스를 제공하는 데 도움을 준다.
프록시 캐시를 제어하는 데 사용되는 HTTP 헤더들인 no-cache, no-store, must-revalidate는 콘텐츠의 캐싱과 재검증 방식을 명확히 지정하여, 캐시 동작을 세밀하게 조정할 수 있게 도와준다. 각 지시어의 의미와 사용법을 살펴보자.
- no-cache
- Cache-Control: no-cache 지시어는 캐시를 완전히 금지하는 것이 아니라, 캐시된 콘텐츠를 사용하기 전에 서버에게 재검증을 요청하도록 한다. 이는 캐시된 데이터가 최신 상태임을 보장하기 위해 사용된다. 클라이언트나 프록시는 캐시된 복사본을 가지고 있을 수 있지만, 사용하기 전에 반드시 서버에 이 데이터가 여전히 유효한지 확인해야 한다.
- no-store
- Cache-Control: no-store 지시어는 정보를 어디에도 저장해서는 안 된다고 지정한다. 이는 주로 민감한 정보를 다룰 때 사용되며, 데이터가 디스크나 메모리에 임시 저장되는 것조차 허용하지 않아 데이터의 보안을 강화한다. 예를 들어, 금융 기관이나 건강 정보를 다루는 웹 애플리케이션에서 사용할 수 있다.
- must-revalidate
- Cache-Control: must-revalidate 지시어는 캐시된 데이터가 만료되었을 때 사용자에게 오래된 데이터를 제공하는 것을 방지한다. 캐시된 복사본의 유효기간이 지난 후에는 서버로부터 새로운 복사본을 반드시 다시 가져와야 함을 의미한다. 이 지시어는 네트워크 연결이 끊어진 상태에서도 오래된 데이터의 사용을 허용하지 않으며, 항상 최신 데이터의 사용을 보장하려 할 때 중요하다.
'CS' 카테고리의 다른 글
[HTTP | HTTP 웹 기본지식 | HTTP 헤더1 - 일반 헤더] 표현, 협상, 쿠키 (0) | 2024.05.22 |
---|---|
[HTTP | HTTP 웹 기본지식 | HTTP 상태코드] 2,3,4,5xx 상태코드 (0) | 2024.05.22 |
[HTTP | HTTP 웹 기본지식 | HTTP 메서드 활용] HTTP API 설계 예시 (0) | 2024.05.22 |
[HTTP | HTTP 웹 기본지식 | HTTP 메서드] HTTP 메서드 (0) | 2024.05.21 |
[HTTP | HTTP 웹 기본지식 | HTTP 기본] HTTP 구조 (0) | 2024.05.21 |