프록시(Proxy) 서버란?

프록시 서버란? 🤔

 

`Proxy`라는 단어는 대리(행위)나 대리권, 대리 투표, 대리인 등을 뜻하며 말 그대로 서버 요청에 대한 대리자 역할을 수행하는 것을

프록시 서버 라고 한다.

프록시 서버(Proxy Server) 는 클라이언트와 서버 사이에서 동작하는 중간 서버를 의미한다.

클라이언트가 서버에 직접 요청을 보내는 대신 `프록시 서버`는 클라이언트 요청을 받아 서버로 전달하고, 

서버에서 받은 응답을 클라이언트에게 다시 전달하는 중계자 역할을 한다.



프록시 서버의 종류 ⚙️

 

프록시 서버는 아래와 같이는 2가지 형태가 있다. 

 

💡 포워드 프록시(Forward Proxy)

 



  • `클라이언트`와 `인터넷` 사이에 있는 프록시 서버를 뜻한다.
  • `포워드 프록시`는 클라이언트의 익명성을 보장한다.
    • 클라이언트의 요청을 가로채 통신을 대리 수행해준다.
    • 때문에 `WAS`는 `클라이언트`에 대해 알 수 없다. IP 역추적을 해도 프록시 서버의 IP만 보인다.
  • 클라이언트가 요청한 내용을 캐싱한다.
    • 연결된 클라이언트가 요청한 데이터를 반환할 때 저장했다가 다른 클라이언트가 동일한 데이터를 요청하면 인터넷을 거치지 않고 바로 반환해준다.
    • 전송 시간이 절약되고 외부 요청이 감소되어 네트워크 병목 현상을 방지한다.

 

포워드 프록시는 요청을 보내는 `클라이언트 측`에 설정해두는 프록시 서버로,
클라이언트에서 특정 서버로 요청을 보내기 전에 프록시를 거쳐서 요청을 전송하는 것이다.
즉, 클라이언트가 아닌 프록시 서버의 입장에서 요청을 보내 익명성을 보장할 수 있는 것이다.

자세한 내용과 Nginx를 통한 설정 방법은 아래 참고 자료를 통해 확인해보길 바란다.

 

[참고자료]

[Nginx 포워드 프록시 사용법1](https://recordsoflife.tistory.com/m/924)
[Nginx 포워드 프록시 사용법2](https://earth-95.tistory.com/m/138)
[Nginx 포워드 프록시와 리버스 프록시](https://medium.com/humanscape-tech/nginx%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-forward-proxy-%EA%B5%AC%ED%98%84-91f3555549be)


 

💡 리버스 프록시(Reverse Proxy)



  • 리버스 프록시는 대표적으로 로드 밸런싱(Load Balancing)에 사용된다.
    • 리버스 프록시를 2개 이상의 서버 앞에 두면 대용량 요청이 들어왔을 때 서버가 과부화 되지않도록
      프록시 단에서 `로드 밸런싱`이 가능하다.
  • 서버의 정보를 숨겨 보안성을 얻는다.
    • 클라이언트는 `리버스 프록시`이 진짜 서버인 것처럼 요청을 보내게 되기 때문에 클라이언트는 서버의 정체를 알 수 없어 보안성이 좋다.
    • 본인은 AWS EC2에서 서버들을 관리하기 때문에 인바운드 보안 규칙 설정을 통해
      Reverse Proxy Server를 거쳐서만 WAS에 접근할 수 있도록 설정하여 보안성을 더욱 개선 하였다.
  • 클라이언트가 요청한 내용을 캐싱한다.
    • Forward Proxy와 동일하지만 이미 프록시 서버가 캐싱하여 알고 있는 내용도 인터넷을 거친다는 차이가 있어
      Forward Proxy가 캐싱된 데이터를 조금 더 빠르게 전송하는 것으로 이해했다.

 

리버스 프록시는 요청을 받는 `서버 측`에 설정해두는 프록시 서버로,
WAS에 요청이 도달하기 전에 프록시를 거치게 되는 것이다.

이는 WAS가 직접 요청을 받는 것이 아니라 프록시 서버가 WAS의 앞단에서 요청을 대신 전달받는 것이기 때문에 WAS의 `익명성`을 보장할 수 있는 것이다.

 

 

 


 

정리

내가 이해한 바를 정리해보면

  • `포워드 프록시``클라이언트의 정보를 보호`하는 것에 효과적이며
  • `리버스 프록시``서버의 정보를 보호`하는 것에 효과적이다.

 

다음 포스팅에서는 직접 Nginx를 통해 리버스 프록시 서버를 만드는 과정을 진행해보겠다 :)