네트워크 - Proxy

Jaeminst·2022년 3월 10일
1
post-thumbnail

프록시 서버

프록시 서버는 원 서버를 대리하여 통신하며 캐시, 로드밸런서, 보안 등 중계 역할을 하는 하는 서버로 중간에 위치하기 때문에 클라이언트는 프록시 서버를 ‘서버’라고 인식하고, 서버 입장에서는 프록시 서버를 ‘클라이언트’로 인식하게 됩니다.

이러한 구조상 어디에 위치하느냐에 따라 포워드 프록시(forward proxy) 혹은 리버스 프록시(reverse proxy)로 나누어 집니다.

포워드 프록시 (Forward Proxy)

일반적인 프록시 서버는 포워드 프록시를 말하며, 이는 클라이언트-서버 구조에서 클라이언트 쪽을 대리하며, 클라이언트에서 서버로 리소스를 요청할 때 직접 요청하지 않고 프록시 서버를 거쳐서 요청합니다.

리버스 프록시 (Reverse Proxy)

리버스 프록시는 포워드 프록시와 반대의 개념으로, 애플리케이션 서버의 앞에 위치하여 클라이언트가 서버에 요청할 때 리버스 프록시를 호출하고, 리버스 프록시가 원 서버로부터 응답을 전달받아 다시 클라이언트에게 전송하는 역할을 합니다.


로드밸런서

서비스 규모가 커지면 서버 한 대로는 모든 서비스를 수용할 수 없게 됩니다.
서버 한 대로 서비스를 제공할 수 있는 용량이 충분하더라도 서비스를 단일 서버로 구성하면 해당 서버의 애플리케이션, 운영체제, 하드웨어에 장애가 발생했을 때, 정상적인 서비스를 제공할 수 없습니다.

서비스 가용성을 높이기 위해서 하나의 서비스는 보통 두 대 이상의 서버로 구성하는데 각 서버 IP주소가 다르므로 사용자가 서비스를 호출할 때는 어떤 IP로 서비스를 요청할지 결정해야 합니다.

사용자에 따라 호출하는 서버의 IP가 다르면, 특정 서버에 장애가 발생했을 때, 전체 사용자에게 영향을 미치지 않아 장애 범위는 줄겠지만 여전히 부분적으로 서비스 장애가 발생합니다. 이러한 문제점을 해결하기 위해서 로드 밸런서를 사용합니다.

L4 로드 밸런서

일반적인 로드 밸런서가 동작하는 방식입니다.
TCP, UDP 정보를 기반으로 로드 밸런싱을 수행하며 부하를 분산함과 동시에 최적화와 보안 기능을 함께 제공합니다.

L7 로드 밸런서

HTTP 헤더 정보나 URI를 기반으로 프로토콜을 이해한 후 부하를 분산합니다.
일반적으로 이러한 장비를 ADC(Application Delivery Controller)라고 부르며 리버스 프록시 역할을 수행합니다.

최근 사용되는 대부분의 로드 밸런서는 4계층에서 7계층까지 기능을 모두 지원하며 장애극복(Failover), 리다이렉션의 기능도 함께 수행합니다.


캐시 헤더

Cache-Control

캐시 지시어(directives)

  • Cache-Control: max-age=60
    캐시가 유효한 시간 (초) - 서버로부터 받은 자료가 캐시에 60초간 유효함

  • Cache-Control: no-cache
    데이터는 캐시해도 되지만, 항상 Origin 서버에 검증하고 사용
    원 서버 접근 실패 시 Error OR 200(OK)와 함께 예전 캐시 사용할 수도 있음

  • Cache-Control: no-store
    데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용후 빠르게 삭제)

  • Cache-Control: must-revalidate
    캐시 만료 후 최초 조회 시 Origin 서버에 검증해야함
    원 서버 접근 실패 시 반드시 504(Gateway Timeout) 오류가 발생해야함

  • Pragma: no-cache
    HTTP/1.0 하위 호환, { no-cache, no-store, must-revalidate }와 함께 관례적 사용

  • Cache-Control: public
    응답이 프록시 캐시 서버에 저장되어도 됨

  • Cache-Control: private
    응답이 해당 사용자만을 위한 것, 클라이언트에만 저장(기본값)

  • Cache-Control: s-maxage
    프록시 캐시에만 적용되는 max-age

  • Age: 60
    HTTP 헤더, 오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간(초)

조건부 요청 헤더

  • Last-Modified: 날짜 // 유효시간이 초과하여도 데이터의 최종 수정일이 같으면 기존 캐시 사용
  • If-Modified-Since: 날짜 // 유효기간이 지나면 데이터가 수정되었는지 검증

검증 헤더 (Validator)

  • ETag // 서버에서 완전히 캐시를 컨트롤 하고싶은 경우
  • If-None-Match // 유효기간이 초과할시 ETag를 검증하고 캐시를 사

캐시 만료 헤더

  • Expires: 날짜 // 캐시 만료일 지정, HTTP/1.0 이상, 지금은 max-age 사용 권장
    Cache-Control: max-age 사용시 Expires 무시됨

아키텍처의 구성요소에 대해

  • 프록시란?
    사전적 의미로 대리, 대리권을 의미한다.

  • 로드밸런서란?
    클라이언트가 서버에 요청할 때 서버의 부하를 줄여주기 위하여 여러대의 서버를 연결하여 서버들의 부하를 관리한다.

  • 방화벽이란?
    서버에 나쁜 의도로 요청되는 패킷들을 제거한다.

  • 캐시의 기본원리
    같은 파일을 여러번 요청하면 서버에 부담이 되므로 같은 파일을 저장해두고 서버에서 보내줄 파일을 가지고 있으면 보내지 않고 가지고 있는 파일을 사용함으로써 서버의 부담을 줄여준다.

  • CDN에 대해
    콘텐츠 전송 네트워크란 지리적으로 분산된 여러 개의 서버로 웹 콘텐츠를 사용자와 가까운 곳에서 전송함으로써 전송 속도를 높인다.

profile
DevOps !

0개의 댓글