Xstate 상태머신

joyoung·2025년 3월 3일

XState와 상태 머신(Finite State Machine)

XState란

XState는 JavaScript 및 TypeScript에서 유한 상태 기계(Finite State Machine)와 상태 차트(Statecharts)를 기반으로 동작하는 상태 관리 라이브러리
복잡한 애플리케이션 상태를 체계적이고 예측 가능하게 관리하기 위해 만들어졌으며, 선언형 방식으로 상태를 정의함

  • 개발자: David Khourshid
  • 특징: 선언형 상태 관리, 시각화, 타입 안정성, UI 상태 제어에 유리

도입 목적

  • 상태 관리 복잡성 해소
    기존 상태 관리 도구(Redux, Context API 등)는 상태 전이와 부작용 관리가 점점 어려워짐
    → XState는 전이와 상태를 명확하게 설계할 수 있도록 돕는 모델 제공

  • 형식적 모델링 필요성
    소프트웨어 시스템의 행동을 수학적으로 모델링하는 FSM(Finite State Machine)을 프론트엔드에 도입

  • 시각화 도구 지원
    상태 차트를 통해 상태 전이 흐름을 도식화하고 문서화 가능
    → 공식 도구: Stately Visualizer

  • 예측 가능한 상태 전이
    유효한 상태 전이만 정의되어 예외 상태 감소
    → 모든 전이 조건과 결과가 코드로 명확히 표현됨


상태 머신(FSM)의 구성 요소

  • states: 시스템이 가질 수 있는 모든 상태
  • initial: 시작 상태
  • events: 외부 입력 또는 사용자 행동
  • transitions: 이벤트에 따른 상태 전이
  • actions: 전이 시 실행되는 부수 효과 (선택 사항)

상태 차트(Statecharts)

  • 유한 상태 머신(FSM)의 확장 개념
  • 중첩 상태(nested), 병렬 상태(parallel), 히스토리 상태(history) 등 지원
  • 복잡한 UI 또는 다단계 워크플로우 표현에 적합

XState의 장점

항목설명
선언형 상태 관리명시적인 상태 및 전이 정의 가능
예측 가능성불가능한 상태 전이를 방지
시각화 가능상태 흐름을 도식화하여 문서화
TypeScript 지원정적 타입 검사 가능
프레임워크 독립적React, Vue 등과 통합 사용 가능

활용 사례

  • 로그인 상태 흐름
  • API 요청 상태 (idle → loading → success/failure)
  • 다단계 폼 입력 처리
  • 복잡한 UI 컴포넌트 제어 (모달, 탭, 토글 등)

참고 링크


예제 코드

import { createMachine } from 'xstate';

const toggleMachine = createMachine({
  id: 'toggle',
  initial: 'inactive',
  states: {
    inactive: {
      on: { TOGGLE: 'active' }
    },
    active: {
      on: { TOGGLE: 'inactive' }
    }
  }
});
profile
꾸준히

0개의 댓글