Web Server와 관련된 중요 개념 중 하나인 리버스 프록시..
프로젝트를 해보며 nginx를 통해 reverse proxy를 적용한 경험이 있다. 최근 기술 면접에서 reverse proxy에 대한 질문을 받았는데 아무런 대답을 못했다..! (충격__)
내가 적용하고 자신있게 포폴에 적어놓고는 대답을 못한 사실이 좌절스럽고 부끄러운 한편, 오히려 성장의 기회로 삼자고 다짐했다! 그러니 공부해보자!
reverse proxy를 이야기하기 전에 proxy란 무엇인가?
(대충 넘어가지 말고 프록시에 대해 명확하게 설명할 수 없다면 꼭 보고 넘기자.)
프록시(proxy)는 "대리"의 의미로, 빠른 액세스와 안전한 통신을 확보하기 위한 중계 서버를 "프록시 서버"라고 일컫는다. 클라이언트와 웹 서버 중간에 위치하고 있어, "대리"로 통신을 받아주는 개념이라 생각하면 된다.
네트워크에 연결된 모든 컴퓨터에는 IP가 있다. 마찬가지로 프록시 서버는 자체 IP 주소가 있는 네트워크의 컴퓨터이다. 그러나 때로는 제한된 웹 사이트나 서버에 액세스하여 IP주소를 표시하지 않으려는 경우도 있다. 이런 경우, 프록시 서버를 사용하여 같은 결과를 달성할 수 있다.
프록시 서버는 클라이언트의 수신 요청을 수락하고 이러한 요청을 대상 서버로 전달하는 인터넷상의 컴퓨터이며 최종 사용자와 인터넷 사이의 게이트 역할을 한다. 앞에서 언급했듯 자체 IP 주소가 있으며, 클라이언트 시스템과 웹 서버를 글로벌 네트워크에서 분리한다.
즉, 프록시 서버를 통해 다른 IP 주소를 가진 웹 사이트에 액세스 할 수 있다.
프록시 서버는 클라이언트의 요청을 수락하고 다음 조건에 따라 응답을 생산한다.
1. 요청된 데이터 또는 페이지가 로컬 캐시에 이미 있는 경우 프록시 서버 자체가 필요한 검색을 클라이언트에 제공한다.
2. 요청한 데이터 또는 페이지가 로컬 캐시에 없는 경우 프록시 서버는 해당 요청을 대상 서버로 전달한다.
3. 프록시 서버는 클라이언트에 응답을 전송하고 또한 클라이언트에 캐시된다.
따라서 프록시 서버는 서버뿐 아니라 클라이언트 역할도 한다고 할 수 있다.
프록시는 크게 forward proxy와 reverse proxy로 나누어지는데, 기본적으로 forward proxy는 클라이언트 쪽, reverse proxy는 서버 쪽의 설정을 한다고.
일반적으로 프록시라고 하면 포워드 프록시를 뜻한다. 클라이언트 대신 프록시 서버가 목적 서버에 통신해주는 구성을 말한다.
좀더 쉽게 이해하면 회사 내부 인트라넷에서 인터넷상에 있는 서버에 요청할 때 먼저 프록시 서버를 호출하는 방식.
만약 proxy server가 없다면 아래처럼 클라이언트가 직접적으로 액세스할 수 있다.
반면 포워드 프록시를 사용하면 서버에게 클라이언트가 누구인지 감출 수 있다. 서버가 응답받은 IP는 포워드 프록시 서버의 IP이기 때문에 클라이언트가 누군지 알 수 없다.
우리가 http://racoon.com
을 요청하면 포워드 프록시 서버가 리소스를 대신 받아와 클라이언트에게 내밀어준다(forward)고 생각하면 된다고👀.
인터넷보다 프록시 서버를 먼저 호출하게 되면 포워드 프록시인 것이다.
포워드 프록시와 달리 Web Server 쪽에 위치하여 클라이언트의 접근을 최초로 받아 리퀘스트에 해당하는 Web Server에 배분해주는 역할을 한다.
클라이언트는 웹 서비스에 접근할 때 프록시로 요청하게 되고, 프록시가 배후(reverse)의 서버로부터 데이터를 가져오는 방식이다.
리버스 프록시는 서버가 누구인지를 감추는 역할을 한다. 클라이언트는 리버스 프록시 서버를 먼저 호출하게 되기에 실제 서버의 IP를 알 수 없다.
내부 서버가 직접 서비스를 제공해도 되지만 이렇게 구성하는 이유는 보안 때문이다.
보통 기업의 네트워크 환경에서는 DMZ
라고 부르는 내부 네트워크/외부 네트워크 사이에 위치하는 구간이 존재한다. 이 구간에는 보통 메일 서버, 웹 서버, FTP 서버 등 외부 서비를 제공하는 서버가 위치하게 된다.
WAS를 DMZ
에 놓고 서비스해도 되지만 WAS는 DB와 연결되어 있으므로, WAS가 해킹당할 경우 DB까지 해킹당할 수 있는 문제를 초래할 수 있다. 따라서 리버스 프록시 서버를 DMZ
에 두고 실제 서비스 서비는 내부망에 위치시킨 후 서비스하는 것이 일반적이다.
흔히 서버 아키텍처로 구성하는 web server(nginx) - WAS(tomcat) 분리 형태를 reverse proxy라고 보면 된다👀.
서버가 ssl 인증서를 직접 관리하지 않아도 되고, 보안과 확장성 측면에서 큰 이점이 있는 reverse proxy.. 이제 무엇인지 알고 쓸 수 있다!
참고
https://www.themoviedb.org/u/rosetoys
https://www.ramrojob.com/organization/rosetoys
https://swaay.com/u/rosesea521/about/