프록시(Proxy)
프록시는 클라이언트와 서버 사이에서 중개 역할을 하는 중개자로 이러한 프록시를 서버로 이용할 수 있다.
프록시 서버는 클라이언트의 요청을 받아 웹 서버에 전달하고, 웹 서버의 응답을 프록시 서버가 클라이언트에 다시 반환한다.
프록시 개념을 도입하게 되면 상당히 많은 역할을 부여할 수 있다. 웹 프로젝트를 진행할 때도 프록시 서버를 자주 다뤘는데 내가 가지고 있는 프록시 지식이 아주 적은 부분인 것 같아서 한 번 정리를 해보려고 한다.
프록시 서버는 어디에 위치하는지에 따라서 Forward Proxy, Reverse Proxy로 구분된다.
Forward Proxy
Forward Proxy 방식은 클라이언트 앞에 프록시 서버가 위치하는 형태로 클라이언트가 직접 웹 서버와 연결하는 대신, 프록시 서버를 통해 요청을 웹 서버로 전송한다.
이러한 방식을 통해서 여러 가지 이점을 얻을 수 있다.
- 우회
클라이언트에서는 곧바로 특정 웹 서버에 접속하는 것이 아닌 프록시 서버로 접속을 하게 된다.
따라서 웹 서버와 TCP 연결을 하는 곳은 클라이언트가 아닌 프록시 서버가 되므로 오로지 프록시 서버의 아이피 주소만 알게 된다.
이를 통해서 클라이언트의 주소를 우회할 수 있는데 예를 들어 한국이 아닌 다른 나라의 아이피 주소로 요청을 보내도 웹 서버는 알 수 없게 된다.
오직 프록시 서버만이 다른 나라 아이피 주소라는 것을 알 수 있게 되는데 이것이 가능한 이유는 모든 클라이언트의 요청을 프록시 서버가 받게 되면서 모든 소켓 통신 내용을 다 확인할 수 있기 때문이다.
- 모니터링
앞서 우회에서 설명했던 것과 같이 프록시 서버에서 통신 내용을 확인할 수 있는데 데이터가 전달될 때 암호문으로 전달되는 것이 아닌 평문 즉, 스트림 형태로 프록시 서버에 전달되기 때문에 어떤 요청인지 분석할 수 있다.
클라이언트의 요청을 분석할 수 있다면 감시가 가능해지는데 만약 특정 클라이언트가 어떤 사이트에 접속하는지 감시가 가능하고, 허가되지 않은 사이트일 경우 접속을 차단할 수 있다.
- 필터링
앞서 설명한 모니터링과 비슷한 내용으로 악성 코드가 유입되는 것을 차단할 수 있다.
인터넷에 악성 코드가 있는 웹 사이트가 있다고 가정해 보자. 이때 클라이언트가 의도치 않게 악성 코드가 심어진 웹 사이트로 요청을 보냈다.
이때 클라이언트는 웹 서버에 직접 접근하지 않고 프록시 서버에 먼저 접속하기 때문에 해당 서버가 클라이언트의 비정상적인 접근을 차단하여 악성코드를 유입하는 것을 막을 수 있다.
Reverse Proxy
Reverse Proxy는 웹 서버 앞에 프록시 서버가 위치하는 것으로 프록시 서버에서 클라이언트의 요청을 받아 웹 서버로 전달하고, 웹 서버의 응답을 다시 프록시 서버가 받아서 클라이언트에게 반환한다.
Forward Proxy와 조금 다른 점은 프록시가 웹 서버 앞에 위치하기 때문에 클라이언트의 요청들이 인터넷을 거쳐 온다는 점이다. 그로 인해 클라이언트의 요청이 인터넷을 통해 웹 서버로 전달될 때 해당 웹 서버 앞에서 요청을 가로채 웹 서버에 대신 보내주게 된다.
Reverse Proxy는 Forward Proxy와는 다르게 클라이언트가 웹 서버와 직접적인 통신이 불가하다. Forward Proxy는 웹 서버의 아이피를 알고 있다면 직접 접근이 가능하지만, Reverse Proxy는 웹 서버가 내부적으로 감춰진 형태이기 때문에 클라이언트가 해당 웹 서버의 아이피 주소를 알 방법이 없다.
그렇다면 Reverse Proxy는 어떠한 이점이 있는지 알아보자.
- 부하 분산
프록시 서버가 들어오는 요청 수에 따라 웹 서버에 부하 분산을 수행할 수 있다.
- 보안
프록시 서버가 웹 서버 앞에 위치하게 되면서 웹 서버를 내부적으로 숨길 수 있게 되고, 이를 통해 웹 서버의 아이피 주소를 숨겨 공격자가 알 수 없게 만든다.
- 캐싱
자주 요청되는 데이터를 프록시 서버에 캐싱하여 클라이언트가 보다 빠르게 컨텐츠를 제공 받을 수 있다.
- SSL 암호화
프록시 서버로 들어오는 데이터는 평문으로 들어오는데 프록시 서버에서 해당 평문들을 SSL 암호화하여 웹 서버로 전송할 수 있다.
프록시 서버의 한계점
프록시 서버의 단점으로는 크게 두가지가 있다.
- 지연 시간 증가
일단 네트워크 통신을 하는데 프록시 서버가 하나 추가되다 보니 아무래도 지연 시간에서 손해를 볼 수밖에 없다.
기존에는 클라이언트와 웹 서버가 TCP/IP 연결을 했다면 프록시 서버가 도입된 이후 클라이언트와 프록시 서버, 프록시 서버와 웹 서버 각각 TCP/IP 연결을 수립하게 되면서 지연 시간이 증가하게 된다.
- SPOF(단일 지점 장애)
프록시 서버라고 한다면 가장 크게 문제가 되는 부분이지 않을까 생각한다.
프록시 서버를 도입하게 되면 모든 요청과 응답은 해당 프록시 서버를 거치게 된다. 즉, 프록시 서버에 문제가 발생한다면 요청을 보낼수도, 응답을 받을 수도 없다는 뜻이다.
이러한 문제를 SPOF(단일 지점 장애)라고 부르는데 이를 해결하기 위해서는 프록시 서버도 이중화를 해줘야 한다.
이중화를 한다는 것은 결국 그에 따른 추가적인 비용이 발생하는 것이기 때문에 프록시 서버를 도입하기 전 비용적인 부분도 같이 고려하면 좋을 것 같다.
참고 자료
'CS > 네트워크' 카테고리의 다른 글
[네트워크] - SSL (0) | 2024.09.13 |
---|---|
네트워크 - SOP와 CORS (1) | 2024.07.22 |
네트워크 - REST API, RESTful (0) | 2024.07.17 |
네트워크 - 로드 밸런싱(Load Balancing) (0) | 2024.07.14 |
네트워크 - DNS (0) | 2024.07.13 |