TIL(2020.10.16)

Awesome·2020년 10월 16일
0

TIL

목록 보기
31/46
post-thumbnail

HTTP 완벽가이드 내용 정리

1부. HTTP:웹의 기초

1장. HTTP 개관

1-1. 개요

전 세계의 웹브라우저, 서버, 웹 애플리케이션은 모두 HTTP(Hypertext Transfer Protocol)을 통해 대화한다. 1장에서는 http에 대한 간략한 설명과 함께 다음의 질문들에 대답할 수 있는 것을 목표로 한다.

  • 리소스(웹 콘텐츠)가 어디서 오는가
  • 웹 트랜잭션이 어떻게 동작하는가
  • HTTP 통신을 위해 사용하는 메시지의 형식은 무엇인가
  • HTTP 기저의 TCP 네트워크 전송은 어떻게 되는가
  • HTTP 프로토콜의 종류는 무엇이 있는가
  • 인터넷 곳곳에 설치된 다양한 HTTP 구성 요소는 무엇이 있는가

하루에 수십억 건의 이미지와 영상, 텍스트 등이 HTTP를 통해 웹 서버에서 웹브라우저로 이동한다. HTTP는 신뢰성 있는 데이터 전송 프로토콜을 사용하기 때문에, 데이터 전송 중 손상되거나 꼬이지 않음을 보장한다. 개발자의 입장에서는 통신 과정에서 데이터의 왜곡을 걱정하지 않고 애플리케이션 고유 기능을 구현하는 데에 집중할 수 있다.

1-2. 웹 클라이언트와 서버

이미지 출처

웹 콘텐츠는 웹 서버에 존재하며, HTTP 클라이언트의 요청에 따라 데이터를 제공한다. 위 그림과 같이 요청(request)하는 클라이언트와 응답(response)하는 서버는 웹의 기본 요소이다.

1-3. 리소스

앞서 언급했던 바와 같이, 웹 리소스는 웹 서버가 관리하며 웹 콘텐츠의 원천이다. 웹 리소스는 이미지, 동영상, 텍스트, HTML 등과 같은 정적 파일과 프로그램(ex.검색 엔진) 등 웹에 콘텐츠를 제공하는 모든 것을 말한다.

1.3.1 미디어 타입

웹 리소스에는 워낙 다양한 종류의 데이터 타입이 존재하므로, HTTP는 전송되는 리소스 객체 각각에 MIME 타입이라는 데이터 포멧 라벨을 붙인다.

MIME(Multipurpose Internet Mail Extensions, 다목적 인터넷 메일 확장) : 원래 서로 다른 전자메일 시스템 사이에서 메시지가 오갈 때 겪는 문제점을 해결하기 위해 사용되었으며, HTTP에서도 멀티미디어 콘텐츠를 기술하고 라벨을 붙이기 위해 채택됨

따라서 웹 서버는 모든 HTTP 객체 데이터에 MIME 타입을 붙인다. MIME 타입은 / 로 구분된 주 타입과 부 타입으로 이루어진 문자열 라벨이다. 예컨데 크롬 개발자 도구에서 Response Headers 에 있는 content-type: application/json 으로 표기된 부분이다. 일반적으로 많이 쓰이는 라벨의 예는 아래와 같다.

  • text/html : HTML
  • text/plain : plain ASCII text
  • image/jpeg : JPEG
  • image/gif : GIF
  • application/json : JSON

1.3.2 URI

웹 서버 리소스는 각자 이름을 가지고 있다. 따라서 클라이언트는 관심 있는 리소스의 이름을 지목하여 접근한다. 서버 리소스의 이름은 통합 자원 식별자 URI(Uniform Resource Idendifier) 라고 한다.
URI는 URL, URN 이라는 두 종류의 식별자로 구분할 수 있다.

1.3.3 URL

URL(Uniform Resource Locator, 통합 자원 지시자): 가장 흔한 형태의 리소스 식별자이며, 특정 서버의 한 리소스에 대한 구체적인 위치를 서술한다.

이미지 출처

URL은 크게 세 부분으로 나눌 수 있다.

  1. URI Scheme : 리소스에 접근하기 위해 사용되는 프로토콜을 서술하는 부분
  2. Authority : 서버의 인터넷 주소를 제공하며, 서버와 도메인 이름으로 구성
  3. Path : 웹 서버의 리소스 경로

일반적으로 URI와 URL을 동일하게 보는 경우도 있는데, 차이점은 분명히 있다.

https://www.test.co.kr/api/v1/services?page=3

위와 같은 경로가 있을 때, URI 와 URL은 어떤 차이가 있는가?

URI : https://www.test.co.kr/api/v1/services?page=3
URL : https://www.test.co.kr/api/v1/services

