1. HTTP Cache란?
- Cache는 데이터나 값을 미리 복사해 놓는 임시 장소 또는 중간 버퍼다.
- 애플리케이션상에서 이전에 사용했던 리소스들을 재사용함으로써 접근시간을 줄이고, 이에 따라 성능도 향상될 수 있다.
2. httpd.conf 파일
- httpd.conf 파일은 Apache의 메인 설정 파일이다.
- 변경 사항은 웹 서버를 재실행해야 잘 적용된다.
3. Cache 금지
- httpd.conf에 아래 내용을 추가하면 Cache를 사용하지 않는다.
- no-store : 클라이언트의 캐싱을 허용하지 않고, 매 요청 시 서버에서 리소스를 다운받아야 함
<ifModule mod_headers.c>
Header set Cache-Control "no-store"
</ifModule>
4. Cache 적용 (수명 설정)
- max-age : Cache의 수명을 초 단위로 설정하는 속성 - 예) 1년=31536000
<ifModule mod_headers.c>
Header set Cache-Control "max-age=31536000"
</ifModule>
- 문서를 가져올 때 네트워크를 사용하지 않고, 메모리나 디스크에서 가져온 모습이다. Cache를 적용하면 응답 속도도 매우 빨라진다.
그러나, 네트워크를 사용하지 않기 때문에 발생할 수 있는 문제도 존재한다.
사용자가 reload를 하더라도 웹 사이트의 변경사항이 사용자의 화면에 적용되지 않을 수도 있다.
이 때는 요청시마다 애플리케이션의 변경 사항을 확인할 수 있도록 max-age를 매우 작은 값으로 설정하거나 no-cache(max-age=0)로 설정하면 된다. 변경이 생길 경우에만 새로 다운로드를 수행한다면, 이는 확실히 효율적인 방식일 것이다.
애플리케이션의 변경 사항이 없다면 '304 Not Modified' 라는 상태 코드로 응답되고, 변경 사항이 잘 적용되었다면 "200 OK" 라는 상태 코드로 응답된다.
- no-cache : cache를 사용하지 않겠다는 의미가 아닌, cache가 유효한지 항상 확인하겠다는 의미다.
<ifModule mod_headers.c>
Header set Cache-Control "no-cache"
</ifModule>
5. ETag
- 브라우저의 Cache에 저장되어 있는 구성 요소와 원본 서버의 구성 요소가 일치하는지 판단하는 방법이다.
- 브라우저는 ETag와 마지막 수정일 중에서 하나라도 불일치 한다면 새로운 구성 요소라고 판단한다.
※ ETag : 웹 페이지를 reload하기 전의 응답 Header의 ETag값, 웹 페이지를 reload한 후의 다음 요청 Header의 If-None-Match값
※ 마지막 수정일 : 웹 페이지를 reload하기 전의 응답 Header의 Last-Modified값, 웹 페이지를 reload한 후의 다음 요청 Header의 If-Modified-Since값
- ETag는 서버당 하나의 값을 가지기 때문에, 여러 서버로 운영되는 서비스의 경우에는 Cache의 효율을 떨어뜨릴 수 있다. 이 때에는 ETag를 제거할 수도 있다.
6. Caching Server
- 서버측에서 동작하는 Cache
- 대표적으로 Memcached가 있다.
'IT 상식' 카테고리의 다른 글
OSI 7Layer 설명 및 예시 (0) | 2021.09.10 |
---|---|
REST API란? (0) | 2021.05.03 |
Domain/DNS/Port/Internet(ip) (0) | 2021.03.27 |
메모리의 구조 (0) | 2021.03.12 |
HTTP/HTTPS와 SSL이란? (0) | 2021.03.12 |
댓글