코딩과로그

'프록시'와 '캐시' 본문

Devops

'프록시'와 '캐시'

피리음 2023. 4. 6. 22:05

프록시(Proxy)의 사전적 의미는 대리, 대리권을 의미한다. 이와 마찬가지로 프록시 서버는 원 서버를 대리하여 통신하며 캐시, 로드밸런서, 보안 등 중계 역할을 하는 하는 서버 일컫는다.

 

프록시 서버가 중간에 위치하기 때문에 클라이언트는 프록시 서버를 ‘서버’라고 인식하고, 서버 입장에서는 프록시 서버를 ‘클라이언트’로 인식하게 된다.

클라이언트는 중간에 위치한 프록시 서버를 '서버' 로써 인식한다. 뒤에 있는 실제 서버는 클라이언트는 알지 못한다.

이러한 프록시 서버를 도입하면, 클라이언트 입장에서는 빠른 속도의 서비스를 얻을 수 있으며, 서버 입장에서는 불필요한 부하를 줄일 수 있다.

프록시 서버를 도입하면, 아래의 그림에서와 같이 원 서버에 정보를 가져올 때보다 더 빠르게 정보를 얻어올 수 있는 강점이 있다.

 

프록시 캐시와 관련된 헤더의 캐시 지시어 (directives)

  • Cache-Control
    • public : 응답이 public 캐시에 저장되어도 됨
    • private : 응답이 해당 사용자만을 위한 것이다. private 캐시에 저장되어야 한다 (기본값)
    • s-maxage: 프록시 캐시에만 적용되는 max-age
    • Age: 60 (HTTP 헤더)
      • 오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간(초)을 의미한다.

캐시 무효화 헤더

  • Cache-Control
    • no-cache : 캐시는 가능하나 항상 원 서버에서 검증 후 사용. 만약 원 서버에 접근이 불가하면 에러 대신 프록시 캐시 내 오래된 정보라도 보여주도록 설정할 수 있음 (Error or 200 OK)
    • no-store : 데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용 후 빨리 삭제)
    • must-revalidate
      • 캐시 만료 후 최초 조회 시 원 서버에 검증해야함
      • 원 서버 접근 실패 시 반드시 오류가 발생해야함. 504 (Gateway Timeout)
      • 캐시 유효시간이라면 캐시를 사용함
      • 통장 잔고 등의 최신 정보가 중요한 경우에 설정해야됨.
    • Pragma: no-cache
      • HTTP 1.0 하위 호환

 

 

 

프록시 서버의 위치가 '클라이언트와 같은 내부망에 있느냐' 아니면 '내부망 밖에 있느냐' 에 따라 포워드 프록시와 리버스 프록시로 나뉜다.

 

포워드 프록시 (Forward Proxy)

포워드 프록시는 내부망에 위치해 있다. 포워드 프록시는 클라이언트의 요청을 받으면 포워드 프록시가 직접 서버에서 데이터를 가져와서 클라이언트에게 응답한다. 흔히 불리는 '프록시 서버'는 포워드 프록시를 의미한다고 한다.

 

https://inpa.tistory.com/entry/NETWORK-%F0%9F%93%A1-Reverse-Proxy-Forward-Proxy-%EC%A0%95%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EC%A0%95%EB%A6%AC

 

포워드 프록시 사용 이점

  • 클라이언트 보안 (Security)
    • 포워드 프록시 서버는 방화벽과 같은 개념으로 제한을 위해 사용 될 수 있다. 클라이언트의 요청을 걸러줄 수 있기 때문이다. 특정 사이트에 접속하는 것을 막을 수 있다. 보통 정부, 학교, 기업등에서 이러한 방식으로 인터넷 사용을 제한할 때 사용한다.
  • 캐싱 (Caching)
    • 클라이언트가 어떤 웹 페이지에 접근하면 프록시 서버는 해당 페이지 서버의 정보를 캐싱(임시보관)해둔다. 그리고 클라이언트가 똑같은 페이지에 접근하는 등을 통해 같은 리소스를 요청할 경우 실제 서버에 요청하지 않고 바로 클라이언트에게 캐시된 정보를 반환하기에 클라이언트는 훨씬 빠르게 응답을 받을 수 있으며 서버의 부하를 줄이는 효과도 낼 수 있다.
  • 암호화 (Encryption)
    • 포워드 프록시 서버를 통과할 때 암호화된다. 암호화된 요청은 다른 서버를 통과할 때 필요한 최소한의 정보만 갖게 되는데, 이는 클라이언트의 ip 를 (보안을 위해) 감춰주는 보안 효과를 내준다. 따라서 본 서버에서 IP 주소를 역추적해도 포워드 프록시 서버를 사용하면  정체를 파악하기 어렵게 된다.
      왜냐면 IP 추적해도 포워드 프록시 서버 IP만 보이기 때문이다.

 

리버스 프록시 (Reverse Proxy)

리버스 프록시는 아래 그림처럼 웹서버/WAS 앞에 놓여 있는 것을 말한다.

https://inpa.tistory.com/entry/NETWORK-%F0%9F%93%A1-Reverse-Proxy-Forward-Proxy-%EC%A0%95%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EC%A0%95%EB%A6%AC

 

 

리버스 프록시 사용 이점

  • 로드 밸런싱 (Load Balancing)
    •  리버스 프록시 서버를 여러개의 본 서버들 앞에 두면 특정 서버가 과부화 되지 않게 로드밸런싱이 가능하다.
  • 서버 보안
    • 리버스 프록시를 사용하면 본래 서버의 IP 주소를 노출시키지 않을 수 있어, DDoS 공격을 막는데 유용하다.
  • 캐싱 (Caching)
    • 만약 한국의 클라이언트가 캐나다에 웹 서버에 접근하려 할 때, 리버스 프록시가 한국에 있다면 클라이언트는 캐나다의 서버에 접근할 필요없이 한국에 있는 리버스 프록시에 접근하면 되기에 더욱 빠른 성능을 획득할 수 있다.
    • 포워드 프록시도 동일한 이유로 캐싱이 가능하다.
  • 암호화 (Encryption)
    • SSL 암호화에도 좋다. 본래 서버가 클라이언트들과 통신을 할때 SSL(or TSL)로 암호화, 복호화를 할 경우 비용이 많이 들게 되는데, 리버스 프록시가 들어오는 요청을 모두 복호화하며 나가는 응답의 암호화를 담당하여 클라이언트와의 통신에 응답할 수 있어 본래 서버가 암호/복호화에 들어가는 작업을 없애주기에 서버의 부담을 줄여준다.

 

참고문헌:

https://inpa.tistory.com/entry/NETWORK-%F0%9F%93%A1-Reverse-Proxy-Forward-Proxy-%EC%A0%95%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EC%A0%95%EB%A6%AC