Proxy의 사전적 의미는 '대리'이다. 이름 그대로 프록시 서버는 클라이언트가 다른 네트워크 서비스에 간접적으로 접속할 수 있도록 해주는 서버를 말한다.
간단하게 말하면 클라이언트와 서버 사이의 중계 역할을 하는 서버라고 이해하면 된다.
프록시 서버의 종류는 2가지로 나뉜다.
이 둘의 차이점은 이것만 기억하면 쉽게 이해할 수 있다.
포워드 프록시는 클라이언트가 서버를 속이는 것이고,
리버스 프록시는 서버가 클라이언트를 속이는 것이다.
일반적으로 말하는 프록시는 주로 포워드 프록시를 의미한다.
클라이언트가 서버에 리소스를 요청할 때 해당 서버로 직접 요청이 도달하지 않고
중간에 포워드 프록시 서버가 요청을 받는다.
예를들어 포워드 프록시를 이용하는 환경에서 클라이언트가 https://velog.io/ 에 접속하려고 하면
이 접속 요청은 우선 포워드 프록시 서버에게 도착한다. 포워드 프록시 서버는 직접 다시 이 velog.io 서버에 요청을 보내 해당 서버로부터 도착한 응답을 클라이언트에게 반환한다.
이런 방법을 사용하면 velog.io 서버는 실제 요청을 보낸 클라이언트 ip를 알 수가 없게된다.
즉, 포워드 프록시는 클라이언트가 누구인지 감춰주는 역할하여 보완에 유리하다.
또한 클라이언트의 요청을 프록시 서버에서 먼저 확인할 수 있으므로 보안이 중요한 사내 Intra망에서
사원들이 정해진 사이트에만 접속할 수 있도록 제한을 할 수 있다.
그뿐만 아니라 포워드 프록시에는 캐싱 기능이 있어 동일한 요청이 들어온 경우, 다시 서버에 요청을 보내는 것이 아니라 프록시 서버에 캐시되어 있는 내용을 제공해줌으로써 성능을 향상시킬 수 있다.
한마디로 요약하면 포워드 프록시는 클라이언트가 서버를 속여 캐싱과 보안 등의 이점을 챙기는 것이다.
리버스 프록시는 포워드 프록시와 반대되는 역할이다.
클라이언트가 서버에게 요청을 보내면 이 응답을 리버스 프록시 서버가 받고,
리버스 프록시 서버는 서버로부터 응답을 전달받아 다시 클라이언트에게 전송한다.
예를들어 velog.io가 리버스 프록시 서버를 이용한다고 해보자.
클라이언트가 https://velog.io/ 에 접속 요청을 보내면, velog.io의 리버스 프록시 서버가 이 요청을 받는다. 그리고 내부망에 있는 WAS(Web Application Server)들 중 요청을 처리할 수 있는 서버에게 해당 요청을 넘겨주게 되고, 해당 요청에 대한 응답을 다시 클라이언트에게 전달해준다.
리버스 프록시를 이용하면 서버에 가해지는 부하를 분산시킬 수 있다.
리버스 프록시 서버 뒤에 여러 WAS를 두고, End-point 마다 호출할 서버를 지정할 수 있어
역할에 맞게 서버의 트래픽을 분산시킬 수도 있다.
클라이언트의 입장에서는 요청하는 주소가 리버스 프록시 서버의 도메인이기 때문에 실제 내부적인 서버의 IP 등과 같은 정보를 알 수 없어 보안에 유리하다. 즉, 리버스 프록시 서버가 DMZ 역할을 한다.
한마디로 요약하면 리버스 프록시는 서버가 클라이언트를 속여 로드 밸런싱과 보안 등의 이점을 챙기는 것이다.