우선 서버와 클라이언트 개념에 대해 확실히 할 필요가 있다. 서버와 클라이언트는 컴퓨터에 부여된 이름이 아니라 해당 컴퓨터의 현재 역할을 의미한다.
클라이언트는 요청을 하는 컴퓨터, 서버는 요청에 대한 응답을 하는 컴퓨터라고 생각하면 된다. 일반적으로, 서버와 클라이언트 간의 통신은 다음과 같이 일어난다.
그런데, 만약 서버와 클라이언트가 직접적으로 통신하지 않도록 하고 싶다면? 서버와 클라이언트 사이에서 통신을 중계해주는 매개체가 있어야 한다. 그것이 바로 프록시 서버이다.
프록시 서버는 클라이언트와 서버 사이에서 통신을 중계해주는 서버를 의미한다.
1. 클라이언트의 request (client -> proxy)
2. 프록시 서버의 request (proxy -> server)
3. 서버의 response (server -> proxy)
4. 프록시 서버의 response (proxy -> client)
이렇게 되면, 서버와 클라이언트는 직접적으로 통신하지 않고 오로지 프록시 서버와만 통신하게 된다. 따라서 서버, 클라이언트 쪽에 ip를 숨길 수 있기 때문에 보안상의 이유로 프록시 서버를 사용한다. 프록시 서버를 여러대 두어 접속을 우회할 수도 있다. 또한, 프록시 서버에 데이터를 캐싱하면 매번 서버에 직접 요청할 필요가 없기 때문에 서버의 부담을 줄임과 동시에 응답의 속도를 높일 수도 있다.
포워드 프록시 서버란, 클라이언트의 앞단에 위치해서 클라이언트를 대리하는 역할을 하는 프록시 서버를 의미한다.
포워드 프록시 서버가 클라이언트를 대리한다면, 리버스 프록시 서버는 서버를 대리하는 프록시 서버이다. 프록시 서버가 대신 클라이언트에 응답하기 때문에 서버가 직접 노출되지 않기 때문에 비교적 안전하다.
물론 프록시 서버가 항상 클라이언트 혹은 서버단에 있어야 하는 것은 아니다.
오픈 프록시 서버는 누구나 접속하여 사용할 수 있는 프록시 서버를 의미한다. 본인의 ip가 서버에 전달되는 것을 막고 싶거나, 혹은 특정 국가가 차단된 사이트에 접속하기 위해 프록시 서버를 경유할 수 있다.
위에 언급된 것은 대표적인 예시이며, 프록시 서버의 종류는 훨씬 더 많다. 필요에 의해 적절히 구성해서 사용하면 될 것 같다!