스테이트풀 vs. 스테이트리스 애플리케이션

URL 복사

애플리케이션을 비롯한 모든 항목의 상태란 특정 시점의 상황과 품질, 즉 존재 상태를 말합니다. 스테이트풀과 스테이트리스는 상호작용 상태가 얼마나 오래 기록되고 있는지, 해당 정보가 어떤 식으로 저장되어야 하는지를 기준으로 구별됩니다. 스테이트풀 애플리케이션은 사용자, 시스템 또는 구성 요소와의 상호작용에 대한 상태 또는 컨텍스트를 유지합니다. 이 상태는 내구성 있는 스토리지 솔루션에 유지되므로 애플리케이션을 다시 시작해도 유지됩니다. 스테이트풀 애플리케이션과 스테이트리스 애플리케이션의 주요 차이점은 스테이트풀 애플리케이션이 과거와 현재 정보를 저장하는 반면, 스테이트리스 애플리케이션은 그렇지 않다는 점입니다.

Red Hat OpenShift를 통한 애플리케이션 혁신

스테이트풀 애플리케이션 및 프로세스는 인터넷을 통해 이미 확립된 정보와 프로세스를 저장, 기록하고 다시 불러와 상태를 유지합니다. 스테이트풀 애플리케이션에서는 서버가 각 세션 또는 상호작용의 상태를 추적하고 사용자의 과거 요청을 기반으로 정보를 유지합니다. 이러한 세션은 온라인 뱅킹이나 이메일처럼 반복해서 사용할 수 있으며, 이전 트랜잭션의 컨텍스트를 통해 수행되므로 현재 트랜잭션은 이전 트랜잭션에서 발생한 내용의 영향을 받을 수 있습니다. 이러한 이유로 스테이트풀 애플리케이션은 사용자의 요청을 처리할 때마다 동일한 서버를 사용합니다. 

스테이트풀 트랜잭션이 중단되는 경우 컨텍스트와 이전 내용이 저장되므로 중단된 부분부터 다시 시작할 수 있습니다. 스테이트풀 애플리케이션은 창 위치, 기본 설정 사항, 최근 활동 등을 추적합니다. 스테이트풀 트랜잭션을 동일한 사람과 주기적으로 나누는 대화라고 생각할 수 있습니다.

스테이트풀 애플리케이션 활용 사례

  • 사용자 중심 애플리케이션: 소셜 미디어 애플리케이션과 전자 상거래 사이트 등 사용자 중심 애플리케이션은 로그인한 사용자의 환경 설정이나 장바구니 항목을 포함하여 해당 사용자의 세션을 추적합니다.
  • IoT 시스템:사물인터넷(IoT)은 피드백 루프에서 데이터를 지속적으로 전송, 수신, 분석합니다. 이러한 장치는 과거 데이터나 실시간 데이터를 기반으로 가정용 온도 조절 장치와 같이 시간에 따라 변화하는 상태에 대응합니다.
  • AI/ML 모델 학습: 인공지능 및 머신 러닝(AI/ML) 학습 모델은 데이터를 통해 학습하며 해당 데이터를 기억합니다. 학습 및 기억 상태가 유지되면 모델이 최대한의 성능을 발휘하는 데 도움이 됩니다.

RAG를 통해 스테이트풀 애플리케이션과 ML 모델의 연관성 알아보기

Red Hat 리소스

스테이트리스 애플리케이션 또는 프로세스는 사용자의 이전 상호작용에 관한 정보를 유지하지 않습니다. 그리고 과거 트랜잭션에 대해 저장하는 지식 또는 참조도 없습니다. 각 트랜잭션은 마치 처음부터 시작하는 것처럼 진행됩니다. 스테이트리스 애플리케이션은 하나의 서비스 또는 기능을 제공하고 Content Delivery Network(CDN, 콘텐츠 전달 네트워크), 웹 또는 프린트 서버를 사용하여 이러한 단기 요청을 처리합니다.

스테이트리스 트랜잭션의 예시로는 질문에 대한 답을 찾기 위해 온라인에서 검색하는 것을 들 수 있습니다. 검색 엔진에 질문을 입력한 뒤 Enter 키를 누릅니다. 트랜잭션이 의도치 않게 중단되거나 종료되어도 새로운 트랜잭션을 시작하면 됩니다. 스테이트리스 트랜잭션을 요청 하나에 응답 하나가 제공되는 자동판매기처럼 생각하면 됩니다.

