오늘은 어플리케이션의 상태와 관련이 있는 Stateless 와 Stateful application 의 차이점에 대해 알아보고자 한다.
레드헷 문서를 기반으로 글을 작성해 보았다.
Stateless
stateless 프로세스 또는 애플리케이션은 격리된 것으로 간주됩니다. 과거 트랜잭션에 대한 정보 또는 참조가 저장되지 않기 때문입니다. 각 트랜잭션은 모두 처음부터 시작됩니다. 스테이트리스 애플리케이션은 하나의 서비스 또는 기능을 제공하며, 콘텐츠 전달 네트워크(CDN), 웹, 프린트 서버를 사용해 이러한 단기 요청을 처리합니다.
이러한 스테이트리스 트랜잭션의 가장 일반적인 예시는 검색창에 질문을 입력하고 엔터키를 누르는 형식으로 진행되는 온라인 검색입니다. 트랜잭션이 우발적으로 중단되거나 종료되면 새롭게 시작하면 됩니다. 스테이트리스 트랜잭션은 단일 요청에 대해 하나의 응답이 나오므로, 자동판매기와 비슷합니다.
클라이언트가 자신의 상태정보를 가지고 있지 않음.
즉, 클라이언트와 첫번째 통신에서 데이터를 주고 받았어도, 이 통신이 끊어지고 두번째 접속 했을 때는 이전 데이터를 유지하지는 않는다.
그러나 로그인 정보나 장바구니 같은 기능을 이용할 때 클라이언트가 정보를 가져야 더 편한경우가 있을 수 있다. 이런경우 쿠키나 세션을 사용한다.
쿠키와 세션에 관한 내용은 아래의 글을 참조하기 바란다.
[Network] - [Network] HTTP Cookies, Session, Cache
Stateful
stateful 애플리케이션과 프로세스는 온라인 뱅킹이나 이메일처럼 여러 번 반환될 수 있습니다. 스테이트풀은 이전 트랜잭션의 컨텍스트에 따라 수행되며, 현재 트랜잭션이 이전 트랜잭션에서 발생한 상황에 영향을 받습니다. 이러한 이유로 스테이트풀 애플리케이션은 사용자에게 받은 요청을 처리할 때마다 같은 서버를 사용합니다.
스테이트풀 트랜잭션은 컨텍스트와 내역이 저장되므로 중단되어도 중단된 곳부터 다시 시작할 수 있습니다. 스테이트풀 애플리케이션은 창의 위치, 기본 설정 구성, 최근 활동과 같은 항목을 추적합니다. 스테이트풀 트랜잭션은 같은 사람과 주기적으로 지속하는 대화와 비슷합니다.
오늘날 우리가 사용하고 있는 대부분의 애플리케이션은 스테이트풀이지만, 기술이 발전함에 따라 마이크로서비스와 컨테이너를 통해 클라우드에서 더욱 쉽게 애플리케이션을 구축하고 배포할 수 있게 되었습니다.
클라이언트가 자신의 이전상태를 가지고 잇음
이 방식은 TCP, Socket, Message Queue 방식에 적합하다.
컨테이너와 상태(state)
클라우드 컴퓨팅과 마이크로서비스의 인기가 높아지면서, 스테이트풀이든 스테이트리스든 상관없이 애플리케이션의 컨테이너화도 그 인기가 높아지고 있습니다. 컨테이너는 라이브러리 및 종속성과 함께 패키징되는 애플리케이션의 코드 유닛이므로 손쉽게 이동할 수 있으며 데스크톱, 기존 IT 인프라, 클라우드를 비롯한 어떤 환경에서든 실행 가능합니다.
원래 컨테이너는 이식성이 높고 유연하다는 특성으로 인해 스테이트리스로 구축되었으나, 컨테이너의 사용이 확산됨에 따라 사용자들이 기존 스테이트풀 애플리케이션을 컨테이너화(컨테이너에서 실행하기 위해 재설계 및 재패키징)하기 시작했습니다. 이러한 방식으로 스테이트풀 상태의 저장 방식과 컨텍스트를 유지하면서도, 컨테이너의 유연성과 빠른 속도를 활용할 수 있었기 때문입니다.
이로 인해 스테이트풀 및 스테이트리스 애플리케이션의 경계가 크게 허물어졌습니다. 예를 들어, 장기간 저장이 필요하지 않은 스테이트리스 애플리케이션이지만, 서버가 쿠키를 사용해 동일한 클라이언트에서 받은 요청을 추적하도록 할 수 있습니다.
스테이트풀 또는 스테이트리스 컨테이너 중 무엇을 사용해야 하는지는 빌드 중인 애플리케이션의 종류와 필요에 따라 달라집니다. 정보를 일시적으로 신속하게 사용해야 하는 경우에는 스테이트리스를 선택하고, 한 세션에서 다음 세션으로 넘어갈 때 애플리케이션에서 더 많은 메모리를 필요로 하는 경우에는 스테이트풀을 선택합니다.
Reference
www.redhat.com/ko/topics/cloud-native-apps/stateful-vs-stateless
'Cloud' 카테고리의 다른 글
[Cloud] Virtual Machine vs Serverless Computing vs Container (0) | 2021.01.17 |
---|