- 모든 것이 HTTP, HTTP로 거의 모든 형태의 데이터를 전송할 수 있다.
HTTP 특징
클라이언트 서버 구조
- 클라이언트가 서버에
request
하면, 서버는 클라이언트에 resopnse
하는 구조.
- 클라이언트와 서버의 개념을 분리했다는 점에서 의의가 있다.
- 시스템 로직이나, 대용량 데이터는 서버에 두고,
- 클라이언트에는 UI를 두는 식으로 운용할 수 있다.
stateful
- 서버가 클라이언트의 상태를 보존한다.
- 서버가 바뀔때마다 클라이언트의 내용을 기록해서 상태를 유지해야 하는데 이러한 방식이 쉽지 않다.
Stateless
- 서버가 클라이언트의 상태를 보존하지 않는다.
- 서버의 확장성이 높다.
- 미리 연결되어진 내용이 존재하지 않기 때문에 클라이언트 요청에도 서버를 대거 투입할 수 있다.
- 아무 서버나 호출해도 되기 때문이다.
- 스케일아웃(수평확장)에 유리하다.
stateful / stateless
- 기본적으로 stateless로 설계하고, 상태유지는 최소한으로 사용한다.
- 하지만, 모든 것을 stateless로 설계할 수 없다.
- 로그인 유지 기능 등은 상태유지가 필수적이다.
비연결성
- 연결을 유지한다면, 서버와 클라이언트의 연결은 서로의 네트워킹이 없다고 하더라도 계속해서 유지된다. - 자원이 계속해서 사용된다.
- 이러한 점 때문에, HTTP는 기본적으로 연결을 유지하지 않는 모델이다.
- 연결을 유지하지 않는다면, 자원을 효율적으로 사용할 수 있다.
- 다만, 클라이언트가 연결을 계속 끊는 다는 것은 TCP/IP 연결을 매번 새롭게 맺어야 한다는 것을 뜻한다.
- TCP 3 wqy handshake를 매번 해야하고, 이는 시간이 걸린다.
- 이러한 문제는 지금 HTTP 지속 연결로 해결하고 있다.
UDP
- UDP는 User Datagram Protocol의 준말이다.
- UDP는 가지고 있는 기능이 거의 없다.
- TCP가 가지고 있던 기능-순서보장-등이 없다.
- 오히려 가지고 있는 기능 자체가 거의 없다는 점에서 빠르다.
- 애플리케이션의 추가 작업을 통해서, 최적화를 다양하게 할 수 있다.
- HTTP3에서 사용된다.