![[HTTP] http는 왜 stateless, connectionless할까?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbH84ut%2FbtsHzvXDLtU%2F9q2kF6nJfgLCRbCKcRFEU0%2Fimg.png)
[HTTP] http는 왜 stateless, connectionless할까?Back-end/etc..2024. 5. 23. 11:22
Table of Contents
✅ 개념
HTTP
- 서버와 클라이언트가 웹에서 데이터를 주고받기 위한 프로토콜 (규약)
- HTTP/1.1, HTTP/2는 TCP 기반 위에서 동작
- HTTP/3는 UDP 기반 위에서 동작 → 3-way 핸드쉐이크로 연결을 맺을 필요가 없다.
HTTP 요청/응답 메시지 구조 (http://www.ktword.co.kr/test/view/view.php?m_temp1=4884)
- 특징
- 클라이언트 - 서버 모델
- 무상태 프로토콜 (Stateless)
- 서버가 클라이언트 상태를 유지하지 않음
= 클라이언트가 서버에 요청을 보내면 서버는 클라이언트에게 응답을 주고, 바로 close하며 연결을 끊어버림
= 즉, 서버가 클라이언트의 상태를 유지하지 않음
- 서버가 클라이언트 상태를 유지하지 않음
-
- ⇒ 해결책 : Keep-Alive 속성 사용
- 비 연결성 (Connectionless)
- 서버가 클라이언트 요청에 대해 응답을 마치면 맺었던 연결을 끊어 버림
Keep-Alive
- 만약 TCP 기반으로 동작하는 구조라면 클라이언트가 서버에 요청을 보낼 때마다 3-way 핸드쉐이크를 통해서 연결을 맺은 뒤에, 데이터를 주고받는 과정을 거쳐야 한다.
→ 이 과정을 매 요청마다 수행하는게 비효율적이라고 생각을 했기 때문에, 일정 기간 동안에는 해당 연결을 끊지 않고 클라이언트와 서버 사이의 데이터를 주고받을 수 있도록 한 것이 keep-alive
- 이게 만능 해결책일까?
- keep-alive 기능이 켜져 있는 상태에서 클라이언트의 요청이 많아지게 되면, 유지되는 커넥션도 많아짐 → 웹 서버 스레드가 부족해지는 현상이 발생
→ 잘못 사용하면 성능 하락의 주범이 되기도 한다.
- keep-alive 기능이 켜져 있는 상태에서 클라이언트의 요청이 많아지게 되면, 유지되는 커넥션도 많아짐 → 웹 서버 스레드가 부족해지는 현상이 발생
✅ http는 왜 stateless, connectionless할까?
→ HTTP의 설계 목적이다
- HTTP는 기본적으로 웹 상에서 불특정 다수와 통신이 가능하도록 설계된 프로토콜
- 이런 상황에서 서버가 다수의 클라이언트들의 상태 또는 연결을 계속 유지해야 한다면 리소스 낭비는 굉장히 심해질 것임
⇒ 따라서 상태 또는 연결을 유지하지 않는 대신에, 더 많은 연결을 할 수 있도록 설계 된 것이 HTTP 프로토콜
'Back-end > etc..' 카테고리의 다른 글
[운영체제] 싱글턴 객체에서 상태를 유지하게 설계하면 안되는 이유? (레이스 컨디션) (0) | 2024.05.23 |
---|---|
[디자인패턴] 일급 컬렉션이란? +리팩토링 (0) | 2024.05.22 |
[LINUX] jar파일 컴파일 버전 찾기 (0) | 2022.04.27 |
[MyBatis] foreach 사용해서 List<Map<>> INSERT하기 (0) | 2022.02.11 |