프록시(Proxy)란?
프록시는 두 호스트가 통신할 때 서로 직접 통신하지 않고 중간에서 대리로 통신을 하도록 도와주는 것을 프록시(Proxy)라고 한다. 이러한 중계 역할을 하는 서버를 프록시 서버라고 부른다. 즉, 프록시 서버는 클라이언트와 서버 사이의 중계서버로서의 역할을 한다.
이러한 프록시 서버가 클라이언트와 서버 중간에 위치하면서, 클라이언트는 프록시서버를 서버로 인식하고 서버는 프록시 서버를 클라이언트로 인식하게 된다.
프록시서버는 위치에 따라 포워드 프록시(Forward Proxy)와 리버스 프록시(Reverse Proxy)로 나뉜다.
포워드 프록시(Forward Proxy)란?
포워드 프록시는 일반적으로 프록시, 프록시 서버 혹은 웹 프록시라고 불린다. 포워드 프록시는 클라이언트들 앞에 위치한다. 클라이언트들(A)이 서버(C)에 요청(Request)을 보내면 포워드 프록시(B)가 해당 요청을 서버 대신 받아서 서버에게 전달(Forward) 해준다. 마찬가지로 서버의 응답(Response)을 포워드 프록시가 대신 받아 클라이언트에게 전달해준다.
이러한 포워드 프록시를 사용하는 이유가 뭘까? 포워드 프록시를 사용하면 다음과 같은 이점들이 존재한다.
- 접속 제한 회피 : 일부 정부, 학교, 기타 조직은 방화벽을 사용하여 사용자들에게 제한된 액세스를 제공한다. 포워드 프록시를 이용하면 사용자가 방문하는 사이트에 직접 연결하지 않고 프록시에 연결하여 이러한 제한을 회피하는데 사용할 수 있다.
- 특정 콘텐츠 제한 : 위와는 반대로, 사용자들이 특정 콘텐츠에 접속하는 것을 제한할 수 있다. 예를 들어 학교와 같은 곳에서 도박, 음란물 사이트와 같은 곳을 포워드 프록시의 필터링 규칙으로 제한할 수 있다.
- 캐싱 기능 : 포워드 프록시는 캐싱 기능을 지원하기 때문에 동일한 요청에 대해 캐싱된 내용을 전달하여 성능을 향상시킬 수 있다.
- IP 우회 및 보안 : 클라이언트에서 프록시 서버를 거쳐 요청을 보내게 되면, 서버 측은 클라이언트의 정보가 아닌 포워드 프록시의 정보를 받게 된다. 따라서 서버 측에 클라이언트의 정보를 숨길 수 있다.
리버스 프록시(Reverse Proxy)란?
리버스 프록시는 웹 서버들 앞에 위치한다. 리버스 프록시도 포워드 프록시와 마찬가지로 클라이언트의 요청을 받아 서버에게 전달하고, 서버의 응답을 받아 클라이언트에게 전달한다.
그렇다면 리버스 프록시와 포워드 프록시의 차이점은 뭘까? 우선 리버스 프록시는 서버 앞에 위치한다는 점이 다르다. 또한, 포워드 프록시가 관련 클라이언트들을 위해 임의의 서버에 접속하는 중간 매개체인 반면, 리버스 프록시는 관련 서버들을 위해 임의의 클라이언트가 해당 서버에 접속하는 중간 매개체이다. 쉽게 말해, 포워드는 주로 클라이언트들을 위해, 리버스는 서버들을 위해 일한다고 생각하면 편하다.
이러한 리버스 프락시를 이용하면 다음과 같은 이점들이 존재한다.
1. 보안
보통 기업의 네트워크 환경은 비무장 지대(DMZ)라고 불리는 내부 네트워크와 외부 네트워크 사이에 위치하는 구간이 존재한다. [그림 4]와 같이 DMZ 내에 외부에 서비스를 제공하는 서버(메일 서버, 웹서버, DNS 서버 등)를 배치하고 네트워크는 1,2차 방화벽으로 보호한다.
WAS를 DMZ에 위치해놓고 서비스해도 되지만, 이 경우 만약 WAS의 보안이 털릴 경우 관련된 DBMS 서버도 같이 털리는 심각한 문제가 발생할 수 있다.
따라서 이때 DMZ존에 WAS를 직접 놓는 대신, 웹 서버를 두고 해당 웹 서버를 리버스 프록시로 설정해놓고 WAS는 내부망에 위치시킨다.
이렇게 하면 만약 리버스 프록시 웹 서버가 털리더라도 2차 방화벽을 뚫어야 하므로 보안이 강해질 수 있다.
2. 로드 밸런싱
수많은 클라이언트들의 요청을 하나의 서버로 처리하는 것은 불가능하다. 리버스 프록시를 이용하면 대용량 트래픽을 분산시켜 가각 다른 서버로 분배해주는 로드 밸런싱 기능을 사용할 수 있다.
3. 캐싱
포워드 프록시와 마찬가지로 캐싱 기능을 제공하여 성능을 높일 수 있다.
참고
1. https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%B2%84%EC%8A%A4_%ED%94%84%EB%A1%9D%EC%8B%9C
2. https://www.lesstif.com/system-admin/forward-proxy-reverse-proxy-21430345.html
4. https://www.cloudflare.com/ko-kr/learning/cdn/glossary/reverse-proxy/
'Back-End > [Web]' 카테고리의 다른 글
[Web] HTTP 상태코드란? 404 Not Found란? (0) | 2022.08.05 |
---|---|
[Web] MVC 패턴이란? MVC 패턴의 등장 배경 (0) | 2022.05.11 |
[Web] 템플릿 엔진, JSP, Thymeleaf란? 서버 사이드 템플릿 엔진 vs 클라이언트 사이드 템플릿 엔진 (0) | 2022.04.26 |
[Web] 서블릿(Servlet)이란? 서블릿 컨테이너란? (0) | 2022.04.25 |
[Web] 웹 서버(Web Server)와 WAS의 차이 (6) | 2022.04.07 |