프록시 서버(Proxy Server)
프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 시스템 또는 응용 프로그램을 가리킵니다. 여기서 클라이언트와 서버 사이에서 대리로 통신을 수행하는 것을 프록시 라고 하며, 그 기능을 하는 서버를 프록시 서버 라고 부릅니다.
이러한 프록시는 구조상 어디에 위치하느냐에 따라 두가지로 나누어지는데 내용은 다음과 같습니다.
- Forward Proxy : 클라이언트-서버 구조에서 클라이언트 쪽을 대리하는 프록시이며, 클라이언트에서 서버로 리소스 요청시 프록시 서버를 거쳐 요청을 진행합니다. 일반적으로 프록시 서버는 포워드 프록시를 뜻합니다.
- Reverse Proxy : 애플리케이션 서버 앞에 위치하여 리버스 프록시가 서버로부터 응답을 전달받아 클라이언트에게 전송하는 역할을 담당합니다.
이 두 proxy에 대한 자세한 내용을 확인하고 싶으시면 아래 링크를 통해 확인하실 수 있습니다.
https://www.linuxbabe.com/it-knowledge/differences-between-forward-proxy-and-reverse-proxy
웹 캐시(Web Cache)란?
💡 캐시(cache)란?
컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킵니다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용합니다.
웹 캐시란 클라이언트가 html/css/image등에 대해 처음 요청할 시 내려받은 파일을 특정위치에 기억해 놓았다가, 동일한 url의 리소스 요청은 다시 받지 않고 저장된 파일을 사용하여 더 빠르게 서비스하기 위한 것입니다.
이러한 웹 캐시는 크게 두종류로 나눌 수 있습니다.
사설 브라우저 캐시
- 사설 캐시는 단일 사용자가 전용으로 사용합니다.
- 브라우저 캐시는 사용자에 의해 http로 다운로드 된 문서를 가지고 있습니다.
- 그렇기 때문에 방문했던 페이지를 재방문시 서버에 추가적인 요청없이 사용 가능하며, 캐시된 컨텐츠의 오프라인 브라우징 또한 가능합니다.
공유 프록시 캐시
- 공유 캐시는 둘 이상의 사용자에 의해 재사용되는 응답을 저장하는 캐시입니다.
- 많은 사용자들에게 서비스하기 위해 웹 프록시를 설치해두면, 많은 조회가 되는 리소스들은 여러번 재사용 되기 때문에, 그로 인해 네트워크 트래픽과 레이턴시가 줄게 됩니다.
✅ 트래픽(traffic) : 네트워크 장치에서 일정 시간 내에 흐르는 데이터의 양
레이턴시(latency) : 하나의 데이터를 한 지점에서 다른 지점으로 보내는데 소요되는 시간
캐시 헤더 정리
검증헤더
검증헤더는 캐시의 유효시간이 초과되었을 때 변경사항이 없는 경우 검증을 통해 해당 데이터를 사용할 수 있게 합니다. 검증헤더의 종류는 다음과 같습니다.
- Last-Modified : 데이터가 마지막으로 수정된 시간과 최종 수정일을 응답헤더에 포함시킵니다.
- If-Modified-Since : 요청헤더에 If-Modified-Since에 수정일과 시간을 통하여 조건부 요청이 가능합니다.
- ETag : 캐시용 데이터에 고유한 버전이름을 넣어 조건부 요청이 들어왔을 때 버전이름이 같다면 304 Modified를 응답합니다.
- If-None-Match : 요청헤더에 If-None_Match를 보내 ETag와 일치하는지 조건부 요청이 가능합니다.
Cache-Control
Cache-Control 관련해서는 내용이 굉장히 많습니다. 그중에서 몇가지만 추려내어 정리한 내용은 다음과 같습니다.
- Cache-Control : max-age → 서버로부터 받은 데이터의 캐시가 유효한 시간을 나타냅니다.(초단위)
- Cache-Control : no-cache → 데이터 캐시를 해도 되지만, 항상 원(Origin) 서버에 검증하고 사용해야 합니다. 원 서버에 접근 실패시에는 Error 나 200 코드와 함께 전에 있던 캐시를 사용할 수 있습니다.
- Cache-Control : no-store → 데이터에 민감한 정보가 있으므로 저장하면 안된다는 의미입니다.
- Cache-Control : must-revalidate → 캐시 만료 후 최초 조회 시 원(Origin) 서버에 검증해야합니다. 접근 실패시 504(gateway timeout) error가 발생합니다.
- Pragma : no-cache → HTTP 1.0 하위호환 입니다.
- Cache-Control : public → 응답이 프록시 캐시 서버에 저장되어도 됩니다.
- Cache-Control : private → 응답이 특정 사용자만을 위한 것이므로, 클라이언트에만 저장됩니다.
- Cache-Control : s-maxage → 프록시 캐시에만 적용되는 max-age입니다.
- Age : {시간} →HTTP 헤더, Origin 서버에서 응답 후 프록시 캐시 내에 머문 시간을 나타냅니다.( 초단위)
💡 확실한 캐시 무효화 응답을 하고 싶으면 Pragma와 같은 하위 호환을 포함한 캐시 지시어를 모두 넣어주면 됩니다. -> Cache-Control : no-cache, no-store, must-revalidate Pragma : no-cache
참고자료 :
https://ko.wikipedia.org/wiki/프록시_서버
'DevOps 부트캠프 > 네트워크' 카테고리의 다른 글
Nginx를 이용한 Reverse Proxy 및 캐시 설정 (0) | 2022.03.30 |
---|---|
TCP vs UDP (0) | 2022.03.14 |
HTTP Method란? _ HTTP 주요 Method (0) | 2022.03.14 |
RESTful API 란? (0) | 2021.12.10 |
댓글