우클릭방지

글 목록

2017년 7월 10일 월요일

[HTTP 프로토콜 강좌]#7 프록시 서버(Proxy Server)

오늘 포스팅에서는 프록시(Proxy) 에 대한 이야기를 하려 한다.

프록시의 역할

먼저 프록시의 사전적 의미는 "대리인" 이다. 클라이언트에게는 서버인것 처럼.... 서버에게는 클라이언것 처럼 동작하는 것이 바로 프록시이다.
즉, 클라이언트 측면에서는 프록시가 서버의 역할을 대신 수행하는 것이고, 서버 측면에서는 클라이언트 역할을 대신 수행하는 역할을 한다.

단, 클라이언트와 서버의 직접적인 액션이 있어야 각각의 역할을 대신 처리한다. 클라이언트의 요청이 없이는, 서버의 응답 전송이 없이는 프록시는 어떤 동작도 하지 않는다.

아래 그림을 보자.

  1. 클라이언트가 HTTP 요청을 처음 보내게 되면 이것을 중간에 있는 프록시 서버가 먼저 받게 된다. 
  2. 프록시 서버는 클라이언트의 요청에 대한 응답을 직접 수행하지 않고 해당 요청을 실제 서버(Origin Server)로 전달하게 된다.
  3. 실제 서버는 사용자가 보낸 GET 요청을 프록시 서버를 통해 전달 받게 되며, 이에 대한 응답을 프록시 서버에 전달하게 된다. 
  4. 프록시는 클라이언트의 요청을 처리했을때와 마찬가지로 응답데이터를 클라이언트에게 전달한다. 

Via 헤더

위 그림은 한개의 프록시 서버가 클라이언트와 실제 서버 사이에 위치했을때의 이야기인데, HTTP는 2개 이상의 복수개의 프록시 서버를 허용한다. 
아래 그림을 참고해보자. 


위와 같이 채인(chain) 형태의 구성으로 서비스가 가능하기도 하다. 
프록시가 하나일때와 굳이 차이점을 찾자면.. "Via" 헤더 정보의 유/무 이다. 

요청이 프록시#1 로 전해지고 프록시#2 전달될 때 요청헤더에 Via 헤더를 삽입하여 경유된 프록시의 정보를 표시하게 된다. 
프록시#2를 통해 실제 서버로 클라이언트의 요청이 전달될때는 프록시#1과 프록시#2의 정보가 동시에 표시된다. 



응답도 마찬가지이다. 프록시를 경유하여 지날갈때 마다 Via에 경유된 프록시의 정보를 표시하여 HTTP 응답헤더에 삽입하게 된다. 

다음은 테스트 서버를 통해 패킷의 내용으로 동작을 확인해 본것이다. 
먼저 클라이언트쪽.. 
클라이언트가 홈페이지 접속을 시도하였고, 프록시를 통해 서버의 응답을 전달 받은 내용이다. 

위와 같이 요청에 대한 응답에 Via 정보가 포함된것을 볼수 있다. 

다음은 서버쪽.
클라이언트의 요청이 프록시를 통해 실제 서버로 전달된 내용이다. 


위와 같이 요청헤더쪽에 Via가 포함된 것을 볼 수 있다.



프록시의 동작 방식을 좀 살펴보았다. 

프록시는 HTTP 통신상에서 몇가지 주요한 역할 및 기능을 한다. 
대표적인 것으로 두가지정도를 꼽을수 있는데 그중 첫번째가 바로 웹 캐싱(Caching) 이다. 웹캐싱은 서버의 부하를 줄여 안정적인 웹 서비스를 실현하게 하는 좋은 기능인데 다음시간에 자세하게 다뤄보도록 하겠다. 
두번째는 조직의 웹 접속제어이다. 클라이언트의 웹 접속을 프록시를 통해 하도록 하면, 프록시에서 허용한 도메인이나 URL만 접속이 가능하게끔 할 수 있다.
바로 이러한 기능을 이용하여 유해사이트 접속과 같은 기능을 구현할 수 있는데 기업의 내부 보안 정책으로 종종 사용된다. 
일종의 어플리케이션 레이어의 방화벽(Firewall) 기능을 수행한다고 볼수 있다. 

정리하면.. 

  • 웹 프록시는 클라이언트에게는 서버의 역할을 대리하고, 서버에게는 클라이언트의 역할을 대리하는 개념이다. 
  • 단일 프록시 뿐만 아니라 2개 이상 다중 프록시를 통해서도 HTTP 서비스가 가능한데 이 때 프록시 경유의 정보는 "Via" 헤더를 이용한다. 


댓글 없음:

댓글 쓰기