프록시
프록시 서버는 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템(응용 프로그램)이다.
Proxy = 대리
> 서버와 서버 사이의 중계기 역할
프록시: 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것
프록시 서버: 중계 기능을 하게 하는 것
프록시 사용 이유
보안상의 이유로 직접 통신할 수 없을 때 대리로 통신을 수행하여 보안, 성능 및 안정성을 향상 시키기 위함이다.
1) 익명으로 컴퓨터 네트워크 이용
프록시 서버를 이용하면 프록시 서버가 대신 리소스를 요청하기 때문에 익명으로 네트워크를 이용할 수 있다.
> 클라이언트의 IP가 아닌 프록시 서버의 IP 주소로 요청되기 때문이다.
2) 네트워크 서비스 제공을 제한 또는 관제하기 위함
게이트웨이에 프록시를 두게 되면 하위 망들의 인터넷 사용 기록을 수집할 수 있다.
> 액세스 제어 정책을 설정하여 특정 사이트나 컨텐츠에 대한 액세스를 제한할 수 있으며, 조직/기관에서 인터넷 사용을 관리할 수 있다.
3) 보안성 향상
보안 이슈로 직접 통신이 불가능한 엔드 포인트 간에 대리로 통신을 수행할 수 있다.
4) 캐싱
일반적으로 클라이언트와 웹 서버는 HTTP 통신으로 데이터를 주고 받는데, 일부 정적 컨텐츠를 캐싱하면 중복 요청에 대한 처리를 웹 서버에 다시 요청할 필요 없다.
프록시 서버 내 캐싱 데이터를 활용하여 클라이언트에게 빠르게 컨텐츠 제공이 가능하며, 웹 서버는 불필요한 부하를 줄일 수 있다.
만약 10만명의 클라이언트가 naver.com에 접근하려고 한다면, 웹 서버는 같은 절차를 10만번 중복해서 진행해야한다.
하지만 정적 데이터(웹 페이지, 이미지)의 경우 사용자 별로 응답이 달라지지 않기 때문에 포워드 프록시를 활용해 프록시 내부에 캐싱된 페이지를 불러온다.
프록시의 종류
프록시 서버의 구분은 아래 방법으로 구분이 가능하며, 이에 따라 포워드 프록시와 리버스 프록시로 나뉜다.
1) 네트워크 상 존재하는 위치
2) 데이터를 제공하는 방향
Forward Proxy
일반적으로 프록시 서버라고 하면 포워드 프록시 서버를 이야기한다.
포워드 프록시의 경우 클라이언트 바로 뒤에 놓여 있다.
같은 내부망을 사용하는 클라이언트의 요청을 외부 네트워크로 중계하는 역할을 한다.
만약 사용자가 naver.com에 연결하려고 하면, 사용자 PC에서 해당 서버로 직접 연결하는게 아니라 포워드 프록시 서버가 먼저 요청을 ㄹ받고 naver.com에 연결하여 그 결과를 클라이언트에게 전달(Foward)해준다.
이를 통해 서버에게 클라이언트가 누군지 감출 수 있다.
그 이유는 서버에서 받는 IP가 클라이언트의 IP가 아닌 프록시 서버의 IP이기 때문이다.
Forward Proxy 사용 이유
1) 서버 보안
클라이언트는 포워드 프록시를 통해서만 외부 요청이 가능하기 때문에 클라이언트가 해당 서버나 웹 사이트에 직접 접근하는 것을 방지할 수 있다.
2) 캐싱
클라이언트가 요청 시 포워드 프록시는 해당 요청을 캐싱하여 다른 클라이언트나 동일한 요청에 대한 캐싱 데이터를 전달한다.
이를 통해 서버 부하를 줄일 수 있고, 클라이언트는 더 빠르게 응답 받을 수 있다.
3)암호화
위에 언급한 것과 같이 클라이언트의 IP를 숨길 수 있고, 요청 받은 서버에서 IP를 역으로 추적해도 포워드 프록시 서버의 IP만 알 수 있게 된다.
Reverse Proxy
reverse = 배후, 뒤
리버스 프록시는 웹서버 앞에 놓여 있는 것을 말한다.
클라이언트는 웹서비스에 접근할 때 웹서버에 요청하는 것이 아닌 프록시 서버로 요청하게 된다. 이후 프록시 서버에서 다시 내부 서버로부터 데이터를 가져온다.
클라이언트쪽으로 데이터를 보내는게 포워드라면, 반대편인 서버쪽으로 데이터를 보내주는게 리버스 프록시라고 보면 된다.
Reverse Proxy 사용 이유
1) 로드 밸런싱
요청이 많은 서버의 경우 대량의 트래픽을 하나의 싱글 서버가 감당하긴 어렵다.
따라서 리버스 프록시 서버를 여러개의 본 서버 앞에 두면 특정 서버가 과부화 되지 않게 로드밸런싱이 가능하다.
2) 서버 보안
리버스 프록시를 사용하게 되면 서버 측 보안이 강화되는데, 원래 서버의 IP 주소를 노출시키지 않을 수 있기 때문이다.
클라이언트는 인터넷 요청을 통해 리버스 프록시 서버 URL로 요청을 하고, 리버스 프록시가 목적지(내부) 서버에게 요청을 경유해서 보낸다.
3)암호화
서버가 클라이언트들과 통신할 때 SSL/TSL 로 암호화, 복호화를 하는데 이 경우 비용이 많이 들게 된다.
그러나 리버스 프록시를 사용하면 들어오는 요청을 모두 복호화하고, 내보내는 응답은 암호화해주기 때문에 안전한 통신이 가능하다.
뿐만 아니라 내부 서버의 부담을 줄여줄 수 있다.