[HTTP] 1장: HTTP 개관

서정범·2023년 4월 17일
0

HTTP

목록 보기
3/13

HTTP란 무엇인가?

HTTP(Hypertext Transfer Protocol)은 인터넷에서 데이터를 주고 받을 수 있는 프로토콜입니다.

HTTP는 기본적으로 신뢰성 있는 데이터 전송 프로토콜(TCP) 위에서 동작하는 것으로 흔히 알려져 있지만, HTTP/3의 경우 UDP를 기반으로 해서 만들어진 QUIC위에서 동작하므로 해당 개념은 이제 정확하지 않습니다.

해당 부분이 궁금해서 다음 링크를 참고했습니다. 개인적으로 너무 흥미로운 내용이라 추후에 본인이 따로 정리해볼 예정입니다.

참고: HTTP/3는 왜 UDP를 선택한 것일까? | Evans Library

웹 클라이언트와 서버

클라이언트사용자를 뜻한다고 생각하면 된다. 웹에서 사용하는 서버의 경우 WAS의 등장으로 두 가지로 나눠서 생각하는 것이 좋습니다.

  • 웹 서버(Web Server)
  • 웹 컨테이너(Web Container)

해당 내용은 아래 링크에 따로 정리해 두겠습니다.

리소스

웹 리소스가 될 수 있는 것은 정적 파일뿐만이 아니라, 동적 파일도 가능합니다.

인터넷에선 수천 가지 데이터 타입을 다루기 때문에, HTTP는 웹에서 전송되는 객체 각각에 신중하게 MIME 타입이라는 데이터 포맷 라벨을 붙입니다. 이것을 통해서 웹 서버는 데이터를 확인합니다.

웹 서버 리소스는 각자 이름(경로)을 가지고 있고, 이것을통합 자원 식별자(uniform resource identifier, URI)라고 부릅니다.

URI에는 두 가지 종류가 있습니다.

  • URL(uniform resource locator, URL): 특정 서버의 한 리소스에 대한 구체적인 위치를 서술
  • URN(uniform resource name, URN): 콘텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향을 받지 않는 유일무이한 이름 역할

트랜잭션

트랜잭션(Transaction)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻합니다.

데이터베이스의 상태를 변화시키기 위해서 HTTP 메서드라고 불리는 여러 가지 종류의 요청 명령을 지원합니다.

HTTP 메서드설명
GET서버에서 클라이언트로 지정한 리소스를 보내라.
PUT클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라.
DELETE지정한 리소스를 서버에서 삭제하라.
POST클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라.
HEAD지정한 리소스에 대한 응답에서, HTTP 헤더 부분만 보내라.

이러한 요청 메세지는 상태 코드와 함께 반환합니다.

상태 코드의 간단하게 정리하고 링크를 달아놓겟습니다.

HTTP 상태 코드설명
정보 응답1xx
성공 응답2xx
리다이렉션 메시지3xx
클라이언트 에러 응답4xx
서버 에러 응답5xx

트랜잭션의 기본적인 동작 구조는 다음과 같습니다.

  1. 클라이언트가 서버에게 요청 메시지(request)를 보냅니다.
  2. 서버에서 요청 메시지를 처리합니다.
  3. 서버가 클라이언트에게 응답 메시지(response)를 보냅니다.

다음은 GET 메서드의 예입니다.

  • 시작줄: 요청이라면 무엇을 해야하는지, 응답이라면 무슨일이 일어났는지 나타냅니다.
  • 헤더: 서버에 대한 추가 정보를 전달하는 선택적 헤더들.
  • 본문: 요청의 본문은 데이터를 실어 보내며, 응답의 본문은 클라이언트로 데이터를 반환

HTTP 메시지는 데이터를 안전하게 전달하기 위해서 TCP 커넥션을 이용합니다.

TCP/IP는 각 네트워크와 하드웨어의 특성을 숨기고, 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 의사소통을 하게 해줍니다.

