프록시(Proxy)란?
프록시 서버란 클라이언트 - 서버 사이에 위치하여 통신을 중계하는 역할을 하는 응용 프로그램(서버)을 말한다.
프록시(Proxy)는 '대리', '중계' 라는 의미를 갖고 있으며, 여러 가지 이유로 직접 통신할 수 없는 경우에 중간에서 통신을 중계하는 역할을 수행한다. (보안, 성능, 안정성 향상 등의 목적을 갖고 있다.)
일반적으로 웹은 클라이언트에서 서버로 요청을 보내고, 서버에서 클라이언트로 응답하는 방식의 통신으로 데이터를 전달한다. 여기에 프록시 서버를 추가해서 요청을 중계하도록 해서, 보안상의 안정성을 높이거나, 성능을 향상시킬 수 있다.
정리하자면 아래와 같은 과정을 거쳐서 통신이 이루어진다.
- 클라이언트 -> 프록시 서버 요청
- 프록시 서버 -> 서버 요청
- 서버 -> 프록시 서버 응답
- 프록시 서버 -> 클라이언트 응답
중간에 Proxy 서버가 추가되어 중계 역할을 하는 것을 확인할 수 있다.
프록시의 두가지 종류
프록시 서버는 네트워크 상에서 어디에 위치하느냐에 따라 Foward Proxy, Reverse Proxy로 나뉘게 된다.
클라이언트 - 인터넷 사이에 위치하느냐, 서버 - 인터넷 사이에 위치하느냐에 따라 구분되며, 각 위치에 따라 역할과 이점도 다르다.
포워드 프록시 (Forward Proxy)
포워드 프록시 서버는 클라이언트 바로 뒤에 위치해 있다. 같은 내부 망에 존재하는 클라이언트의 요청을 받고, 인터넷을 통해 외부 서버에 접근하여 데이터를 가져와서 클라이언트에게 전달한다.
즉, 클라이언트가 원하는 서버(naver)에 접근하고자 할 때 서버에 요청을 하는 것이 아니라 프록시 서버에 원하는 서버의 정보를 전달하여, 포워드 프록시가 대신 인터넷에 요청하여 데이터를 가져오는 방식이다
포워드 프록시 얻을 수 있는 이점은 클라이언트 보안, 캐싱, 암호화 등이 있다.
포워드 프록시 사용 시 이점
클라이언트 보안 강화 (암호화)
클라이언트 IP 주소를 숨기고, 외부와의 직접적인 접속을 차단하여 보안을 강화할 수 있다. 외부에서 요청 IP를 알아내고자 할 때, 외부에서는 Proxy 서버의 IP만 보이게 되어서 외부에서 클라이언트의 IP를 알아내기 어려워진다.
특정 사이트 접근 제어
기업, 공공기관 등에서 특정 웹사이트에 대한 접근을 제어할 수 있다. 특정 기관의 내부 망에서 특정 사이트 접근을 막아서 데이터 유출, 악성 프로그램 다운 등을 막을 수 있다.
캐싱(Caching)
자주 요청되는 콘텐츠를 캐싱하여 클라이언트가 동일한 데이터를 다시 요청할 때 더 빠르게 제공할 수 있다. 이를 통해 성능 향상을 꾀할 수 있다.
로깅 및 모니터링
내부망에 존재하는 클라이언트의 모든 트래픽을 통제하기 때문에, 이를 통해 네트워크 사용을 모니터링하고 로깅할 수 있다. 네트워크 사용 패턴을 분석하고, 이상 활동을 감지하는 등의 역할을 할 수 있다.
리버스 프록시 (Reverse Proxy)
리버스 프록시 서버는 웹서버/WAS 앞에 위치해 있다. 클라이언트는 웹서비스에 접근할 때 웹 서버에 요청하는 것이 아닌, 프록시 서버로 요청하게 되고, 프록시가 서버로부터 데이터를 가져오는 방식이다.
"거꾸로"라서 Reverse가 아니고, "뒤쪽"이라서 Reverse이다. 뒤쪽에 있는 서버에 대한 Proxy라고 이해하면 된다.
보통 기업의 네트워크 환경에서는 DMZ라고 하는 내부/외부 네트워크 사이에 위치하는 구간이 존재해서, 메일 서버, 웹서버, FTP 서버 등 외부 서비스를 제공하는 서버가 위치하게 된다. WAS를 DMZ에 두고 서비스를 해도 되지만, 일반적으로 WAS는 DB에 연결되어 있기 때문에, 만약 WAS가 해킹당할 경우 DB까지 해킹당할 수 있는 문제가 있다.
따라서 리버스 프록시 서버를 DMZ에 두고, 실제 서비스 서버는 내부망에 위치시키는 것이 일반적이다.
리버스 프록시 사용 시 이점
로드 밸런싱(Load Balacing)
이용자가 많은 서비스의 경우 하루에 수백만 명이 방문하기도 한다. 대량의 트래픽을 하나의 서버에서 처리하기는 어렵다. 따라서 본 서버를 여러 대 두고, 앞단에 리버시 프록시 서버를 두어서 부하를 분산시켜 줄 수 있다. 이렇게 리버시 프록시로 로드 밸런싱이 가능하다.
서버 보안
리버시 프록시를 사용하면 서버 측 IP 주소를 노출시키지 않을 수 있다. 따라서 DDoS 공격을 포함한 여러 해킹 시도를 막을 수 있다. 위의 그림에서 클라이언트는 인터넷을 통해 Reverse Proxy 서버와 통신을 하고, 내부 망의 서버는 감춰져 있다. 따라서 본 서버의 정보를 숨기는 효과가 있다.
캐싱
정적 콘텐츠(이미지, CSS 파일) 등을 캐싱해서 클라이언트 요청 시 더 빠르게 응답할 수 있다. 이는 포워드 프록시의 캐싱 기능과 비슷하다. 즉, 캐싱 기능은 프록시의 본래 기능이라고 생각해보 좋을 것 같다.
암호화
서버가 클라이언트와 통신을 할 때 SSL로 암호화, 복호화를 할 경우에 비용이 많이 들게 된다. 리버스 프록시를 사용해서 들어오는 요청을 모두 복호화 하고, 나가는 응답을 암호화 해주도록 하면, 클라이언트와 안전한 통신은 하고, 서버의 부담도 줄일 수 있다.
포워드 프록시 / 리버스 프록시 차이점
프록시 서버 위치
Forward Proxy 서버는 클라이언트 앞에 놓여 있고,
Reverse Proxy 서버는 웹서버 / WAS 서버 앞에 놓여져 있다.
통신 대상
Forward Proxy는 내부망에서 클라이언트와 Proxy 간에 통신을 하여 인터넷을 통해 외부 데이터를 가져온다.
Reverse Proxy는 내부망에서 내부 WAS가 Proxy 서버와 통신하여 인터넷을 통한 요청을 Proxy 서버가 받아서 전달한다.
보안 대상
Forward Proxy는 클라이언트의 요청을 받아서 서버로 직접 요청을 보내서, 클라이언트를 감출 수 있다.
Reverse Proxy는 인터넷을 통해 들어온 요청을 Reverse Proxy 서버가 요청을 받아서 서버에 전달하므로. 서버를 감출 수 있다.
'[ Computer Science ] > Web & Network' 카테고리의 다른 글
[Network] ICMP란? / ping, traceroute (0) | 2024.09.22 |
---|---|
[Network] 포트(PORT), 소켓(Socket)이란? (웹소켓 아님 Web Socket != Socket) (0) | 2024.08.07 |
[Network] 방화벽 - 인바운드 & 아웃바운드 규칙이란? (0) | 2024.08.06 |
[Web] CSRF(크로스 사이트 요청 위조) 알아보기, Spring Security CSRF (0) | 2024.07.30 |
[Network] CORS란? Cross-Origin Resource Sharing / CORS 에러, Spring Boot (0) | 2024.07.29 |