목차
Stateful (상태 유지)
정의 : 클라이언트의 이전 상태(로그인 여부, 장바구니 정보 등)를 서버가 기억합니다.
예시 : 수강 신청 예
- 수강생 : 수강 신청합니다. → 상담원 : 어떤 과목이요? (상태 유지)
- 수강생 : 백엔드입니다. → 상담원 : 어떤 백엔드인가요? (상태 유지)
- 수강생 : Spring입니다. → 상담원 : 신청이 완료되었습니다. (상태 유지)
✨ 상담원은 수강생의 요청들을 기억(상태 유지)하여 다음 질문들에 대한 처리가 가능하다.
특징 :
- 서버가 클라이언트별 상태를 유지함
- 클라이언트와의 연결이 지속되거나 세션이 유지됨
장점 :
- 사용자 맞춤 서비스 제공 가능 (예: 로그인 상태 유지, 장바구니 유지 등)
단점 :
- 확장성 및 장애 대응이 어려움 (특정 서버에 상태가 묶임)
- 항상 같은 서버가 유지되어야 함 (중간에 서버가 바뀌면 클라이언트의 이전 요청 상태가 없어짐)
- 분산 환경에서 세션 동기화가 필요함
- 요청 트래픽이 몰리게 되면, 상태 유지를 위해 리소스 소모가 많을 수 있음 (세션 메모리 등)
- 리소스가 버티지 못하면 서버가 종료되거나, 다음 요청에 대한 처리가 느려진다.
Stateless (무상태)
정의 : 클라이언트의 이전 요청 상태를 저장하지 않습니다.
예시 : 수강 신청 예
- 수강생 : 수강 신청합니다. → 상담원 : 어떤 과목이요?
- 수강생 : 백엔드입니다. → 상담원 : 무엇을 도와드릴까요?
- 수강생 : Spring입니다. → 상담원 : 무엇을 도와드릴까요?
✨ 상담원은 수강생의 요청들을 기억하지 못한다. 다음과 같이 수강생의 요청을 처리할 수 있습니다.
stateless 실제 요청 방식 : 수강 신청 예
- 수강생 : 수강 신청합니다. → 상담원 : 어떤 과목이요?
- 수강생 : 수강 신청합니다. 백엔드입니다. → 상담원 : 어떤 백엔드인가요?
- 수강생 : 수강 신청합니다. 백엔드입니다. Spring입니다. → 상담원 : 신청이 완료되었습니다.
✨ 이렇게 되면, 중간에 상담원(서버)이 바뀌더라도 신청할 수 있게됩니다.
특징 :
- 서버는 클라이언트에 대한 정보를 기억하지 않음
- 확장성과 유지보수성이 좋음
- 복잡한 상태 관리가 필요하지 않아 단순함
장점 :
- 서버 확장 용이 (로드 밸런싱에 적합)
- 서버 장애 시 다른 서버가 쉽게 요청 처리 가능
- 캐싱에 유리함 (요청이 항상 동일한 구조)
- Scale Out에 적합하다 (갑자기 요청량이 증가하여도 서버를 증설하기가 쉽다.)
단점 :
- 클라이언트가 상태 정보를 계속 보내야 하므로 부담이 있을 수 있음
- 복잡한 상태 추적이 필요한 애플리케이션에는 부적합
한계점 :
- 로그인과 같이 상태를 유지해야하는 경우가 발생한다. (Cookie, Session, Token 등을 활용하여 극복 가능)
'CS' 카테고리의 다른 글
[CS] HTTP 지속 연결(Persistent Connection)의 등장 배경과 발전 (0) | 2025.05.07 |
---|---|
[CS] Connection & Connectionless (0) | 2025.05.06 |
[CS] 서버 성능 향상 전략: Scale Up과 Scale Out (0) | 2025.05.06 |
[CS] 웹 주소 체계: DNS, URI, URL, URN (0) | 2025.05.06 |
[CS] 포트(PORT) (0) | 2025.05.06 |