HTTP

HTTP 완벽 가이드 스터디 (8)

kchabin 2025. 3. 6. 12:10

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

 

https://drive.google.com/file/d/1p_Ocnox6-Wwz5rXpOvFV9GeuFUolErQ0/view?usp=sharing

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

게이트웨이

리소스와 애플리케이션을 연결하는 역할

  • 동적 콘텐츠 생성
  • 데이터베이스 질의

 

  • 서버 측 : 클라이언트와는 HTTP로 통신하고, 서버와는 외래 프로토콜로 통신한다.
  • 클라이언트 측 : 클라이언트와는 외래 프로토콜로 통신하고, 서버와는 HTTP로 통신한다.

 

서버 프로토콜 변환기

HTTP/*

클라이언트로부터 hTTP 요청이 원 서버 영역으로 들어오는 시점에 클라이언트 측의 HTTP 요청을 외래 프로토콜로 전환한다.

  • FTP 라면 HTTP → FTP

서버 측 보안 게이트웨이

기업 내부의 모든 웹 요청 암호화.

  • HTTP/HTTPS

리소스 게이트웨이

애플리케이션 서버

  • 게이트웨이의 가장 일반적인 형태.
  • 목적지 서버 + 게이트웨이 ⇒ 하나의 서버
  • HTTP를 통해서 클라이언트와 통신하고 서버 측에 있는 애플리케이션 프로그램에 연결하는 서버 측 게이트웨이.

Application Programming Interface

  • 애플리케이션 서버는 게이트웨이의 API를 통해서 요청을 서버에서 동작하고 있는 애플리케이션에 전달한다.

CGI(Common Gateway Interface)

특정 URL에 대한 HTTP 요청에 따라 프로그램 실행, 출력 수집, HTTP 응답으로 회신하는데 웹 서버가 사용하는 표준화된 인터페이스 집합.

  • 리소스 요청이 들어옴 → 헬퍼 애플리케이션 생성, 요청 처리 → 헬퍼 애플리케이션 데이터 전달받음 (요청 전체 or 쿼리스트링) → 응답 반환

CGI 내부 처리는 사용자에게 보이지 않는다.

  • URL에 있는 cgi or ? 같은 걸로 판단 가능

단점

  • 모든 요청마다 새로운 프로세스 생성 → 부하 발생
  • 서버의 성능 제한, 서버 장비에 부담을 줌.

→ 문제를 피하고자 Fast CGI 개발

Fast CGI

데몬으로 동작 → 요청마다 프로세스 생성 및 제거로 인한 성능 저하 문제 해결

서버 확장 API

CGI 프로토콜 → 구동 중인 HTTP 서버에 외부 인터프리터가 쉽게 접속할 수 있게는 해주나, 서버 자체의 동작을 바꾸고 싶거나 서버의 처리 능력을 최고치로 끌어 올리고자 할 때 ⇒ 서버 확장 API

  • 웹 개발자가 자신의 모듈을 HTTP와 직접 연결할 수 있는 강력한 인터페이스

예) FrontPage Server Extension : FrontPage 클라이언트로부터 전송되는 원격 프로시저 호출(RPC) 명령을 인식할 수 있음.

애플리케이션 인터페이스와 웹 서비스

데이터를 교환하려는 두 애플리케이션 사이에서 프로토콜 인터페이스를 맞추는 일은 까다롭다.

  • FrontPage 서버 확장 → HTTP POST 메시지 위에 덧씌워진 RPC에 대해 다룸
  • WebDAV와 공동 저작 → HTTP 헤더에 XML 추가하는 방법

<aside> 💡

SOAP(Simple Object Access Protocol) HTTP 메시지에 XML 데이터를 담는 방식에 관한 표준.

</aside>

  • 웹 서비스는 SOAP을 통해 XML을 사용하여 정보를 교환
    • XML : 데이터 객체를 담는 데이터를 생성하고 해석하는 방식 제공

터널

HTTP 프로토콜을 지원하지 않는 애플리케이션에 HTTP 애플리케이션을 사용해 접근하는 방법

  • HTTp 커넥션으로 http가 아닌 트래픽 전송
  • 다른 프로토콜 http에 올리기
  • 웹 트래픽만 허용하는 방화벽이 있더라도 HTTP가 아닌 트래픽을 전송 할 수 있음.

 

 

CONNECT

Content-Type 헤더를 포함할 필요 없다.

→ 커넥션이 메시지를 전달하는 대신 바이트를 그대로 전달하기 때문에 콘텐츠의 형식을 기술할 필요없음

데이터 터널링, 시간, 커넥션 관리

터널을 통해 전달되는 데이터는 게이트웨이에서 볼 수 없다.

클라이언트 성능 높이기

  • CONNECT 요청을 보낸 다음, 응답을 받기 전에 터널 데이터를 전송 가능함.
  • 전제: 게이트웨이가 요청에 이어서 데이터를 적절하게 처리할 수 있어야 함.
  • 게이트웨이는 네트워크 I/O 요청이 헤더 데이터만을 반환해줄 거라고 가정할 수 없어서, 게이트웨이는 커넥션이 맺어지는 대로 헤더를 포함해서 읽어들인 모든 데이터를 서버에 전송해야 한다.

커넥션 관리

  • 한 쪽의 커넥션이 끊어지면 끊어진 곳으로 부터 온 데이터는 반대편으로 전달된다.
  • 끊어졌던 터널의 끝단 반대편 커넥션도 프록시에 의해 끊어질 것.
  • 아직 전송되지 않은 데이터는 버려진다.

SSL 터널링

웹 터널 → 방화벽을 통해 암호화된 SSL 트래픽 전달 목적

 

첫번째 그림 : 방화벽에 SSL이 차단된다.

  • HTTP가 아닌 트래픽을 제한하는 방화벽

두번째 그림 : 방화벽은 HTTP를 통해 전송된 SSL을 수락한다.

  • 보안 SSL 트래픽이 방화벽을 통과하는 데 유용하게 사용될 수 있음.
  • 악의적인 트래픽 유입 경로가 될 수도 있음.

 

터널 인증

클라이언트 터널 사용권한 검사 용도

 

터널 보안

  • 게이트웨이는 프로토콜이 터널을 올바른 용도로 사용하고 있는지 검증할 방법이 없다.
    • 방화벽에 터널을 생성하여 게임 트래픽을 사내로 유입
    • 악의적 사용자 → 텔넷 세션 오픈 or 회사 이메일 차단 장치 우회
  • 터널 오용 최소화
    • HTTPS 전용 포트 443 → 잘 알려진 특정 포트만을 터널링할 수 있게 허용해야 함.

릴레이

HTTP 명세를 완전히 준수하진 않는, 간단한 HTTP 프락시

  • 커넥션 이후 맹목적인 바이트 전달.

단순 맹목적 릴레이 구현

HTTP는 복잡하기에, 모든 헤더와 메서드 로직을 수행하지 않고 단순히 맹목적으로 트래픽을 전달하도록 간단한 프락시를 구현하는 방식이 유용할 때가 있다.

  • 단순 필터링, 진단 콘텐츠 변환 → 잠재적으로 심각한 상호 운용 문제 → 배포 주의

 

 

예방

  • 릴레이를 똑똑하게 만들기
  • 프락시의 단순함 이면 → 상호 운용 문제 발생 위험
  • HTTP를 제대로 준수하는 프락시를 사용하는 것이 좋음.

'HTTP' 카테고리의 다른 글

HTTP 완벽 가이드 스터디 (10)  (0) 2025.03.15
HTTP 완벽 가이드 스터디 (9)  (0) 2025.03.10
HTTP 완벽 가이드 스터디 (7)  (2) 2025.03.06
HTTP 완벽 가이드 스터디 (6)  (0) 2024.10.08
HTTP 완벽 가이드 스터디 (5)  (0) 2024.10.03