[Web] 프록시와 게이트웨이
Swimjiy
—April 11, 2020
1편에서 우리는 익스플로러, 크롬 등 웹 브라우저에서 우리가 원하는 페이지를 볼 수 있는 이유가 웹 클라이언트와 웹 서버 간 상호작용이라는 사실을 알게 되었고, 2편에서는 클라이언트와 서버가 HTTP라는 프로토콜로 인해 데이터를 주고 받을 수 있으며 교환 유형(요청/응답)에 따른 일정한 HTTP 메시지 형식이 있음을 알게 되었습니다.
오늘은 더 나아가 우리가 모르게 웹 클라이언트와 웹 서버 사이에서 데이터를 전달해주던 '프록시 서버'에 대해 알아보겠습니다.
프록시 (Proxy)
프록시(Proxy)는 "대리인"이라는 사전적 의미를 지니며 클라이언트와 서버 사이에서 HTTP 메시지를 대신 전달하는 중계 기능을 말합니다. 그리고 이러한 프록시 기능을 수행하는 서버를 가리켜 "프록시 서버"라고 부르지요.
프록시 서버를 사용하는 이유
프록시 서버에는 클라이언트와 서버가 주고받은 적이 있는 데이터의 사본이 저장되어 있습니다. 그래서 이전과 동일한 데이터를 요청하는 경우 서버를 거치지 않고 바로 프록시에서 캐싱해 둔 데이터를 반환하여 전송 시간을 줄일 수 있다는 장점이 있습니다.
또한 메시지가 지나갈 때마다 Via 헤더에 정보를 추가해야 하는데, 프록시 서버의 정보 또한 Via 헤더에 기록되므로 나중에 메시지 접근을 제어하거나 추적하는 데 사용할 수 있습니다. Via 헤더에 대한 내용은 아래 파트에서 자세히 다루겠습니다.
마지막으로 IP, 쿠키 등 HTTP 메시지에 신원을 확인할 수 있는 정보들을 제거함으로써 익명성을 보호할 수 있습니다. 다만 이러한 프록시 서버의 특징이 이전에는 개인 정보를 보호할 수 있는 보안 기능으로 작용했다면 요즘에는 이를 악용하여 유해 사이트에서 IP 추적을 당하지 않게 우회하기 위한 용도로 사용되고 있다는 문제가 있습니다.
Via 헤더
2편에서 우리는 HTTP 메시지 중 헤더에 대해 이해헀습니다. 헤더에서 표시할 수 있는 항목은 다양하기 때문에 일부만 알아보았는데, 설명하지 않았던 헤더 항목 중에 Via라는 헤더 필드가 있습니다.
Via는 해당 HTTP 메시지가 거쳐온 프록시 또는 게이트웨이의 정보를 담고 있습니다.
포맷은 다음과 같으며 []
내 항목은 생략 가능합니다.
[<프로토콜 이름> /]<프로토콜 버전> <호스트>[:<포트>][<프로토콜 이름> /]<프로토콜 버전> <내부 프록시의 이름 or 별칭>
예를 들면 헤더에 다음과 같이 확인하실 수 있습니다.
Via: 1.1 vegurVia: HTTP/1.1 GWAVia: 1.0 fred, 1.1 p.example.net
메시지가 1개 이상의 프록시, 게이트웨이를 지나갈 경우 반드시 Via 목록의 끝 에 정보가 추가되어야 하며, 최종으로 나열된 목록을 통해 우리는 클라이언트와 서버 사이에 어떤 중계기가 있었는지 추적할 수 있습니다.
게이트웨이 (Gateway)
게이트웨이는 프록시와 동일하게 클라이언트와 서버의 중계 역할을 하지만, 프록시와 달리 게이트웨이는 서로 다른 프로토콜을 사용하는 둘 이상을 연결한다는 차이점이 있습니다.
- 서로 다른 네트워크를 연결하는 중계 기능을 수행한다.
- 게이트웨이가 인터넷에 들어가는 문과 비슷하다면, 프록시 서버는 네트워크 내부가 인터넷에 노출되는 것을 막는 벽처럼 작동한다.
- 따라서 필터링 없는 프록시는 게이트웨이와 동일하다.
- 게이트웨이는 프록시와 달리 유해 사이트의 차단, 익명성 보장 등의 제어 기능이 없다.
결론
오늘은 클라이언트와 서버의 중계 역할을 하는 프록시와 게이트웨이, 그리고 그들의 정보를 담고 있는 HTTP 메시지 중 Via 필드에 대해 알아보았습니다. 프록시에 대한 개념보다는 게이트웨이와 같은 다른 중계기와의 차이점을 설명하는 일이 생각보다 어려웠습니다. 최대한 이해하기 쉽도록 설명하기 위해 노력했지만 아무래도 좀 더 공부가 필요해보입니다.
그럼 다음 포스팅에서 뵙겠습니다.