여기서는 여러 종류의 리소스에 접근하는데 HTTP가 어떻게 쓰이는지 알아보고, 다른 프로토콜이나 애플리케이션 간 통신에 HTTP를 어떻게 사용하는지 알아볼 것이다.
먼저, 게이트웨이에 대해서 정리를 시작해 봅시다.
책에서 언급되고 있는 내용을 정리하기 전에 간단하게 핵심적인 내용을 정리하고 들어갑시다.
게이트웨이(Gateway)는 컴퓨터 네트워크에서 중요한 역할을 하는 장치 또는 소프트웨어로, 서로 다른 네트워크나 프로토콜 간의 통신을 가능하게 하는 중계자 역할을 합니다.
게이트웨이 주요 기능
책에서 주로 언급되고 있는 내용은 프로토콜 변환을 수행하는 기능이 탑재된 게이트웨이에 대해서 언급하고 있습니다.
예를 들어, HTTP/FTP: 서버 측 게이트웨이라든가 HTTP/HTTPS: 서버 측 보안 게이트웨이, HTTPS/HTTP: 클라이언트 측 보안 가속 게이트웨이 등이 있습니다.
이 외에도 게이트웨이의 종류에는 리소스 게이트웨이도 있는데 이것은 공용 게이트웨이 인터페이스(Common Gateway Interface, CGI)와 같은 것을 의미합니다.
사용자로 부터 오는 요청을 적절한 API를 통해 처리하여 응답을 보내주는 역할을 수행하는 것입니다. 하나의 서버에서 구현하는 것이 아닌 여러 서버로 확장하여 구현할 수 있고 이것은 장애 확산을 예방할 수 있습니다.
하지만, 새로운 프로세스를 만드는데 따르는 부하가 꽤 크고, 서버 장비에 부담이 된다는 단점도 존재합니다.
현대에는 이러한 작업들을 클라우드를 활용하여 효율적으로 해결할 수 있고, 여러 컴포넌트로 서버를 분리하여 하나의 애플리케이션을 조직합니다.
터널(Tunnel)은 네트워크에서 서로 다른 네트워크 프로토콜이나 환경 간에 데이터를 안전하게 전송하기 위해 사용하는 기술입니다.
터널링은 데이터 패킷을 다른 프로토콜 또는 데이터 구조로 감싸서(캡슐화) 네트워크의 한 부분을 투명하게 통과시키는 과정을 말합니다.
터널의 주요 기능
터널링 프로토콜의 예
SSL/TLS의 경우, 그 자체의 기능에서 캡슐화를 수행하기 때문에 일종의 터널링으로 볼 수 있다고 했습니다.
하지만 더 명확한 예시로는, HTTPS/HTTP 혹은 HTTP/HTTPS와 같은 게이트웨이를 사용하는 대신 터널을 사용하여 전송하는 방식을 예로 볼 수 있습니다.
이것에 대한 예시로 아래의 그림을 예로 볼 수 있습니다.
마지막으로 HTTP 릴레이에 대해서 정리를 해보도록 하겠습니다.
HTTP 릴레이의 경우, 외부 reference에서 정리되어 있는 내용이 적고 책에 있는 내용과는 조금 달라서 책에 있는 내용을 기반으로 간단하게 정리하고 마치겠습니다.
HTTP 릴레이는 HTTP 명세를 완전히 준수하지는 않는 간단한 HTTP 프록시입니다.
릴레이는 커넥션을 맺기 위한 HTTP 통신을 한 다음, 바이트를 맹목적으로 전달 합니다.
이러한 간단한 동작으로, 단순 필터링이나 진단 혹은 콘텐츠 변환을 하는데 사용되기도 합니다.
만약, 단순 맹목적 릴레이를 구현하여 이점을 가져가려고 한다면 주의해야 할 점이 존재합니다. 이러한 프록시는 Connection 헤더
를 제대로 처리하지 못해서 keep-alive 커넥션이 행(hang)에 걸린다는 점을 주의해야 합니다.
즉, 중간에 해당 릴레이가 존재하는 상황에서 클라이언트가 서버에 Connection: keep-alive
를 요청한다면 중간에 릴레이는 이것이 무엇인지 인지하지 못하기 때문에 클라이언트와 서버는 커넥션을 유지하고, 릴레이는 끊으려고 하는 상황이 발생한다는 것입니다.