애플리케이션을 비롯한 모든 항목의 상태(state)란 해당 시점의 상황과 품질, 즉 존재 상태를 말한다. 스테이트풀(Stateful)과 스테이트리스(Stateless)는 상호 작용 상태가 얼마나 오래 기록 되는지, 해당 정보가 어떤 식으로 저장되는지를 기준으로 구별할 수 있다.
Stateless
스테이트리스 프로세스 또는 애플리케이션은 격리된 것으로 간주된다. 과거 트랜잭션에 대한 정보 또는 참조가 저장되지 않기 때문이다. 각 트랜잭션은 모두 처음부터 시작된다. 스테이트리스 애플리케이션은 하나의 서비스 또는 기능을 제공하며, 컨텐츠 전달 네트워크(CDN), 웹, 프린트 서버를 사용해 이러한 단기 요청을 처리한다.
이러한 스테이트리스 트랜잭션의 가장 일반적인 예시는 검색창에 질문을 입력하고 엔터키를 누르는 형식으로 진행되는 온라인 검색이다. 트랜잭션이 우발적으로 중단되거나 종료되면 새롭게 시작하면 된다. 스테이트리스 트랜잭션은 단일 요청에 대해 하나의 응답이 나오므로, 자동 판매기와 비슷하다.
Stateless는 클라이언트A에서 필요한 상태를 요청 데이터에 모두 포함하여 전달한다.
서버1은 이에 대한 상태를 보관하지 않는다.
그러다보니 서버1에서 문제가 발생된다고 하여도, 어차피 클라이언트A에서 필요한 상태를 모두 전달하기 때문에 다른 서버인 서버2와 통신한다고 하더라도 큰 문제 없이 통신이 가능하다.
Stateful
이에 반해, 스테이트풀 애플리케이션과 프로세스는 온라인 뱅킹이나 이메일처럼 여러 번 반환될 수 있다. 스테이트풀은 이전 트랜잭션의 컨텍스트에 따라 수행되며, 현재 트랜잭션이 이전 트랜잭션에게 발생한 상황에 영향을 받는다. 이러한 이유로 스테이트풀 애플리케이션은 사용자에게 받은 요청을 처리할 때마다 같은 서버를 이용한다.
스테이트풀 트랜잭션은 컨텍스트와 내역이 저장되므로 중단되어도 중단된 곳부터 다시 시작할 수 있다. 스테이트풀 애플리케이션은 창의 위치, 기본 설정 구성, 최근 활동과 같은 항목을 추적한다. 스테이트풀 트랜잭션은 같은 사람과 주기적으로 지속하는 대화와 비슷하다.
오늘날 우리가 사용하고 있는 대부분의 애플리케이션은 스테이트풀이지만, 기술이 발전함에 따라 마이크로서비스와 컨테이너를 통해 클라우드에서 더욱 쉽게 애플리케이션을 구축하고 배포할 수 있게 되었다.
클라이언트A가 서버1에게 노트북을 2개 구매한다는 데이터를 전달한 상황이라고 가정하자.
이때 서버1에 문제가 발생한다면 어떻게 될까?
위 그림과 같이 서버1에서 보관하고 있던 클라이언트A의 상태를 사용하지 못하므로 클라이언트A는 다른 서버에 처음부터 다시 상태 관련 정보를 전달해야 한다.
#References
https://www.redhat.com/ko/topics/cloud-native-apps/stateful-vs-stateless
'Server' 카테고리의 다른 글
GitHub Actions를 활용한 React 애플리케이션의 EC2 배포 (0) | 2024.08.09 |
---|---|
GitHub Actions + Docker로 CI환경 구축 (0) | 2024.07.13 |
Karaf에 대해 (0) | 2022.07.16 |
온프레미스(On-premise)란? (0) | 2022.05.01 |
AWS EC2 서버에 Nginx를 이용해 Vue 배포하기 (0) | 2022.04.25 |