만쥬의 개발일기

프록시란

프록시 서버는 클라이언트와 서버 사이에서 서로 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 시스템 혹은 응용프로그램이다.

프록시(Proxy)는 대리라는 의미를 가지며, 서버와 서버 사이 중계기 역할을 한다.
프록시를 통해 통신함으로써 보안, 성능, 안정성에 이점이 생긴다.

그리고 프록시는 네트워크 상의 위치와 데이터를 제공하는 방향에 따라 포워드 프록시리버스 프록시로 나뉜다.

포워드 프록시(Forward Proxy)

개념

포워드 프록시 서버는 위 그림처럼 클라이언트의 뒤에 놓여 있다.

클라이언트가 서버에 접근하고자 할 때, 해당 타겟 서버 주소를 포워드 프록시 서버에 전달하면 프록시 서버는 인터넷으로 요청을 보낸 뒤 응답을 가져오는 방식으로 작동한다.

특징

포워드 프록시는 다음과 같은 특징들을 가진다.

클라이언트 보안 (Security)

정부, 학교, 기업 등의 기관은 기관에 속한 사람들의 제한적인 인터넷 사용을 위해 방화벽을 사용한다.
그리고 포워드 프록시 서버는 방화벽과 같은 개념으로 제한을 위해 사용한다.

예를 들어 포워드 프록시 서버에 룰을 추가해 특정 사이트에 접속하는 것을 막을 수 있다.

캐싱 (Caching)

우리가 어떤 웹 서버에 접근하면 프록시 서버는 해당 서버의 정보를 캐싱(임시보관)해둔다.

그래서 똑같이 해당 페이지에 접근하거나, 다른 클라이언트가 해당 페이지를 요청할 때 , 캐시된 정보(페이지)를 그대로 반환할 수 있고, 이는 서버의 부하를 줄이는 효과도 낼 수 있다.

위의 그림을 보면 naver.com에 접근할 때 4명의 클라이언트는 본래 각각 인터넷을 경유해 웹 페이지를 받지만, 포워드 프록시를 이용해 캐싱된 페이지를 불러오므로 2~4 번째 클라이언트는 훨씬 빠르게 조회가 가능하다.

암호화 (Encryption)

클라이언트의 요청은 포워드 프록시 서버를 통과할 때 암호화된다.
암호화된 요청은 다른 서버를 통과할 때 필요한 최소한의 정보만 갖게 되는데, 이는 클라이언트의 ip 를감춰주는 보안 효과를 내준다.

따라서 본 서버에서 IP 주소를 역추적해도 포워드 프록시 서버의 IP만 노출되기 때문에 정체를 파악하기 어렵게 된다.

리버스 프록시(Reverse Proxy)

개념

리버스 프록시는 위 그림 처럼 웹서버 앞에 놓인 것을 말한다. 클라이언트는 요청을 보낼 때 웹서버가 아닌 프록시 서버로 보내게 되고, 프록시 서버가 서버로부터 데이터를 가져온다.

즉, 클라이언트 쪽으로 응답 데이터를 밀어주는 것이 포워드 프록시이고, 서버 쪽으로 요청 데이터를 밀어주는 것이 리버스 프록시이다.

기업의 네트워크 환경에는 DMZ구간 ( 내부/외부 네트워크에 둘 다 접근 가능한 공간)이 존재하는데, WAS를 해당 구간에 둘 경우 해킹의 위험이 있기 때문에 실제 서버는 내부망에 위치하고, 앞단(DMZ)에 리버스 프록시 서버를 두고 서비스하는 것이 일반적이다.

우리가 흔히 아는 형태인 WebServer(Apache,Nginx) - WAS(Tomcat)의 분리 형태가 Reverse 프록시를 적용한 모습이다. 여기서 웹서버가 Reverse proxy 서버가 된다. 물론, 아파치 톰캣처럼 한 서버에 web과 was가 모두 존재한다면 리버스 프록시라고 볼 수 없다.

DMZ에 대한 내용은 다음 포스팅에도 정리되어있다.
https://kangmanjoo.tistory.com/139

특징

로드 밸런싱 (Load Balancing)

대량의 트래픽을 감당해야 할 때, 리버스 프록시 서버를 여러개의 본 서버들 앞에 두면 특정 서버가 과부화 되지 않게 로드밸런싱이 가능하다.

서버 보안 (Security)

리버스 프록시를 사용하면 서버 측 보안에 좋다.
리버스 프록시를 사용하면 본래 서버의 IP 주소를 노출시키지 않을 수 있다. 따라서 해커들의 DDoS같은 공격을 막는데 유용하다.

위의 그림 에서처럼 클라이언트는 서버가 아닌 리버스 프록시 서버의 url에 요청을 보낸다.
이렇게 되면 클라이언트는 본 서버의 url은 모르게 되고, 이는 본서버의 정보를 숨기는 효과가 된다.

캐싱 (Caching)

만약 어떤 한국에 있는 유저가 미국에 웹서버를 두고 있는 사이트에 접속할때, 리버스 프록시 서버가 한국에 있다고 해보자.

그러면 한국에 있는 유저는 한국에 있는 리버스 프록시 서버와 통신해서 리버스 프록시 서버에 캐싱되어 있는 데이터를 사용할 경우에는 더 빠른 성능을 보여줄수 있다.

포워드 프록시의 캐싱과 비슷한 기능을 한다고 보면 된다. (정확히는 프록시의 본래 기능)

암호화 (Encryption)

마지막으로 SSL 암호화에도 좋다.
본래 서버가 클라이언트들과 통신을 할때 SSL(or TSL)로 암호화, 복호화를 할 경우 비용이 많이 들게 된다.
그러나 리버스 프록시를 사용하면 들어오는 요청을 모두 복호화하고 나가는 응답을 암호화해주므로 클라이언트와 안전한 통신을 할수 있으며 본래 서버의 부담을 줄여줄 수 있다.

reference

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!