stateful 와 stateless

허성재's avatar
Aug 21, 2024
stateful 와 stateless
StatefulStateless는 컴퓨팅과 네트워크 통신에서 중요한 개념입니다. 이 두 가지 개념은 특히 HTTP 프로토콜, 웹 애플리케이션 설계, 그리고 서버 간의 통신에서 중요한 역할을 합니다.

Stateless (무상태)

Stateless 시스템은 클라이언트와 서버 간의 각 요청이 독립적으로 처리되는 방식입니다. 즉, 서버는 각 요청을 완전히 독립적인 것으로 취급하며, 이전 요청에 대한 정보를 유지하지 않습니다.
  • HTTP 프로토콜: HTTP는 기본적으로 Stateless 프로토콜입니다. 즉, 클라이언트가 서버에 요청을 보낼 때마다 서버는 이 요청이 처음인 것처럼 처리합니다. 서버는 이전 요청이나 세션에 대한 정보를 기억하지 않습니다.
  • 장점:
    • 확장성: 요청 간의 상태를 저장할 필요가 없기 때문에 서버는 더 쉽게 확장될 수 있습니다. 요청이 증가해도 서버는 각 요청을 개별적으로 처리할 수 있습니다.
    • 단순성: 상태를 유지하지 않기 때문에, 설계가 단순하며 서버 간의 부하 분산도 더 쉽게 구현할 수 있습니다.
  • 단점:
    • 상태 유지의 어려움: 상태를 유지해야 하는 애플리케이션에서는 별도의 메커니즘(예: 쿠키, 세션, 토큰 등)을 사용하여 상태를 유지해야 합니다.
예제: 웹 브라우저가 서버에 페이지를 요청할 때마다 서버는 그 요청을 독립적인 것으로 처리합니다. 만약 클라이언트가 로그인한 상태를 유지하고 싶다면, 서버는 로그인 상태를 기억하기 위해 쿠키나 세션 토큰을 사용해야 합니다.

Stateful (상태 유지)

Stateful 시스템에서는 클라이언트와 서버 간의 연속적인 요청이 연결된 상태로 처리됩니다. 즉, 서버는 클라이언트의 이전 요청에 대한 정보를 기억하고, 이후의 요청을 이 정보에 따라 다르게 처리할 수 있습니다.
  • 상태 유지: Stateful 시스템에서 서버는 클라이언트와의 상호작용 중 발생한 상태 정보를 기억합니다. 이 상태는 서버 메모리에 저장되거나, 데이터베이스와 같은 영구 저장소에 저장될 수 있습니다.
  • 장점:
    • 연속성: 서버가 클라이언트의 상태를 기억하므로, 복잡한 트랜잭션이나 다단계 프로세스에서 유용합니다. 예를 들어, 은행 애플리케이션에서 사용자가 여러 단계를 거쳐 트랜잭션을 완료하는 경우, 서버는 이 상태를 유지하여 일관된 사용자 경험을 제공합니다.
  • 단점:
    • 확장성 문제: 상태 정보를 유지하기 때문에 서버에 부하가 커질 수 있습니다. 서버가 다운되거나 요청이 분산될 경우 상태 정보를 유지하는 것이 복잡해질 수 있습니다.
    • 복잡성: 상태 관리 로직을 추가해야 하므로 시스템이 복잡해질 수 있습니다.
예제: 온라인 쇼핑몰에서 사용자가 쇼핑 카트에 상품을 추가하고, 결제 프로세스를 진행하는 경우 서버는 사용자의 쇼핑 카트 상태를 기억해야 합니다. 이 상태는 사용자가 페이지를 이동하거나 새로 고침을 하더라도 유지되어야 합니다.

HTTP에서 Stateless의 의미

HTTP는 기본적으로 Stateless 프로토콜로 설계되었습니다. 이는 각 HTTP 요청이 독립적으로 처리된다는 의미입니다. 예를 들어, 클라이언트가 서버에 GET 요청을 보내고, 이어서 다른 POST 요청을 보내더라도, 서버는 이 두 요청이 연관되었다고 인식하지 않습니다. 따라서, 웹 애플리케이션이 사용자 상태를 유지하기 위해서는 쿠키, 세션, 토큰, 또는 URL 매개변수 등을 사용해야 합니다.

Stateful과 Stateless의 선택

  • Stateless: API 설계나 클라우드 기반의 웹 애플리케이션에서는 주로 Stateless 방식이 선호됩니다. 이는 확장성과 유지보수의 용이성 때문에 선택됩니다. 예를 들어, RESTful API는 Stateless 원칙에 따라 설계됩니다.
  • Stateful: 금융 애플리케이션이나 온라인 게임과 같이 사용자의 상태가 중요한 경우 Stateful 방식이 더 적합합니다. 사용자의 세션 상태를 유지하거나, 트랜잭션을 관리해야 하는 경우에 사용됩니다.

결론

StatelessStateful의 차이는 서버가 요청 간에 상태를 유지하는지 여부에 따라 결정됩니다. HTTP는 기본적으로 Stateless 프로토콜이지만, 실무에서는 쿠키, 세션, 토큰과 같은 메커니즘을 통해 상태를 유지하는 방식이 자주 사용됩니다. 각 방식은 사용 사례에 따라 장단점이 있으며, 시스템의 요구사항에 따라 적절한 방식을 선택해야 합니다.
Share article

heo-gom