-
2. HTTP, 클라이언트-서버 구조, Stateless, 비연결성, HTTP 메시지개발 공부/Network 2021. 4. 24. 20:35
본 게시물은 김영한님의 "모든 개발자를 위한 HTTP 웹 기본 지식" 강의를 듣고 정리한 내용입니다.
따라서 모든 저작권은 인프런과 김영한님께 있음을 밝힙니다.
혹시라도 문제가 된다면 삭제하겠습니다. 댓글에 남겨주세요.1) 모든 것이 HTTP
HyperText Transfer Protocol
- HTTP 메시지에 모든 것을 전송한다. (html, text, image, 음성, 영상, json, xml, 등등 거의 모든 형태의 데이터 전송 가능)
- HTTP의 역사:
1997년의 1.1버전
이 가장 중요하다. 가장 많이 사용하는 버전이다. - TCP 프로토콜을 기반으로 HTTP/1.1이나 HTTP/2가 구현된다. HTTP/3는 UDP 프로토콜을 기반으로 구현된다.
- HTTP의 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(stateless), 비연결성
- HTTP 메시지를 통해서 통신한다,
- 단순하고 확장 가능하다.
2) 클라이언트 서버 구조
- Request와 Response로 이루어지는 구조
- 클라이언트는 서버에 request를 보내고, response를 대기
- 서버가 request에 대한 결과를 만들어서 response
- 비즈니스 로직은 서버에 모두 몰아넣고, 클라이언트 단에서는 사용자 UI를 어떻게 보여줄지만 생각한다. 이렇게 업무를 분담하여 각자 신경 쓸 곳만 신경쓴다.
3) Stateful, Stateless
상태, 무상태 프로토콜
- Stateful: 서버가 클라이언트의 이전 상태를 보존하므로 이전 상태를 알고있는 것
- Stateless: 서버가 클라이언트의 이전 상태를 보존하지 않아서 상태를 모르고 있는 것
- 손님과 점원으로 예를 들어보면, Stateful에서는 점원이 바뀌면 손님의 이전 상태를 모르므로 혼동이 온다.
하지만 Stateless에서는 점원이 바뀌어도 손님은 계속 모든 정보를 새로운 점원에게 전달하므로 혼동이 오지 않는다. - 따라서 이러한 Stateless의 특징은 서버의 확장성을 마련한다. 즉 갑자기 클라이언트의 요청이 증가해도 서버를 대거 투입할 수 있다. 왜냐면 점원이 바뀌듯이, 서버도 쉽게 바뀔 수 있기 때문이다. 즉 무한한 서버의 증설이 가능하다는 뜻이다.
- 하지만 Stateless도 한계는 있다. 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있기 때문이다.
- 로그인과 같은 시스템은 상태가 유지 되어야 하므로 무상태를 사용할 수 없다. 그러나 쿠키와 세션으로 상태를 유지시키며 최소한만의 상태 유지를 한다. 나머지는 최대한 무상태를 사용한다.
4) 비 연결성(connectionless)
- 만약 서버가 클라이언트와 연결을 한 다음, 그 연결을 끊지않고 유지하면 어떻게 될까? 더이상 데이터를 주고 받지 않아도 계속 연결되어 있으므로 자원의 소모가 심각할 것이다.
- 따라서 HTTP에서는 기본적으로 비 연결성을 지향하여, 클라이언트와 서버가 요청 응답을 주고 받은 다음 바로 연결을 끊는다. 그리고 다음에 필요할 때 다시 연결하여 요청과 응답을 주고 받는다.
단점
- TCP/IP 연결을 새로 맺어야 하므로, 3 way handshake 시간이 추가된다.
- html 뿐만 아니라, js, css, image 등 여러 파일을 또 불러와야 하므로 자원이 많이 소모된다.
- 이러한 문제는 지속 연결(Persistent Connections)로 문제 해결
5) HTTP 메시지
- 공백 라인 부분은 무조건 있어야 한다.
1) 시작 라인은
GET, POST 등의 http 메서드(요청에서)
혹은응답코드(응답에서)
가 들어간다HTTP 메소드
: GET, POST, PUT, DELETE 등요청 대상
: 절대 경로[?쿼리]HTTP 버전
: 1.1HTTP 버전
: 1.1HTTP 상태코드
: 200(성공), 400(클라이언트 오류), 500(서버 오류)OK
: 상태코드가 무슨 의미인지 사람에게 알려주는 짧은 설명
2) 헤더는 호스트나 컨텐트의 타입이 들어간다.
- HTTP 전송에 필요한 모든 부가정보가 다 들어있다.
- 메시지 바디가 무슨 내용인지, 크기는 몇인지, 압축된 것인지, 인증은 있는지, 클라이언트 정보, 서버 정보, 캐시 정보 등등등....
3) 바디는 전송하는 파일이 들어간다.
- 실제 전송하는 데이터
- html 문서, 이미지, 영상, json 등등 byte로 표현 가능한 모든 데이터 전송 가능
'개발 공부 > Network' 카테고리의 다른 글
6. HTTP 헤더 1 - 일반헤더 (0) 2021.06.01 5. HTTP 상태코드(2xx, 3xx, 4xx, 5xx) (0) 2021.05.17 4. HTTP 메서드의 활용, HTTP API 설계 예시 (0) 2021.05.09 3. HTTP 메서드(GET, POST, PUT, PATCH, DELETE) (0) 2021.05.02 1. 인터넷 프로토콜과 URI의 개념 (2) 2021.04.18