스테이트리스 애플리케이션 활용 사례

  • REST API: REST 애플리케이션 프로그래밍 인터페이스(API)는 리소스 상태의 표현을 요청자나 엔드포인트로 전송합니다. 각 API 요청은 독립적이며, 서버는 이전 요청에 대한 정보를 저장하지 않습니다.
  • 마이크로서비스: 마이크로서비스는 애플리케이션 내의 핵심 기능이 독립적으로 존재하도록 합니다. 따라서 마이크로서비스는 스테이트리스 및 스테이트풀 애플리케이션 모두에 적합합니다.
  • 서버리스 아키텍처: 서버리스 아키텍처는 이벤트에 개별적으로 대응하도록 설계되며, 이전 작업의 컨텍스트를 유지하지 않기 때문에 상태를 유지 관리할 필요가 없습니다. 서버리스 아키텍처는 즉시 시작할 수 있는 비동기식, 스테이트리스 애플리케이션에 이상적입니다.

API가 애플리케이션을 지원하는 방법 알아보기

스테이트풀과 스테이트리스의 주된 차이점은 애플리케이션이 사용자 상호작용의 현재 상태에 대한 정보를 유지하는지 아니면 애플리케이션이 각 요청을 별도의 단일 트랜잭션으로 취급하는지 여부입니다. 그러나 다음과 같은 구체적인 차이점도 있습니다.

상태 유지

스테이트풀 애플리케이션은 상호작용에 대한 정보를 주로 데이터베이스나 분산형 메모리에 저장합니다. 스테이트리스 애플리케이션은 상호작용에 대한 정보를 저장하지 않으므로 트랜잭션을 다시 시작해야 합니다.

세션 종속성

스테이트풀 애플리케이션에서는 각 요청이 이전 상호작용 및 트랜잭션의 데이터나 컨텍스트에 따라 달라집니다. 스테이트리스 애플리케이션은 각 요청이 새로운 요청으로 취급되므로 더 독립적인 세션을 갖지만, 이는 애플리케이션이 요청을 처리하는 데 필요한 모든 정보를 가지고 있어야 한다는 것을 의미합니다.

스토리지 종속성

스테이트풀 애플리케이션에는 데이터베이스 및 분산형 파일 시스템과 같은 퍼시스턴트 스토리지가 필요합니다. 스테이트풀 애플리케이션은 기본 스토리지 솔루션에 의존해야 하며 인스턴스 간에 데이터를 동기화할 수 있는 체계가 필요합니다.

리소스 활용도

스테이트리스 애플리케이션은 세션 데이터를 저장하고 관리할 필요가 없으므로 리소스 활용도가 낮은 경우가 많습니다. 스테이트풀 애플리케이션은 스토리지 의존도가 높기 때문에 세션 정보를 처리하고 유지하는 데 더 많은 메모리와 처리 능력이 필요할 수 있습니다.

확장성

스테이트리스 애플리케이션의 경우 각 요청이 독립적이고 부하 분산을 사용하는 모든 사용 가능한 서버에서 처리될 수 있으므로 일반적으로 확장성이 더 좋습니다. 스테이트풀 애플리케이션의 경우 인스턴스가 긴밀하게 결합되어 있어 확장하기가 더 어렵습니다. 상태 관리, 부하 분산, 세션 관리를 위해 쿠버네티스에서 더욱 구체적인 인스턴스나 포드가 필요할 수 있습니다.

내결함성

스테이트리스 애플리케이션의 경우 서버의 손실이 사용자 세션에 영향을 미치지 않으므로 내결함성이 더 뛰어납니다. 스테이트풀 애플리케이션에서는 세션 복제나 클러스터링 같은 추가 조치가 마련되어 있지 않을 경우 서버의 손실이 세션 데이터의 손실로 이어질 수 있습니다.

개발 복잡성

스테이트리스 애플리케이션의 경우 여러 요청의 상태를 관리할 필요가 없으므로 개발과 유지 관리가 더 간편합니다. 스테이트풀 애플리케이션은 세션 데이터와 상태 관리를 신중하게 처리해야 합니다.

우리가 일상에서 사용하는 애플리케이션의 대다수가 스테이트풀입니다. 그러나 기술의 발전에 따라 마이크로서비스와 컨테이너를 통해 클라우드에서 애플리케이션을 더 쉽게 빌드하고 배포할 수 있게 되었습니다.

클라우드 컴퓨팅과 마이크로서비스의 인기가 높아지면서 스테이트풀이든 스테이트리스이든 애플리케이션 컨테이너화의 인기도 높아졌습니다. 컨테이너는 애플리케이션 코드를 라이브러리 및 종속성과 함께 패키징하는 단위입니다. 컨테이너화된 애플리케이션은 쉽게 이동할 수 있으며 데스크톱, 기존 IT 인프라, 클라우드 등 어느 환경에서든지 실행할 수 있습니다.

