본문 바로가기

World Wide Web/HTTP

프록시, 게이트웨이에 관해

HTTP통신을 할 때, 클라이언트와 서버가 요청/응답을 주고 받는다

일반적으로 클라이언트와 서버가 HTTP통신을 할 때 요청과 응답을 주고 받는다. 클라이언트가 HTTP Request의 Header와 Body에 내용을 담아서 보내면, 서버는 그러한 Header와 Body에 담긴 내용을 해석해서 HTTP Response를 보내준다. 헌데 이 방식의 문제점은 보안에 취약하다는 문제가 존재한다.

 

클라이언트과 서버가 직접적으로 통신하는 것이기 때문에 서버의 위치가 노출되는 이슈가 있을 수 있으며, 주고 받는 데이터가 중복될 경우, 중복되는 통신을 서버와 하는 것이기 때문에 서버에 부담이 생길 가능성 역시 존재한다. 이러한 것을 해결하기 위해 클라이언트와 서버 사이에 중계자 역할을 하는 프로그램/서버를 넣기로 하였다. 그러한 것들이 바로 프록시, 게이트웨이이다.

 

 

 

1.  프록시

프록시 서버에는 투명 프록시와 반투과 프록시가 있다

클라이언트가 HTTP 요청을 보내면 프록시 서버가 중간에서 그러한 요청을 받는다. 이 때 클라이언트의 요청 메시지를 수정할 수도 있고, 수정하지 않을 수도 있는데, 수정하는 경우에는 반투과 프록시라 하며, 수정하지 않는 경우에는 투명 프록시라 한다.

 

서버가 응답을 하면 다시 또 프록시 서버가 그러한 서버의 응답을 보관하고 있다가 클라이언트에게 돌려준다. 이렇게 프록시 서버는 요청과 응답 사이에서 중간다리 역할을 하는데, 이 때 요청과 응답을 보관할 수도 있고, 보관하지 않을수도 있다. 보관하는 경우에는 그것을 캐시서버라 한다.

 

 

 

2. 게이트웨이

게이트웨이는 정적 컨텐츠 이외의 것을 서버와 통신시켜준다

게이트웨이는 클라이언트와 서버의 사이에서 동적 컨텐츠와 정적 컨텐츠를 구분해준다. Django 프레임워크에도 WSGI라는 것이 있는데 이게 바로 게이트웨이이다.

 

원래 웹이라는 것은 정적(Static) 문서를 보여주기 위해서 만들어졌다는 것을 알 것이다. 그래서 일반적으로 웹서비는 세 가지 서비스로 이루어진다. 웹 서버, 어플리케이션 서버, 데이터베이스 서버가 그것이다. 웹서버는 이미지나 문서와 같은 정적 컨텐츠를 담당한다. 이 때 게이트웨이는 이러한 정적 컨텐츠를 제외한 나머지를 처리할 수 있도록 라우팅을 해준다. 동적 컨텐츠가 어플리케이션 서버와 데이터베이스 서버에서 처리될 수 있도록 하는 것이 게이트웨이의 역할이다.