이 말은 웹 브라우저상에 있는 모든 이미지, 음성, 영상, 파일, json, XML 심지어 서버끼리 통신하는데 사용되는 API들까지 모두 HTTP 프로토콜
을 기반으로 통신이 이뤄진다고 합니다.
현재 HTTP버전은 0.9, 1.0, 1.1
, 2, 3까지 있는데 가장 많이, 널리쓰이는 버전은 1.1버전이기에 1.1버전에 대해 알아보면 좋을것같습니다.
RCF2068(1997) -> RFC2616(1999) -> RFC7230~7265(2014)
버전 | 특징 |
---|---|
0.9 | 1991년 GET메서드만 지원, HTTP 헤더 X |
1.0 | 1996년 메서드, 헤더 추가 |
1.1 | 1997년 가장 많이 사용, 우리에게 가장 중요한 버전 |
2 | 2015년 성능 개선 |
3 | 진행중.. TCP대신 UDP사용, 성능 개선 |
그림을 통해 우리는 웹 브라우저에서 서버로의 요청 과정을 간단하게 살펴볼 수 있습니다.
애플리케이션 단계
인 웹 브라우저에서 HTTP 메시지를 생성하고 SOCKET 라이블리를 통해 HTTP메시지를 전달합니다.
운영체제
에서는 전달받은 HTTP메시지를 TCP 세그먼트, IP패킷으로 만들고 네트워크
단에서 LAN 장비를 통해 서버로 전달되게 됩니다.
HTTP의 주요한 특징은 4가지라고 합니다.
1.
클라이언트 서버
구조
2.무상태
프로토콜,비연결성
3.HTTP메시지
4.단순함
,확장가능
일단 첫번째 클라이언트 서버
구조는 단순하게 클라이언트는 정보를 요청
하고, 서버는 요청한 정보를 응답
으로 보내주는 관계입니다 이렇게 클라이언트와 서버로의 분리를 통해 얻는 이점은 각각 독립적으로 진화
가 가능해졌다는 것 입니다.
즉, 클라이언트는 불필요한 데이터 로직을 다룰 필요 없이 UI/UX
에만 집중할 수 있게 되었고, 서버는 UI/UX
에 신경쓰지 않고 오직 복잡한 데이터 로직
, 아키텍쳐 설정
, 등등의 고민만을 하면 되기때문에 독립적으로 진화
가 가능해졌다고 합니다.
두번째 특징인 무상태 프로토콜. 무상태(stateless)
란 무엇일까요?
무상태란, 서버가 클라이언트의 상태를 보존하지 않는다는 것 입니다. 이는 서버에게 안면인식장애
가 있다고 생각하면 좋을것 같습니다. 서버는 이러한 장애가 있어서 단골인 클라이언트가 와도 알아보지 못합니다. 즉 클라이언트를 기억하지 못하는 것 이지요.
이로 인해 서버는 여러 클라이언트의 상태를 기억하지 않아도 되서 그만큼 부하가 줄어들게
되고, 그림에서 중간에 서버1이 종료되어도
서버2나 서버3에서 바로 요청을 처리할 수 있습니다. 때문에 서버의 확장
에 유리하겠죠??
하지만 이 로그인한 회원을 기억하거나 할 필요가 있죠? 이는 클라이언트에게 쿠키나 서버의 세션등을 사용해서 상태를 유지하게 합니다.
하지만 이 쿠키는 동일한 도메인
일 경우엔 매 요청시 전부 네트워크를 통해 넘어가기때문에 최소한의 쿠키만 저장해서 상태유지에 사용하는것이 좋다고 합니다.
TCP는 3 way handshake
를 통해 기본적으로 연결을 유지합니다. 하지만 요청/응답
이 끝난 후에, 더이상의 요청이 없는데도 이 연결을 유지하게되면 서버는 계속 귀를 열어놓고있기때문에
그만큼 더 피곤해지게 됩니다.
때문에 HTTP는 이 연결을 기본적으로 유지하지 않습
니다. 한번의 요청/응답
이 끝나버리면 바로 TCP연결을 끊어버리게 되죠. 이를 통해서 서버는 계속 귀를 귀울일 필요가 없게
되었습니다.
하지만, 웹 페이지는 단순 HTML파일 뿐만 아니라 js, css, 이미지들 등등 수많은 자원들을 재요청을 통해 다운로드 받아서 띄워지게 됩니다. 재요청할 떄 마다 매번 다시 TCP연결을 하면 이또한 큰 비용이 들게 됩니다. 때문에 지금의 HTTP
는 지속 연결
을 통해서 해당 문제를 해결했습니다. 지속 연결은 한번의 TCP연결을 한 뒤 웬만한 사이트 정보를 다 받고나서 연결을 끊는 방식으로 이전의 초기 HTTP 방식보다 효율을 높였습니다.
앞서 HTTP 메시지를 통해 모든 정보를 보낼 수 있다고 했습니다.
HTTP는 메시지를 단순히 보내는 기능 뿐만아니라, 요청에 대한 행동(GET,POST,DELETE,PUT...)
, IP주소 뿐만 아니라 해당 IP주소에서의 절대경로 지정
, 메시지 정보에 대한 추가적인 헤더
, 요청에 대한 응답의 상태
등 좀 더 정밀하게 메시지를 보낼 수 있습니다.
HTTP는 매우 단순하다고 합니다. 널리 사용되고 표준이 된 이유는 이러한 특징들 덕분이겠죠.
이번 장에서는 HTTP의 등장과 특징에 대해 알아보았습니다. 정말 부분만 알아본것이고 다음엔 메서드들과 헤더에 대해 알아보겠습니다