이식성과 유연성이 좋은 컨테이너는 원래 스테이트리스로 개발되었습니다. 그러나 컨테이너 사용이 크게 늘면서 사람들은 기존 스테이트풀 애플리케이션을 컨테이너화(컨테이너에서 실행할 목적으로 재설계 및 재패키징)하기 시작했습니다. 그 결과 컨테이너 사용의 유연성과 속도를 확보하면서 동시에 스테이트풀의 스토리지와 컨텍스트를 이용할 수 있게 되었습니다.

이러한 이유로 스테이트풀 애플리케이션이 스테이트리스 애플리케이션과 매우 유사하게 보일 수 있으며 그 반대의 경우도 마찬가지입니다. 장기 스토리지가 필요 없는 스테이트리스 애플리케이션이면서도 서버가 쿠키를 사용하여 동일한 클라이언트에서 비롯된 요청을 추적할 수 있는 경우가 그 예시입니다.

컨테이너가 대중화되면서 기업들은 데이터 스토리지, 쿠버네티스, StatefulSet를 사용하여 스테이트리스 컨테이너와 스테이트풀 컨테이너를 모두 관리하는 방법을 제공하기 시작했습니다. 스테이트풀은 컨테이너 스토리지의 주요 부분이며, 이제는 스테이트풀 컨테이너를 사용할지 여부가 아니라 언제 사용할지가 중요한 문제가 되었습니다.

스테이트풀과 스테이트리스 애플리케이션 모두 Red Hat이 지원합니다. Red Hat의 하이브리드 클라우드 애플리케이션 플랫폼인 Red Hat® OpenShift®에서 스테이트풀 컨테이너를 오케스트레이션하든, Red Hat Application Foundations를 통해 애플리케이션 개발을 위한 통합 환경을 구축하든, 권위 있는 어워드를 수상한 Red Hat의 지원과 파트너 에코시스템으로 뒷받침합니다.

Red Hat OpenShift는 보안 중심의 통합 하이브리드 클라우드 애플리케이션 플랫폼을 제공하여 조직이 애플리케이션 개발 및 배포와 운영 프로세스를 현대화함으로써 혁신을 가속화하도록 지원합니다. Red Hat OpenShift는 쿠버네티스 StatefulSet와 같은 스테이트풀 애플리케이션을 지원하는 기능을 제공합니다. Red Hat OpenShift Data Foundation을 활용하면 소프트웨어 정의 스토리지를 제공하고 퍼시스턴트 볼륨을 프로비저닝하는 데 도움이 되는 스토리지 솔루션으로 스테이트풀 데이터를 관리할 수 있습니다. 또한 Red Hat OpenShift는 스테이트풀 애플리케이션을 DevOps 워크플로우에 통합합니다. Red Hat OpenShift PipelinesCI/CD 파이프라인의 각 단계를 실행하도록 설계되어 스테이트풀 워크로드의 테스트 및 배포를 스테이트리스 워크로드와 함께 지원합니다.

Red Hat Application Foundations는 서비스 구성 및 오케스트레이션, 애플리케이션 연결 및 데이터 트랜스포메이션, 실시간 메시지 스트리밍변경 데이터 캡처API 관리 기능을 모두 클라우드 네이티브 플랫폼 및 툴체인과 결합하여 현대적인 애플리케이션 개발 전체 과정을 지원합니다.

Red Hat OpenShift와 Red Hat Application Foundations를 함께 사용하면 클라우드 네이티브 애플리케이션 개발과 제공에 이상적인 플랫폼을 확보하게 됩니다. 요구 사항이 무엇이든 Red Hat 제품은 오픈소스 방식으로 솔루션을 구축하고 개발자 생산성을 개선하며 혁신을 촉진할 수 있도록 지원합니다.

Red Hat OpenShift의 애플리케이션 지원 방식 알아보기

허브

레드햇 공식 블로그

레드햇 공식 블로그에서 고객, 파트너, 커뮤니티 에코시스템 등 현재 화제가 되는 최신 정보를 살펴 보세요.

모든 Red Hat 제품 체험판

무료 제품 체험판을 통해 핸즈온 경험을 얻고, 자격증 시험에 대비하거나 해당 제품이 조직에 적합한지 평가할 수 있습니다.

추가 자료

애플리케이션 마이그레이션이란?

애플리케이션 마이그레이션은 애플리케이션을 환경 간에 이동하여 워크로드를 개선할 수 있는 프로세스입니다.

플랫폼 엔지니어를 위한 Red Hat OpenShift

Red Hat OpenShift는 플랫폼 엔지니어링 팀에 내부 개발자 플랫폼을 효과적으로 구축하고 관리하는 데 필요한 툴을 제공합니다.

서버리스(serverless)란?

서버리스(serverless)란 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델입니다.

애플리케이션 개발과 제공 리소스

관련 기사