1. 클라이언트-서버 구조
클라이언트와 서버는 역할을 분리하여 통신한다.
- 클라이언트는 요청(Request)을 전송한다.
- 서버는 요청을 처리한 뒤 응답(Response)을 반환한다.
- 역할 분리를 통해 서버는 비즈니스 로직에, 클라이언트는 사용자 인터페이스에 집중할 수 있다.
2. 무상태 프로토콜 (Stateless)
Stateless는 서버가 클라이언트의 이전 상태를 보존하지 않는 특성을 의미한다.
- 서버는 현재 요청만 보고 처리한다.
- 인증이 필요한 경우에도 클라이언트는 매 요청마다 토큰이나 세션 식별자를 함께 전달해야 한다.
- 서버가 사용자 상태를 별도로 보관하지 않으므로 확장성이 높다.
장점은 다음과 같다.
- 서버를 수평 확장하기 쉽다.
- 특정 서버에 상태가 묶이지 않아 장애 대응이 유리하다.
- 상태 저장 부담이 줄어 서버 관리가 단순해진다.
3. Stateful vs Stateless 비교
| 구분 | Stateful (상태 유지) | Stateless (무상태) |
|---|---|---|
| 처리 방식 | 서버가 이전 상태를 기억한다. | 서버가 현재 요청만 처리한다. |
| 장점 | 연속된 흐름 처리에 유리하다. | 확장성과 운영 효율이 높다. |
| 단점 | 상태 저장과 관리 비용이 크다. | 매 요청마다 필요한 정보를 함께 보내야 한다. |
| 예시 | 세션 중심 서비스, 웹소켓 연결 | 일반적인 HTTP 기반 웹 서비스, REST API |
4. 비연결성 (Connectionless)
HTTP는 기본적으로 요청과 응답이 끝나면 연결을 유지하지 않는 비연결성 특성을 가진다.
- 요청을 처리한 뒤 연결을 종료하여 서버 자원을 절약한다.
- 동시에 많은 사용자가 접속하는 환경에서 자원 활용 효율을 높일 수 있다.
- 다만 매번 연결을 새로 맺으면 비용이 발생하므로, 실제로는 HTTP 지속 연결(Persistent Connection)로 이를 보완한다.
핵심 정리
Stateless는 서버가 이전 요청 상태를 기억하지 않는 구조이고, 비연결성은 요청과 응답이 끝나면 연결을 종료하는 특성이다.
두 특성은 HTTP의 확장성과 자원 효율성을 높이는 핵심 요소다.