본문 바로가기

CS

[CS] 서버 상태 관리의 두 방식: Stateless와 Stateful

 

 


 

 

 

Stateful (상태 유지)

정의 : 클라이언트의 이전 상태(로그인 여부, 장바구니 정보 등)를 서버가 기억합니다.

 

예시 : 수강 신청 예

  • 수강생 : 수강 신청합니다. → 상담원 : 어떤 과목이요? (상태 유지)
  • 수강생 : 백엔드입니다. → 상담원 : 어떤 백엔드인가요? (상태 유지)
  • 수강생 : Spring입니다. → 상담원 : 신청이 완료되었습니다. (상태 유지)

   ✨ 상담원은 수강생의 요청들을 기억(상태 유지)하여 다음 질문들에 대한 처리가 가능하다.

 

특징 :

  • 서버가 클라이언트별 상태를 유지
  • 클라이언트와의 연결이 지속되거나 세션이 유지됨

 

장점 :

  • 사용자 맞춤 서비스 제공 가능 (예: 로그인 상태 유지, 장바구니 유지 등)

 

단점 :

  • 확장성 및 장애 대응이 어려움 (특정 서버에 상태가 묶임)
  • 항상 같은 서버가 유지되어야 함 (중간에 서버가 바뀌면 클라이언트의 이전 요청 상태가 없어짐)
  • 분산 환경에서 세션 동기화가 필요함
  • 요청 트래픽이 몰리게 되면, 상태 유지를 위해 리소스 소모가 많을 수 있음 (세션 메모리 등)
    • 리소스가 버티지 못하면 서버가 종료되거나, 다음 요청에 대한 처리가 느려진다.

 

 

 


 

 

 

Stateless (무상태)

정의 : 클라이언트의 이전 요청 상태를 저장하지 않습니다.

 

예시 : 수강 신청 예

  • 수강생 : 수강 신청합니다. → 상담원 : 어떤 과목이요?
  • 수강생 : 백엔드입니다. → 상담원 : 무엇을 도와드릴까요?
  • 수강생 : Spring입니다. → 상담원 : 무엇을 도와드릴까요?

   ✨ 상담원은 수강생의 요청들을 기억하지 못한다. 다음과 같이 수강생의 요청을 처리할 수 있습니다.

 

stateless 실제 요청 방식 : 수강 신청 예

  • 수강생 : 수강 신청합니다. → 상담원 : 어떤 과목이요?
  • 수강생 : 수강 신청합니다. 백엔드입니다. → 상담원 : 어떤 백엔드인가요?
  • 수강생 : 수강 신청합니다. 백엔드입니다. Spring입니다. → 상담원 : 신청이 완료되었습니다.

   ✨ 이렇게 되면, 중간에 상담원(서버)이 바뀌더라도 신청할 수 있게됩니다.

 

특징 :

  • 서버는 클라이언트에 대한 정보를 기억하지 않음
  • 확장성과 유지보수성이 좋음
  • 복잡한 상태 관리가 필요하지 않아 단순함

 

 

장점 :

  • 서버 확장 용이 (로드 밸런싱에 적합)
  • 서버 장애 시 다른 서버가 쉽게 요청 처리 가능
  • 캐싱에 유리함 (요청이 항상 동일한 구조)
  • Scale Out에 적합하다 (갑자기 요청량이 증가하여도 서버를 증설하기가 쉽다.)

 

 

단점 :

  • 클라이언트가 상태 정보를 계속 보내야 하므로 부담이 있을 수 있음
  • 복잡한 상태 추적이 필요한 애플리케이션에는 부적합

 

한계점 :

  • 로그인과 같이 상태를 유지해야하는 경우가 발생한다. (Cookie, Session, Token 등을 활용하여 극복 가능)