
Stateful과 Stateless의 기본적인 개념
Stateful
Stateful은 상태유지 즉, 상태를 저장하고 의미합니다.
클라이언트의 상태 정보를 서버가 저장하고 관리합니다.
이를 통해서 클라이언트와 서버간의 상호작용이 이전 상태를 기반으로 이루어 질 수 있습니다.
그래서 더 복잡한 상호작용이 가능하다는 장점이 있습니다.
장점
1. 사용자 경험을 향상 시킬 수 있습니다.
2. 상태 정보를 기반으로 사용자 맞춤형 서비스를 제공할 수 있습니다.
3. 요청마다 모든 정보를 포함 시킬 필요가 없어서 네트워크 효율이 높아집니다.
단점
서버가 클라이언트의 상태를 유지하고 관리해야하므로
1. 서버의 복잡성과 리소스 요구량이 증가합니다.
2. 서버의 확장성에 제한이 있습니다.
Stateless
Stateless는 상태정보를 저장하지 않는다는것을 의미합니다.
Stateless 시스템에서는 각 요청이 독립적으로 처리가 됩니다.
따라서, 각 요청은 필요한 모든 정보를 포함해야 하고, 서버는 요청 사이에 클라이언트의 상태 정보를 유지하지 않습니다.
위와 같은 특징으로 인해서 생기는 장점은 간단하고 예측 가능하다는 점입니다.
장점
서버가 상태를 유지할 필요가 없으니 장점으로는 아래와 같습니다.
1. 확장성이 높아집니다.
2. 서버간의 요청을 쉽게 분산시킬 수 있습니다.
단점
단점으로는 각 요청이 모든 정보를 포함해야해서 발생하는데
1. 데이터 중복문제
2.네트워크 대역폭을 더 사용하는 문제가 있습니다.
Stateful과 Stateless의 실제 예시
Stateless 서비스 예시: HTTP 웹 서비스
HTTP 프로토콜은 기본적으로 stateless 구조를 가집니다. 웹 서버는 클라이언트의 요청을 처리하고 응답을 보내지만, 그 요청 사이에 클라이언트의 상태를 저장하지 않습니다. 예를 들어, 웹 사이트에 접속하여 페이지를 요청할 때마다, 서버는 각 요청을 독립적으로 처리하며 이전 요청에 대한 정보를 유지하지 않습니다. 이런 특성 때문에 HTTP 웹 서비스는 대표적인 stateless 서비스 예시로 볼 수 있습니다.
또한, RESTful API의 핵심 원칙도 Stateless 이다.
REST는 HTTP 프로토콜 상에 구현된 Resource Oriented Architecture (ROA) 설계 구조 이다.
따라서 HTTP와 REST 모두 Stateless한 성격을 가진 녀석들이며,
1. HTTP는 Statelss한 성격을 가진 '프로토콜'
2. REST는 Stateless한 성격을 가진 '설계 구조'
출처: https://inpa.tistory.com/entry/WEB-📚-Stateful-Stateless-정리# [Inpa Dev 👨💻:티스토리]
Stateful 서비스 예시: 온라인 쇼핑몰
온라인 쇼핑몰은 사용자의 로그인 상태, 장바구니, 구매 이력 등을 유지하며 사용자에게 맞춤형 서비스를 제공하는 대표적인 stateful 서비스입니다. 사용자가 로그인을 하면, 서버는 사용자의 세션을 생성하여 사용자가 로그아웃하거나 세션이 만료될 때까지 사용자의 상태 정보를 유지합니다. 사용자가 상품을 장바구니에 추가하거나 구매할 때, 이러한 정보는 서버에 저장되어 상태 정보로 관리됩니다. 이처럼 사용자의 상태를 계속해서 추적하고 관리하는 서비스는 stateful 서비스에 속합니다.
또한, 트랜잭션 처리에서 데이터베이스는 변경 사항을 추적하고, 트랜잭션이 완료될 때까지 일관된 상태를 유지해야 합니다. 이는 데이터의 일관성과 정확성을 보장하는 stateful 작업의 예시입니다.
개발자 관점에서의 Stateful과 Stateless의 중요 포인트
Stateless 서비스의 확장성
Stateless 구조는 서버가 사용자의 상태를 저장하지 않기 때문에, 요청이 어떤 서버에 의해 처리되어도 상관없습니다. 이는 서비스의 확장성을 높이는 데 큰 장점이 됩니다. 로드 밸런서를 사용하여 요청을 여러 서버에 분산시킬 수 있고, 서비스의 부하에 따라 동적으로 서버를 추가하거나 제거하는 것이 용이합니다.
Stateful 서비스의 사용자 경험
Stateful 구조는 사용자의 상태 정보를 유지하므로, 사용자에게 보다 풍부하고 개인화된 경험을 제공할 수 있습니다. 예를 들어, 사용자의 구매 선호도에 따라 맞춤형 상품을 추천하거나, 사용자의 장바구니를 다양한 기기에서 동기화하여 접근할 수 있도록 하는 것이 가능합니다.
관리 및 운영의 복잡성
Stateful 서비스는 상태 정보를 관리해야 하므로, 상태 정보의 일관성을 유지하고, 데이터베이스와의 통신, 세션 관리 등 추가적인 관리 작업이 필요합니다. 이는 서비스의 복잡성을 증가시키며, 상태 정보를 안전하게 보호하고 유지하기 위한 추가적인 보안 조치가 필요할 수 있습니다.
개발자로서 서비스를 설계할 때는 이러한 특성을 고려하여, 서비스의 목적과 요구 사항에 맞는 구조를 선택하는 것이 중요합니다.
Stateless 와 토큰(Token)
로그인 유지와 같은 상태는 stateful 하게 사용해야하는데, 그런 경우에는 서버의 부하가 반드시 발생하게 된다.
이를 해결하고자 Stateless한 특징을 유지하면서도 로그인 상태 유지를 가능하게 하는 기술이 토큰 기술입니다.
Stateless 아키텍처와 토큰은 웹 서비스에서 사용자 인증과 세션 관리를 효율적으로 처리하는 데 중요한 관계를 가집니다.
Stateless 아키텍처에서는 서버가 사용자의 상태(예: 로그인 상태)를 저장하지 않습니다.
토큰 기반 인증 시스템의 작동 원리
1. 사용자 로그인: 사용자가 로그인 정보(예: 사용자명과 비밀번호)를 제공합니다.
2. 토큰 발급: 서버는 사용자의 인증 정보를 검증한 후, 유효하다면 암호화된 토큰(예: JWT, JSON Web Token)을 발급합니다. 이 토큰에는 사용자 식별 정보, 발급자, 유효 기간 등의 정보가 포함됩니다.
3. 토큰 전송: 발급된 토큰은 사용자에게 전송되며, 사용자는 이후의 요청에서 이 토큰을 서버에 제공합니다.
4. 토큰 검증: 서버는 사용자 요청에 포함된 토큰을 검증하여 사용자를 인증합니다. 유효한 토큰이면 요청을 처리하고, 그렇지 않으면 오류를 반환합니다.
Stateless 아키텍처와 토큰의 관계
토큰 기반 인증과 stateless 아키텍처 간의 관계를 더 자세히 봐도 좋을것 같습니다. 이 관계는 웹 서비스의 확장성, 보안성, 그리고 유지 관리의 용이성 측면에서 중요한 역할을 합니다.
인증 상태의 클라이언트 측 관리
서버의 부담 감소: Stateless 아키텍처에서 토큰은 클라이언트에 의해 저장되고 관리됩니다. 이는 서버가 각 사용자의 인증 상태를 유지할 필요가 없으므로, 서버의 메모리와 리소스 부담을 크게 줄여줍니다. 결과적으로, 서비스의 확장성이 향상됩니다.
상태 정보의 캡슐화
토큰 내 상태 정보 포함 : 토큰(예: JWT)은 사용자의 인증 정보, 권한, 사용자 설정 등의 상태 정보를 암호화된 형태로 포함할 수 있습니다. 서버는 토큰을 받아 해독하고 검증함으로써, 해당 요청이 유효한지 판단할 수 있습니다. 이 과정에서 서버가 별도로 사용자의 상태를 저장하거나 조회할 필요가 없습니다.
토큰의 보안성과 유효기간 관리
보안 메커니즘: 토큰은 서명되고 암호화될 수 있어, 데이터의 무결성과 기밀성을 보장합니다. 이는 중간에 데이터가 탈취되거나 변조되는 것을 방지합니다.
유효기간 관리: 토큰에는 유효기간이 설정됩니다. 유효 기간이 지난 토큰은 자동으로 무효화되어, 장기간 동안 유효한 인증 정보가 남아있어 발생할 수 있는 보안 위험을 줄여줍니다.
서비스의 유연성 증가
다양한 클라이언트 지원 : 토큰 기반 인증은 HTTP 헤더를 통해 이루어지기 때문에, 웹, 모바일, 데스크톱 등 다양한 플랫폼의 클라이언트에서 쉽게 구현할 수 있습니다. 이는 서비스를 다양한 환경에서 이용할 수 있게 하며, 개발자들이 다양한 클라이언트 애플리케이션을 더 쉽게 개발할 수 있도록 합니다.
결론으로 말하자면,
Stateless 아키텍처와 토큰 기반 인증 시스템의 결합은 웹 서비스의 확장성, 보안성, 그리고 관리의 용이성을 크게 향상시킵니다. 이러한 시스템은 사용자 인증 정보를 안전하게 관리하면서도, 서버의 리소스를 효율적으로 사용할 수 있게 해, 대규모 분산 시스템에서 특히 유용합니다.
참고 문헌
🌐 아주 쉽게 이해하는 Stateful / Stateless 차이
Stateful 과 Stateless 차이점 웹 공부를 하다보면 클라이언트(Client)와 서버(Server)간의 통신을 상태유지(Stateful) 하느냐, 상태유지하지않음(Stateless) 으로 하느냐 라는 말귀를 한번쯤은 들어본 적이 있
inpa.tistory.com
JWT (JSON Web Token) 이해하기와 활용 방안 - Opennaru, Inc.
JWT 는 JSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON입니다.JWT는 속성 정보 (Claim)를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준 입니다.
www.opennaru.com
'CS 지식 > CS기본' 카테고리의 다른 글
오픈소스 라이센스 한눈에 보기: GPL, MIT, Apache 등 주요 라이스 비교 (0) | 2024.08.18 |
---|
개발 및 IT 관련 포스팅을 작성 하는 블로그입니다.
IT 기술 및 개인 개발에 대한 내용을 작성하는 블로그입니다. 많은 분들과 소통하며 의견을 나누고 싶습니다.