[Network] Forward Proxy와 Reverse Proxy

@sharkslee0 · November 24, 2024

프록시(Proxy)란?

프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.(출처:위키백과) 즉, 클라이언트와 서버 사이에 위치해서 중간자 역할을 하는 것이 프록시 서버이다.

그리고 이 프록시 서버가 어디에 위치해있는지에 따라 포워드 프록시 서버와 리버스 프록시 서버로 나뉜다.

포워드 프록시(Forward Proxy)

클라이언트 앞 단에 위치하여, 클라이언트 대신 애플리케이션 서버와 통신 후 요청에 대한 응답을 클라이언트에게 반환하는 형태이다.

포워드 프록시를 사용해서 얻을 수 있는 이점

  • 캐싱

    이전의 요청과 동일한 요청을 하는 경우, 서버에 다시 요청하는 대신 프록시 서버에서 저장된 응답을 반환할 수 있다. 정적 컨텐츠, 클라이언트의 요청에 대한 서버의 응답, DNS 조회 결과 등이 저장된다. 주로 여러 클라이언트가 공유하는 데이터를 캐싱한다.

  • 접근 제어

    정부나 공공기관, 기업 등에서 정해진 웹 서버에만 접근하도록 제한하는 경우가 있는데, 이때 프록시 서버에 정해진 웹 서버에만 접근할 수 있도록 제한할 수 있다.

  • 보안

    서버와의 통신은 프록시 서버를 통해 진행되기 때문에, 서버로부터 클라이언트의 정보를 숨길 수 있다.

리버스 프록시(Reverse Proxy)

애플리케이션 서버 앞에 위치하여, 클라이언트는 인터넷을 통해 리버스 프록시 서버와 통신하고 이후, 리버스 프록시 서버가 클라이언트의 요청을 애플리케이션 서버에 전달하는 형태이다.

리버스 프록시 서버는 DMZ에 속하게 된다. 외부 네트워크(인터넷)와 내부 네트워크(WAS) 사이에 위치하여, 외부에서 내부로의 직접적인 접근을 막고 내부 네트워크를 보호하는 영역을 DMZ라고 한다. (AWS VPC의 Public Subnet이 DMZ에 속한다.)

리버스 프록시를 사용해서 얻을 수 있는 이점

  • 캐싱

    포워드 프록시 서버와 마찬가지로 중복된 요청에 대해 이미 저장된 응답을 전달하여 부하를 줄일 수 있다. 정적 컨텐츠, API 응답 데이터, TLS 세션 정보 등이 저장된다. 주로 WAS의 부하와 클라이언트 응답 속도 개선을 위해 요청에 대한 응답을 캐싱한다.

  • 보안

    클라이언트는 애플리케이션과 직접적으로 통신하는 것이 아니라 리버스 프록시 서버와 통신하게 되므로 애플리케이션 서버의 IP 주소 등을 숨길 수 있다.

  • 로드밸런싱

    여러 대의 서버를 사용할 경우, 로드밸런싱을 통해 서버에 대한 부하를 줄일 수 있다.

백엔드에 대한 요청인지, 프론트엔드에 대한 요청인지 어떻게 구분할 수 있을까?

  • URL 패턴

    /api로 시작하는 URL은 백엔드에 대한 요청, 이외의 /로 시작하는 요청은 프론트엔드에 대한 요청으로 구분할 수 있다.

  • 포트 번호

    프론트엔드는 80번 혹은 443번 포트 번호를 사용하고, 백엔드는 3000번 혹은 8080번 포트 번호를 사용하게끔 해서 포트 번호를 통해 프론트엔드 요청과 백엔드 요청을 구분할 수 있다.

  • 헤더 정보

    Request Header에 특정 키를 확인해서 API 요청인지 확인할 수 있다.

@sharkslee0
안녕하세요 :)