URL은 ? 뒤의 쿼리스트링을 포함하지 않는다. 해당 파일의 경로만을 의미하기 때문이다. 반면 URI는 식별자다. 최종적으로 클라이언트가 원하는 데이터만을 식별할 수 있는 식별자를 의미하기 때문에 쿼리스트링을 포함하여 URI라고 할 수 있다.

1.3.4 URN

URN(Uniform Resource Name, 통합 자원 이름): 한 리소스에 대해, 그 위치에 영향을 받지 않는 유일무이한 이름

URN을 사용하면 리소스의 위치가 변화하더라도 그 이름을 유지하는 한, 여러 종류의 네트워크 접속 프로토콜로 접근해도 문제가 없다.
URN은 아직까지 널리 채택되지 않았으며 여전히 실험 중이다. 그 이유는 효율적인 동작을 위한 리소스 위치 분석이 필요하기 때문이다.

1.4 트랜잭션

클라이언트가 웹 서버와 리소스를 주고 받기 위해 HTTP 메시지라는 정형화된 데이터를 이용한다.

1.4.1 메서드

HTTP는 HTTP 메서드라는 여러 종류의 요청 명령을 지원한다. 모든 요청 메시지는 단 한개의 메서드를 가지며, 메서드는 서버에게 어떤 동작이 취해져야 하는지를 말해준다. 일반적으로 많이 쓰이는 메서드는 아래와 같다.

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

1.4.2 상태코드

모든 HTTP 응답 메시지는 상태 코드와 함께 반환된다. 상태 코드는 클라이언트에게 요청이 성공했는지 아니면 추가 조치가 필요한지 알려주는 세 자리 숫자를 의미한다. 각 상태 코드에 사유 구절(reason phrase)도 함께 보내며 아래와 같다.

200 OK
302 FOUND
404 NOT FOUND

1.4.3 웹페이지는 여러 객체로 이루어질 수 있다.

예컨대, 시각적으로 화려한 페이지를 가져오는 경우 페이지 레이아웃에 대한 HTML 파일을 한 번에 가져오는 트랜잭션을 수행한다. 그 후에 이미지, 동영상 등을 가져오기 위해 추가로 트랜잭션을 수행할 수 있다. 이처럼 웹페이지는 하나의 리소스가 아닌 여러 리소스의 모음이다.

1.5 메시지

HTTP 요청과 응답 메시지는 공통적으로 크게 세 부분으로 구성되어 있다.
<요청>이미지출처
<응답>이미지출처

  • 시작줄 : 요청에는 메서드, 리소스 위치, HTTP 버전 등이 표기된다. 응답에는 요청에 대한 결과를 회신한다.
  • 헤더 : 콜론으로 구분된 헤더 필드가 있으며 항상 마지막은 빈 줄로 끝난다.
  • 본문 : 웹 서버로 데이터를 보내거나, 결과를 반환한다.

1.6 TCP 커넥션

1.6.1 TCP/IP

이미지출처

HTTP는 네트워크 통신 과정을 계층화한 OSI 7계층의 가장 상단에 위치한다. HTTP는 네트워크 통신의 핵심적인 세부사항을 대중적이고 신뢰성 있는 인터넷 전송 프로토콜인 TCP/IP에 맡긴다.

TCP(Transmission Control Protocol, 전송 제어 프로토콜) : IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다.

과거 인터넷이 나타나기 이전의 전화 통신에서는 통신이 연결되면, 끝날 때까지 회선을 독점하는 서킷 통신이었다. 회선 독점의 문제점을 보완하고자 전달 내용을 잘게 나누어 다중망을 통해 전송하고, 이를 재정렬하는 패킷 통신이 개발되었다. 이 때, 데이터를 분할하여 가장 효율적으로 전달하는 역할을 하는 것이 IP(인터넷 프로토콜)이며 전달된 데이터의 안정성과 순서를 보증하는 것이 TCP이다.
자세한 참고 사이트 - 브런치

TCP는 아래와 같은 사항을 보증한다.

  • 오류 없는 데이터 전송
  • 순서에 맞는 전달(데이터는 언제나 보낸 순서대로 도착한다)
  • 조각나지 않는 데이터 스트림(언제든 어떤 크기로든 보낼 수 있다)

HTTP는 TCP 위의 계층이며, TCP를 사용하므로 신뢰성 있는 통신 주체 간의 의사소통을 가능케 한다.

1.6.2 접속, IP주소와 포트번호

HTTP 클라이언트와 서버 사이의 TCP/IP 커넥션이 필요하며 이때, IP주소와 포트번호를 사용한다.
이 때, HTTP 서버의 IP주소와 포트번호는 URL을 통해서 알 수 있다. 도메인 이름이 있는 경우에는 DNS(Domain Name Service)를 통해서 IP주소 값을 알 수 있으며 일반적으로 생략된 포트번호는 80번 포트를 의미한다.
이미지 출처

1.7 프로토콜 버전

