머릿말

평소 웹 백엔드 개발자라고 하면서 Web이 뭔지?, HTTP가 무엇인지? 제대로 숙지하지 않은채로 개발하고 있었다.
이번 글을 작성하면서 Web의 발명 계기로부터 HTTP의 필요성을 HOW보다는 WHY에 집중하면서 알아보려고 한다.

결론 : 어떻게 Web이 탄생했는가? 그래서 HTTP란?

World Wide Web(3W)은 1989년 CERN(유럽 입자 물리 연구소)에서 영국 과학자 Tim Berners-Lee에 의해 발명되었다.

이 프로젝트는 전 세계 대학과 연구소의 연구원들 간의 정보 공유를 위해 고안되고 개발되었다고 한다.

여기서 말하는 정보 공유의 방법이 바로 HTML(HyperText Markup Language) 이고,
HTTP(HyperText Transfer Protocol)는 이런 HTML을 전송하기 위한 통신 규약이었다.

Web이 없다면?

Web이전의 시대에 연구원들 간 혹은 학생 간 어떻게 정보 공유를 할 수 있었을까?
단순히 상상해봐도 정보 공유를 위하여 많은 시간과 노력이 들었을 것 같다.

  • 프린트 출력물로 스캔 후 팩스 등등..
  • FTP를 통한 파일전송 등등..

하지만 이러한 문제점을 인지하고 있던 Tim Berners-Lee는 W3(World Wide Web)을 개발하게 된다.
이제 공유하고싶은 자료들은 웹 서버에 올려두고,
이 자료가 필요한 연구원들은 해당 웹사이트를 접속하여 하이퍼텍스트 형태로 언제든지 열람이 가능하게 되었다!

또한 HTML은 다른 페이지와도 링크를 통해 유연하게 연결되므로
연구원들은 자료 공유에 드는 비용을 획기적으로 감소할 수 있게 되었다!

당시 최초로 개발된 HTML의 화면이다. 상당히 투박하지만, 아름답다

(출처 : info.cern.ch)

참고로 2013년에 CERN은 세계 최초 웹사이트인 info.cern.ch를 복원하는 프로젝트를 시작했다

HTTP에 대하여 자세히 알기

거리와 시간의 제약을 없앤 W3는 매우 빠른 속도로 사용자를 늘렸고,
이는 HTTP의 발전에 이바지하였다.

HTTP는 버전을 높여갈 수록 메서드 추가나 헤더의 추가 등으로 인해
빠르게 확장할 수 있었고, 현재는 HTTP로 거의 모든 유형의 데이터를 주고받을 수 있게 되었다.

HTTP로 통신이 가능한 데이터 유형

  • HTML, TEXT
  • Image, 음성, 영상, 파일
  • JSON, XML(API)
  • 서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용

HTTP 버전별 특징

  • HTTP/0.9 1991년 : GET 메서드만 지원, HTTP Header X
  • HTTP/1.0 1996년 : 메서드, 헤더 추가
  • HTTP/1.1 1997년 : 가장 많이 사용, 우리에게 가장 중요한 버전
    • RFC2068(1997) –> RFC2616(1999) –> RFC7230~7235(2014)
  • HTTP/2 2015년 : 성능 개선
  • HTTP/3 진행중 : TCP 대신에 UDP 사용(UDP가 Stateless이므로 비교적 상당히 빠르다), 성능 개선

HTTP의 버전별 기반 프로토콜

  • TCP : HTTP/1.1, HTTP/2
  • UDP : HTTP/3

현재는 HTTP/1.1을 주로 사용하고 있다.
하지만, HTTP/2, HTTP/3도 점점 증가하는 추세이다.

HTTP 특징

Client - Server 구조

  • Request / Response 구조
  • 클라이언트는 서버에 요청을 보내고, 응답을 대기
  • 서버가 요청에 대한 결과를 만들어서 응답

무상태 프로토콜(Stateless), 비연결성

  • 서버가 클라이언트의 상태를 보존 하지 않는다
    • 장점 :
      1. 서버 자원을 매우 효율적으로 사용할 수 있다.
      2. 서버 확장성 높음(Scale out)
    • 단점 :
      1. 클라이언트가 상태에 대한 데이터를 메시지마다 전송해야 함
      2. 연결마다 TCP/IP 연결또한 새로 맺어야 함 (3-way handshake 시간 추가)
      3. 기본적으로 웹 브라우저는 html 뿐만 아니라 js, css, 이미지 등의 수 많은 자원이 함께 다운로드
      4. 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결
무상태 프로토콜(Stateless)의 한계
  • 모든 것을 무상태로 설계할 수 있는 경우도 있고, 없는 경우도 있다.
  • 대표적인 상태유지 필요 서비스의 예
    1. 로그인
      • 로그인한 사용자의 경우 로그인 한 상태를 서버에 유지한다.
      • 일반적으로 브라우저의 쿠키와 서버 세션등을 사용해서 이 상태를 유지한다
    2. 비교적 짧은 시간 내에 발생하는 대용량 트래픽 발생 시스템
      • 선착순 이벤트, 명절 KTX 예약, 수강신청, 티켓팅
      • 상태 유지는 최소한으로 사용해야 한다

HTTP 메시지 구조

이 부분은 다시 정리하기보단 잘 정리된 내용에 대한 가이드로 넘어가겠다.

  1. Mozilla 개발자 네트워크 중 HTTP 구조에 대한 설명
  2. Cloudflare - What is HTTP?

HTTP에 대하여 더 알고 싶다면?

  1. Roadmap.sh - BackendWhat is HTTP?
  2. 김영한님의 인프런 모든 개발자를 위한 HTTP 웹 기본 지식 강의