인터넷 프로토콜
HTTP
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F6c388b25-c63b-4e22-aa6a-ac45fc6e9c46%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.15.15.png)
- HTTP/1.1, HTTP/2는 TCP 기반, HTTP/3은 UDP 기반 프로토콜
- HTTP의 특징
- 클라이언트 서버 구조
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2Fc2121663-7366-495f-a75e-034c0a54143c%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.28.40.png)
- 무상태성 프로토콜(Stateless)
- 서버가 클라이언트의 상태를 보존하지 않음
- 서버의 확장성 높음(스케일 아웃), 클라이언트가 추가 데이터를 전송해야 함
- 예를 들면, 고객(클라이언트)과 점원(서버)의 관계를 살펴보면
- 점원이 상태를 저장하지 않으면, 고객이 상태를 계속 전달해주어야 하는 단점
- 하지만 고객의 증가로 점원을 추가적으로 투입해야 할 때에도 문제가 발생하지 않음
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2Fc3f0dc7a-b762-4e8a-ae6c-8fdd13d6b0b9%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.30.51.png)
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2Fe662d0fb-bab0-4bbd-8980-f8c2d6f13719%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.30.40.png)
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F76af5875-fd35-4959-b55c-7cab2c3f77f9%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.30.58.png)
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F0b4b94fa-df54-47d2-9586-f63e5a5f4b8c%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.35.35.png)
- 상태 유지 vs 무상태성
- 상태 유지는 클라이언트A의 요청은 항상 같은 서버인 서버 1이 응답해야 한다
- 서버 1에 장애가 생긴다면, 서버 2로 이동해 처음부터 다시 요청해야 한다
- 무상태성이라면 아무 서버나 호출하여 요청을 이어나가면 된다
- 또한 응답 서버를 쉽게 바꿀수 있으므로 수평 확장으로 서버를 무한히 증설할 수 있다
- 하지만 모든 것을 무상태성으로 설계할 수는 없으므로 실무적 한계에 부딪힌다
- 로그인이 필요한 서비스라면, 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 유저의 상태를 유지해야 함
- 비연결성(Connectionless)
- TCP/IP의 경우 기본적으로 연결을 유지, 서버의 자원이 계속 소모됨
- HTTP는 실제 요청을 주고받을 때만 연결을 유지하고, 응답을 주고 나면 TCP/IP 연결을 끊음, 최소한의 자원으로 서버 유지를 가능하게 함
- 트래픽이 많지 않고, 빠른 응답을 제공할 수 있는 경우에 효율적으로 작동함
- 그러나 트래픽이 많고, 큰 규모의 서비스에는 한계가 명확함
- TCP/IP 연결을 새로 맺어야 함(즉, 3way handshake 시간이 추가됨)
- 웹 브라우저로 사이트를 요청하면, HTML, JS, CSS, 추가 이미지 등 수 많은 자원이 함께 다운로드 되야 함
- 최근에는 HTTP 지속 연결(Persistent Connections)로 문제를 해결
- HTTP/2, HTTP/3에서 더 많은 최적화가 이루어짐
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2F1938817e-680f-41fa-8f0b-a58b9ef50e5a%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.51.05.png)
![](https://velog.velcdn.com/images%2Febiny%2Fpost%2Fdc794826-cf4e-47d9-8426-fd4c90005ebc%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.51.08.png)
- HTTP 메세지
- 단순함, 확장 가능