HTTP 프로토콜은 기능 추가와 여러가지 보완을 거쳐 현재 HTTP/1.1 버전이 사용되고 있다. HTTP/2.0 버전은 현재 설계가 진행 중이다.

1.8 웹의 구성요소

인터넷과 상호작용할 수 있는 여러 애플리케이션에 대해 알아본다.

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

1.8.1 프록시

이미지 출처

프록시는 클라이언트와 서버 사이에 위치하여 클라이언트의 모든 HTTP 요청을 받아 서버에 전달한다. 프록시는 주로 보안을 위해 사용되며, 요청과 응답을 필터링한다. 예를 들어 다운로드 시에 바이러스를 검출하거나 성인 콘텐츠를 차단하는 등이 있다.

1.8.2 캐시

웹 캐시와 프록시 캐시는 자신을 거쳐 가는 문서들 중 자주 찾는 것의 사본을 저장해두는 특별한 종류의 HTTP 프록시 서버이다. 클라이언트가 같은 문서를 요청하면 캐시가 갖고 있는 사본을 받을 수 있다. 따라서 웹 서버보다 근처의 캐시를 통해 훨씬 빨리 문서를 받을 수 있다.

1.8.3 게이트웨이

이미지 출처

게이트웨이는 다른 서버들의 중개자로 동작하는 특별한 서버이다. 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용된다. 게이트웨이는 언제나 스스로 리소스를 가지고 있는 진짜 서버처럼 요청을 다루기 때문에 클라이언트는 게이트웨이와 통신하고 있음을 알아채지 못한다.

1.8.4 터널

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

이미지 출처

예를 들면, 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송하여 사내 방화벽을 통과시키는 것이 있다.

1.8.5 에이전트

에이전트 (혹은 사용자 에이전트)는 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램이다. 웹 요청을 만드는 애플리케이션은 전부 HTTP 에이전트라고 할 수 있다. 웹 브라우저가 대표적인 HTTP 에이전트이며, 그 외에도 사람의 통제 없이 스스로 웹을 돌아다니며 HTTP 트랜잭션을 일으키는 자동화된 에이전트도 있다.

정리

HTTP의 전반적인 기초 내용에 대해 알아봤다. 블로그 시작 부분에서 있던 1장에서의 학습 목표에 대해 각각의 답변을 정리해보겠다.

  • 리소스(웹 콘텐츠)가 어디서 오는가
    • 리소스는 웹 서버에서 관리하며, 리소스를 식별할 수 있는 식별자를 URI라고 한다.
  • 웹 트랜잭션이 어떻게 동작하는가
    • 웹 트랜잭션은 클라이언트의 요청(request)와 서버의 응답(response)를 통해서 이루어진다. 각 요청과 응답은 일정한 HTTP 메시지를 통해서 주고 받아진다.
  • HTTP 통신을 위해 사용하는 메시지의 형식은 무엇인가
    • HTTP 메시지는 요청과 응답에 구분없이 공통적으로 크게 세 부분으로 나눌 수 있다.
    • 시작점 : 서버에 어떻게 요청할 것인지, 어떤 경로인지에 대한 부분과 그 결과 값을 나타낸다.
    • 헤더 : 콘텐츠에 대한 각종 정보를 포함한 여러가지 헤더 필드를 담는다.
    • 본문 : 데이터를 전송해야하는 경우 그 내용과 결과가 표시된다.
  • HTTP 기저의 TCP 네트워크 전송은 어떻게 되는가
    • TCP는 IP계층의 상단에 위치하며, 분할된 데이터의 순서와 그 신뢰성을 담보한다.
    • IP는 데이터를 분할하여 효율적인 전송을 가능케 한다.
  • HTTP 프로토콜의 종류는 무엇이 있는가
    • 1991년 HTTP/0.9부터 시작하여 1.0, 현재 사용중인 1.1 그리고 설계 중인 2.0까지 존재한다.
  • 인터넷 곳곳에 설치된 다양한 HTTP 구성 요소는 무엇이 있는가
    • 프록시, 캐시, 게이트웨이, 터널, 에이전트 등이 있다.
    • 프록시 : 클라이언트와 서버 사이에 존재하며 주로 보안의 목적으로 사용된다.
    • 캐시 : 자주 사용되는 데이터의 사본을 보관하여 보다 빠른 통신을 가능하게 한다.
    • 게이트웨이 : 서로 다른 프로토콜 간의 통신을 위해 사용된다.
    • 터널 : 특수한 경우에 raw 데이터에 대한 확인 없이 전달만을 목적으로 사용된다.
    • 에이전트 : HTTP 요청을 생성하는 웹 브라우저와 같은 애플리케이션을 말한다.

2장 URL과 Resource: 환일님 블로그
3장 HTTP 메시지: 준수님 노션

profile
keep calm and carry on

0개의 댓글