통합점: 게이트웨이, 터널, 릴레이

Hoony·2022년 9월 19일
0

HTTP

목록 보기
6/6
post-thumbnail

통합점: 게이트웨이, 터널, 릴레이


여러 종류 리소스에 접근하는데 HTTP가 어떻게 쓰이는 지 알아보자.

  • 게이트웨이 : 서로 다른 프로토콜과 애플리케이션 간의 HTTP 인터페이스이다.
  • 애플리케이션 인터페이스 : 서로 다른 형식의 웹 애플리케이션이 통신하는데 사용한다.
  • 터널 : HTTP 커넥션을 통해서 HTTP가 아닌 트래픽을 전송하는데 사용한다.
  • 릴레이 : 일종의 단순한 HTTP 프락시로, 한 번에 한 개의 홉에 데이터를 전달하는데 사용된다.



게이트웨어

게이트웨이는 리소스를 받기 위한 경로를 안내하는 역할을 한다.
애플리케이션은 게이트웨이에게 요청을 처리해달라고 할 수 있고, 게이트웨이는 그에 응답이 가능하다.
게이트웨이는 HTTP 트래픽을 다른 프로토콜로 자동으로 변환하여, HTTP 클라이언트가 다른 프로토콜을 알 필요 없이 서버에 접속할 수 있게 한다.


FTP 게이트웨이

해당 게이트웨이는 FTP URL을 가리키는 HTTP 요청을 받는다.
이후 게이트웨이는 FTP 커넥션을 맺고 FTP 서버에 적절한 명령을 전송한다.


애플리케이션 서버 게이트웨이

해당 게이트웨이는 API를 통해서 HTTP 클라이언트를 서버 측 애플리케이션 프로그램에 연결한다.
웹에서 물건을 사거나, 일기예보를 볼 때 이러한 방식으로 이루어진다.



클라이언트 게이트웨이와 서버 게이트웨이

웹 게이트웨이는 한쪽에서 HTTP로 통신하고 다른 한 쪽에서는 HTTP가 아닌 다른 프로토콜로 통신한다.

  • 서버쪽 게이트웨이는 클라이언트와 HTTP로 통신하고 서버와는 다른 프로토콜로 통신한다.
  • 클라이언트쪽 게이트웨이는 클라이언트와 다른 프로토콜로 통신하고 서버와는 HTTP로 통신한다.



프로토콜 게이트웨이

프락시에 트래픽을 바로 보내는 것과 같이 게이트웨이에도 HTTP 트래픽을 바로 보낼 수 있다.
보통, 브라우저에 명시적으로 게이트웨이를 설정하여 자연스럽게 트래픽이 게이트웨이를 거쳐가게 할 수 있다.


  • 브라우저에서 모든 FTP URL을 HTTP/FTP 게이트웨이를 거쳐가게 설정을 하면,
  • 일반적인 HTTP 요청은 바로 서버로 가지만 FTP URL을 포함한 요청은 게이트웨이로 가게 된다.
  • 게이트웨이에서는 클라이언트 요청을 FTP 요청으로 변환하여 처리한 뒤에 클라이언트에게 그 결과를 HTTP로 전송한다.


HTTP/HTTPS: 서버 측 보안 게이트웨이
기업 내부의 모든 웹 요청을 암호화함으로써 개인 정보 보호와 보안을 제공하는데 게이트웨이를 사용할 수 있다.
클라이언트는 평소와 같인 일반 HTTP를 사용하여 웹을 탐색하지만, 게이트웨이가 자동으로 사용자의 모든 세션을 암호화하여 보호한다.

클라이언트 -> HTTP 요청 -> [HTTP/HTTPS 보안 게이트웨이] -> HTTPS 요청 -> 서버



HTTPS/HTTP: 클라이언트 측 보안 가속 게이트웨이
해당 게이트웨어는 보안 가속기로 유명하다.
이 HTTPS/HTTP 게이트웨이는 웹 서버 앞단에 위치하고, 보이지 않는 인터셉트 게이으퉤이나 리버스 프락시 역할을 한다.
이 게이트웨이는 HTTPS 트래픽ㄹ을 받아 복호화하여 웹 서버에게 일반 HTTP 요청을 보낸다.

클라이언트 -> HTTPS 요청 -> [HTTPS/HTTP 보안 가속 게이트웨이] -> HTTP 요청 -> 서버




리소스 게이트웨이

앞에서 살펴본 게이트웨이는 클라이언트와 서버를 연결하는 게이트웨이였다.
하지만 가장 일반적인 형태의 게이트웨이는 애플리케이션 서버로 서버와 게이트웨이를 한 개의 서버로 결합한다.
애플리케이션 서버는 HTTP를 통해서 클라이언트와 통신하고 서버 측에 있는 애플리케이션 프로그램에 연결하는 게이트웨이이다.

  1. 클라이언트가 HTTP를 사용하여 애플리케이션 서버로 연결한다.
  2. 이후 게이트웨이의 애플리케이션 프로그래밍 인터페이스(API)를 통해 요청을 서버 안에 애플리케이션으로 전달한다.

