Stateful과 Stateless
: 클라이언트와 서버 간 통신 상태(state) 유지 여부에 따라 나뉘는 특성이다.
Stateful(상태 유지)
: 서버가 클라이언트의 상태를 유지하는 것을 의미한다.
- 클라이언트와 서버 간에 송수신을 하며 단계별 과정을 진행하는 데 있어 서버가 클라이언트가 이전 단계에서 제공한 값을 저장하고 다음 단계에서도 저장한 상태
- 예시
: 한 번 로그인을 하면 페이지를 이동 해도 로그인이 풀리지 않고 유지된다.
- 장점
: 정보를 어딘가에 저장하고 통신할 때마다 읽기 때문에 정보를 기억할 수 있다.
- 브라우저 쿠기, 서버의 세션 메모리 등에 저장되어 상태 유지
- 단점
1) 같은 서버 유지 필요
- 해당 서버에 문제가 발생할 시 문제 발생(서버 미동작 원인: 시스템 에러, 비즈니스 로직 문제, 리소스 부족 문제 등...)
- 다른 서버가 역할을 이어받아도 새 서버로 데이터가 전달된 것이 아니라면 정보가 없기 때문에 문제가 발생한다.
2) 요청 트래픽이 몰리면 상태 유지에 리소스가 많이 소모돼 서버가 종료되거나 다음 요청 처리가 느려지는 문제가 발생한다.
Stateless(무상태)
: 서버가 클라이언트의 상태를 유지하는 않는 것을 의미한다.
- 서버는 단순히 요청에 대한 응답을 보내는 역할만 수행한다.
- 상태관리는 클라이언트의 책임이다.
- 장점
1) 같은 서버 유지 불필요
- 상태를 보관하지 않기 때문에 해당 서버에 문제가 생겨 다른 서버가 이어받아도 응답하는 데 문제가 발생하지 않는다.
2) 대량 트래픽 발생에도 서버 확장(스케일 아웃 수평 확장성이 높음)으로 대처를 쉽게 할 수 있다.
- 단점
1) 클라이언트의 요청에 많은 데이터 소모
- 매 요청마다 자신의 부가정보를 줘야 한다.
- 한계 및 극복
웹 애플리케이션 만들 시 서버 확장성을 고려해 최대한 stateless하게 만들어야 한다.
- 문제: 로그인 같은 상태 유지가 필요한 경우가 발생한다.
- 극복: 상태 유지를 최소화 시키되 쿠키, 세션, 토큰 등을 활용하여 한계를 극복한다.
'CS > Network' 카테고리의 다른 글
프로토콜과 계층 구조(OSI 7계층 모델) (0) | 2025.05.05 |
---|---|
Connection, Connectionless, HTTP 지속 연결 (0) | 2025.05.02 |
서버 성능 향상 (0) | 2025.05.02 |
JSON (1) | 2025.05.02 |
DNS, URI(URI, URL) (1) | 2025.05.02 |