트랜잭션 동작의 자세한 순서는 다음과 같습니다.

  1. 웹브라우저는 서버의 URL에서 호스트명(DNS)을 추출한다.
  2. 웹브라우저는 서버의 호스트명을 IP로 변환한다.
  3. 웹브라우저는 URL에서 포트번호(있다면)를 추출합니다.(Default: 80)
  4. 웹브라우저는 웹 서버와 TCP 커넥션을 맺습니다.
  5. 웹브라우저는 서버에 HTTP요청을 보냅니다.
  6. 서버는 웹브라우저에 HTTP 응답을 돌려줍니다.
  7. 커넥션이 닫히면, 웹브라우저는 문서를 보여줍니다.

웹의 구성요소

  1. 프락시: 클라이언트와 서버 사이에 위치한 HTTP 중개자
  2. 캐시: 많이 찾는 웹페이지를 클라이언트 가까이에 보관하는 HTTP 창고
  3. 게이트웨이: 다른 애플리케이션과 연결된 특별한 웹 서버
  4. 터널: 단순히 HTTP 통신을 전달하기만 하는 특별한 프락시
  5. 에이전트: 자동화된 HTTP 요청을 만드는 준지능적(semi-intelligent) 웹 클라이언트

프록시서버

프록시는 클라이언트와 서버 사이에 위치하여, 클라이언트의 모든 HTTP 요청을 받아 전달합니다.

역할

  1. 보안
  2. 웹 캐시 역할

보안의 경우 모든 웹 트래픽 흐름속에서 신뢰할 만한 중개자 역할을 합니다. 또한, 프락시는 요청과 응답을 필터링합니다.

실제로, 프록시 서버의 이러한 특징을 이용하여 기업 내에서 개인적으로 운영하는 프록시 서버가 존재합니다.

예를 들어, 해외에서 업무를 보기 위해서 기업 내의 서버에 접근을 하려고 할 때 기업 내의 프록시 서버를 이용하면 가능할 수 있습니다.

클라이언트가 보낸 HTTP 메시지가 프락시로 거쳐 가는 방법에는 4가지가 존재합니다.

  1. 클라이언트를 수정합니다.
  2. 네트워크를 수정합니다.
  3. DNS 이름 공간을 수정합니다.
  4. 웹 서버를 수정합니다.

참고: 프락시(Proxy)란 무엇인가? :: Ratel의 개발일지

공부하다가 생각이 든 것인데 클라우드 같은 경우 프록시 서버를 이용하여 여러 클라이언트가 클라우드 서버를 이용하는 할 때 효율적으로 처리 해주나 생각이 들었습니다(대규모 트래픽의 경우 여러 프록시 서버에서 분산해서 처리해 줄 수 있을 것이라고 생각해서). 하지만, 찾아본 결과 프록시 서버를 이용하는 것과 관련해서는 정확히 모르겠지만, 클라우드 서버의 경우 VPC(Virtual Private Cloud)방식을 이용하는 것 같습니다.

다음을 참고해 봅시다.

<참고>

캐시

캐시는 특별한 종류의 HTTP 프록시 서버로, 웹캐시와 캐시 프록시는 자신을 거쳐 가는 문서들 중 자주 찾는 것의 사본을 저장합니다.

역할

  1. 빠른 데이터 전달
  2. 프라이버시 보호

게이트웨이

게이트웨이는 다른 서버들의 중개자로 동작하는 특별한 서버입니다.

게이트웨이는 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용합니다.

예를 들어, HTTP/FTP 게이트웨이는 FTP URI에 대한 HTTP 요청을 받아들인 뒤, FTP 프로토콜을 이용해 문서르 ㄹ가져옵니다. 받아온 문서는 HTTP 메시지에 담겨 클라이언트에게 보냅니다.

터널

터널은 두 커넥션 사이에서 날(raw) 데이터를 열어보지 않고 그대로 전달해주는 HTTP 애플리케이션입니다.

HTTP 터널은 주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용합니다.

HTTP 터널을 활용하는 대표적인 예로, 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송함으로써 웹트래픽만 허용하는 사내 방화벽을 통과시키는 것이 있습니다.


Reference

profile
개발정리블로그

0개의 댓글