전자상거래 API

클라이언트 -> HTTP 요청 -> 애플리케이션 서버 -> API 호출 -> 애플리케이션 프로그램 실행 -> HTTP 응답 메세지 -> 클라이언트



최초의 API
애플리케이션 게이트웨이에서 유명했던 최초의 API는 공용 게이트웨이 인터페이스(CGI)이다.
CGI는 특정 URL에 대한 HTTP 요청에 따라 프로그램을 실행하고, 프로그램 출력을 수집하고, HTTP 응답으로 회신하는데 사용되는 표준화된 인터페이스 집합이다.
현재까지도 널리 쓰이고 있는 단순한 접근 방식이다.




터널

웹 터널은 HTTP의 또 다른 사용 방법이다.
웹 터널은 HTTP 프로토콜을 지원하지 않는 애플리케이션에 HTTP 애플리케이션을 사용해 접근하는 방법을 제공한다.
웹 터널을 사용하면 HTTP 커넥션을 통해 HTTP 아닌 다른 트래픽을 전송할 수 있고, 다른 프로토콜을 HTTP위에 올릴 수 있다.



CONNECT로 HTTP 터널 커넥션 맺기

웹 터널은 HTTP의 CONNECT 메서드를 통해 커넥션을 맺는다.
CONNECT 메서드는 터널 게이트웨이가 임의의 목적 서버와 포트에 TCP 커넥션을 맺고 클라이언트와 서버 간에 오는 데이터를 무조건 전달하기를 요청한다.

  1. 클라이언트가 게이트웨이에 터널을 연결하려고 CONNECT 요청을 보낸다.
  2. 게이트웨이가 이에 응답하여 TCP 커넥션을 생성한다.
  3. TCP 커넥션을 통해 양방향 데이터 통신을 한다.


데이터 터널링, 시간, 커넥션 관리
터널을 통해 전달되는 데이터는 게이트웨이에서 볼 수 없어서, 게이트웨이는 패킷의 순서나 흐름에 대한 어떤 가정도 할 수 없다.
터널이 일단 연결되면 데이터는 어디로든 흘러갈 수 있다.



SSL 터널링
웹 터널은 원래 방화벽을 통해서 암호화된 SSL 트래픽을 전달하려고 개발되었다.
많은 회사가 더 강력한 보안을 위해 모든 트래픽이 라우터와 프락시를 지나도록 했다.
그러나 낡은 방식의 프락시에서 SSL와 같은 암호화 프로토콜이 처리되지 않아 HTTP에 터널링 기능이 추가되었다.


  • SSL 트래픽이 기존 프락시 방화벽을 통과할 수 있도록 터널링 기능을 이용한다.
  • 해당 터널링 기능을 통해 HTTP 메세지의 암호화된 데이터를 담고 일반 HTTP 채널을 통해 데이터를 전송한다.
  • 이러한 방식으로 터널은 HTTP 아닌 트래픽이 포트를 제한하는 방화벽을 통과할 수 있게 해준다.

하지만 터널은 악의적인 트래픽도 유입될 위험성이 있어 주의해야 한다.



터널 인증
HTTP의 다른 기능들은 터널과 함께 사용할 수 있다.
특히 프락시 인증 기능은 클라이언트가 터널을 사용할 수 있는 권한을 검사하는 용도로 널리 사용된다.

  1. 클라이언트가 터널링을 위해 CONNECT 요청을 전송한다.
  2. 게이트웨이가 인증 요구를 반환한다.
  3. 클라이언트가 적절한 인증 정보와 함꼐 다시 CONNECT 요청을 전송한다.
  4. TCP 커넥션이 맺어진다.



릴레이

HTTP 릴레이는 HTTP 명세를 완전히 준수하지 않는 간단한 HTTP 프락시다.
릴레이는 커넥션을 맺기 위한 HTTP 통신을 한 다음, 바이트를 맹목적으로 전송한다.
HTTP는 복잡하기에, 모든 헤더와 메서드 로직을 무시하고 맹목적으로 데이터만 전달하는 방식이 유용할 때가 있다.

  • 해당 방식은 구현도 쉬울 뿐더러 성능도 우수하다.

하지만 이는 잠재적으로 심각한 상호 운용 문제를 발생시킬 수 있기때문에 주의해야 한다.
ex. 맹목적 릴레이 (무한 keep-alive 요청 기다림)

profile
Just Do it!

0개의 댓글