
무상태(Stateless) 특성은 RESTful API의 특징 중 하나이다. 서버의 확장성과 성능을 향상시켜주고 서버와 클라이언트 간의 "독립성"을 유지시켜준다는데 당최 무슨 소리인지 이해가 잘 안돼 더 찾아보았다.
온라인으로 판매하는 전자상거래 웹 사이트를 운영해야 한다고 가정해보자.
이 웹 사이트는 사용자가 로그인한 상태에서 주문을 생성하고 관리할 수 있어야 한다.
무상태가 아닌(Stateful) 서비스로 구현한 경우, 사용자 로그인 정보와 주문 상태 정보를 서버에서 유지해야 한다. 예를 들어, 사용자 A가 로그인하고 장바구니에 제품을 추가하면, 서버는 사용자 A와 관련된 정보를 저장하고 상태를 유지해야 한다.
이런 방식으로 상태를 유지하다 보면 서버는 확장이 어려워진다. 이유는 모든 사용자의 상태 정보를 서버 메모리에 저장하고 유지해야 하기 때문이다. 사용자가 증가하면 서버의 메모리 사용량도 증가하며, 서버를 확장하기 위해서는 많은 자원이 투입되어야 한다고 한다.
반면에, 무상태(Stateless) 서비스로 구현한 경우, 서버는 각 클라이언트 요청을 별도로 처리하고 상태 정보를 유지하지 않아도 된다. 이렇게 되면 아래와 같은 이점들이 따라온다.
서버는 각 요청을 독립적으로 처리하므로 여러 서버 인스턴스를 사용하여 부하를 분산할 수 있게 된다. 즉, 서버를 쉽게 확장하여 높은 트래픽을 처리할 수 있는 것이다.
상태를 관리하지 않으므로 서버가 더 빠르게 응답할 수 있다. 각 요청을 처리하는 데 필요한 자원을 최소화하므로 더 많은 요청을 동시에 처리할 수 있다.
무상태 서비스의 경우, 서버의 장애가 발생해도 다른 서버로 요청을 라우팅하여 서비스를 계속 제공할 수 있다.
무상태 서비스는 각 요청이 독립적이기 때문에 새로운 서버가 무리 없이 추가될 수 있기 때문에 새로운 서버 및 인스턴스를 추가하거나 업그레이드하기가 더 쉬워진다.
이처럼 무상태 특성은 서버의 확장성과 성능을 향상시키는데 도움을 준다. 서버가 각 요청을 독립적으로 처리하고 상태를 따로 관리하지 않아도 되므로 서버를 관리하는 효율적으로 확장하고 더 빠른 응답 시간을 제공한다. 이는 대규모 웹 서비스 및 분산 시스템에서 중요한 원칙 중 하나이다.