Proxy Or Proxy Server
- Proxy : 대리(행위)를 의미하는 단어
- Proxy Server : 클라이언트(Client)와 서버(Server) 관점에서 중간에 대신 요청을 처리한다하여 클라이언트(Client)와 서버(Server)의 중계자 역할을 갖는 것을 의미한다.
Proxy Server을 사용하면 좋은 점
1. 보안
- 클라이언트에서 서버의 IP주소를 숨길 수 있기 때문에(=서버의 익명성) 프록시 서버로 통한 보안 향상된다.
- 위의 그림처럼 client가 특정 서버에 요청을 할 때 자신의 IP주소도 같이 전달이 되게 되는데, proxy server를 사용하면 자신 IP주소 대신 proxy server 주소가 요청을 보내는 것처럼 보이므로 자신의 IP주소를 외부에서 볼 수 없게 된다.
2. 캐시 사용으로 빠른 속도
- proxy server은 요청된 내용을 cache에 저장한다.
- cache에 존재하는 요청 내용이라면, 서버를 거치는 시간이 절약되기 때문에 전송 시간이 빨라진다.
- 불필요한 외부와의 연결을 하지 않아도 됨으로 외부와의 트래픽도 줄일 수 있게 된다.
3. 접속 우회
- 1.보안 측면에서 말한 것과 같이 자신의 IP를 숨길 수 있기 때문에 IP를 통해 접속을 감지하는 사이트를 프록시 서버를 통해 우회할 수 있다. (client의 IP를 숨기기 위해 여러 proxy server를 계속 경유할 수도 있음)
4. 로그 기록 관리
- proxy server를 통해 client 기록을 관리할 수 있다. (연결된 client 정보를 제어)
- 요청할 server에게는 proxy server을 통해 IP를 숨겼음으로 개인정보 보호가 된다.
- proxy server에겐 client 정보가 남아있다. (client가 proxy server에게 요청을 보냈으니까 "어디 서버로 보내줘")
- proxy server가 가진 client 정보로는 해당 client가 "어디에 얼마나 오래 접속했는가?"
- proxy server는 방문할 수 있는 웹사이트를 제한할 수 있다.
Forward Proxy
- Forward Proxy는 클라이언트들 앞에 위치하며, 클라이언트로부터의 요청을 Proxy Server가 대신 요청을 전달하고, 인터넷을 통해 외부 Server로 부터 데이터를 가져온다.
- Proxy Server에 바로 연결하기 보단 VPN을 사용해 악위적인 Proxy Server에 연결되어 정보를 탈취하는 것을 막아 가상 네트워크로 정보를 모두 암호화하여 전달하기도 한다.
- Forward Proxy는 클라이언트 대신 Server에 요청을 전달해주기 때문에 요청받는 Server는 실제 클라이언트가 누군지 알 수 없다.
Reverse Proxy
- Reverse Proxy는 Web Server/WAS 앞에 위치하며, 내부망에서 Proxy Server와 내부망 Server가 통신하여 인터넷을 통해 요청이 들어오면 Proxy Server가 받아 요청/응답처리를 해준다.
- 클라이언트가 요청을 할 때 해당 Web Server에 요청하는 것이 아니라 Proxy Server에 요청하기 때문에 클라이언트는 Web Server의 정보를 알 수가 없다.
- Reverse Proxy는 클라이언트로부터의 요청들을 어느 Server에 보낼지 결정하는 라우팅 기능과 한 Server에 부하가 오지 않도록 요청을 분산시켜주는 로드밸런싱
기능도 제공한다.
- 특히, 기업에서의 네트워크 환경은 내부 네트워크(WAS, DBMS)와 외부 네트워크 사이에 존재하는 DMZ라고 불리는 구간이 존재한다.
- DMZ에서 Mail Server, Web Server 등 외부 서비스를 제공하는 Server가 위치하게 되는데, 실제 Reverse Proxy는 DMZ에 두고 실제 서비스 Server는 내부망에 위치시킨다.
- Web Server은 클라이언트로부터 HTTP 요청 받음
- Web server은 클라이언트 요청을 WAS(내부망)에 보냄
- WAS는 관련된 Servelt을 메모리에 올려 Web.xml의 정보를 참조하여 Thread를 생성
- HttpServletRequest, HttpServletResponse 객체를 생성하여 Servlet에게 전달
- 해당 Thread는 Servlet의 Service() 호출
- Service()는 doGet() or doPost() 호출 -> 데이터 조회
- doGet() or doPost()는 파라미터에 맞게 생성된 동적 페이지를 Response 객체에 담아 WAS에 전달
- WAS는 Response 객체를 HttpResponse 형태로 바꿔서 Web Server에 전달 9. 해당 Thread는 종료
- HttpServletRequest, HttpServletResponse 객체 제거
정리
"일단, 정리를 하긴 했는데 부족한 부분이나 빠진 부분이 존재할지도 모른다. (더 정리해야하는 부분은 추후에 보완 예정) 또, 이 내용을 작성하면서 WEB SERVER와 WAS이 무엇이고, 어떻게 다른지도 정리해야겠다는 생각이 들었다. 다음 이론 포스트는 WEB SERVER와 WAS에 다룰 예정이다."
이미지 출처 : https://m.post.naver.com/viewer/postView.naver?volumeNo=34803973&memberNo=2953261