0Pricing
Vue Academy · 강의

Vue에서 XState로 상태 머신 만들기

XState v5와 함께 useMachine()을 사용하고, 상태와 전환을 정의하며, DevTools에서 머신을 시각화합니다.

Vue에서 XState로 상태 머신 만들기은(는) CoddyKit의 무료 Vue Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Vue Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

state 머신이 필요한 이유

isLoading, isError, isSuccess 같은 불리언 플래그는 서로 모순되는 조합으로 변할 수 있습니다. state 머신은 유한한 state 집합과 그 사이에서 허용되는 전이를 모델링하므로 잘못된 state를 표현할 수 없게 합니다.

엑스스테이트 소개

엑스스테이트는 JavaScript에서 유한 상태 머신과 상태 차트를 사용하기 위한 라이브러리입니다. @xstate/vue 패키지는 컴포저블을 통해 Vue의 반응성과 통합됩니다.

// terminal
// npm install xstate @xstate/vue

머신 정의하기

createMachine은 state와 전이를 설명합니다. 각 state는 on 아래에 이벤트를 나열하고, 이벤트가 대상 state로 이동하도록 합니다.

import { createMachine } from "xstate"

const toggleMachine = createMachine({
  id: "toggle",
  initial: "inactive",
  states: {
    inactive: { on: { TOGGLE: "active" } },
    active: { on: { TOGGLE: "inactive" } },
  },
})

상태와 전이

머신은 initial에서 시작합니다. 현재 state의 on 아래에 있는 이벤트를 보내면 이름이 지정된 대상 state로 전이합니다. 나열되지 않은 이벤트는 단순히 무시되므로 잘못된 전이는 발생할 수 없습니다.

데이터 가져오기 머신

비동기 흐름에서는 state 머신이 특히 유용합니다. 데이터 가져오기는 유휴, 로딩, 성공, 실패라는 명확한 state를 가지며, 각 state 사이에 적절한 전이가 있습니다.

const fetchMachine = createMachine({
  initial: "idle",
  states: {
    idle: { on: { FETCH: "loading" } },
    loading: { on: { RESOLVE: "success", REJECT: "failure" } },
    success: {},
    failure: { on: { RETRY: "loading" } },
  },
})

Vue에서 useMachine 사용하기

@xstate/vue의 useMachine은 컴포넌트 안에서 머신을 실행하고 반응형 snapshot과 send 함수를 반환합니다.

import { useMachine } from "@xstate/vue"

const { snapshot, send } = useMachine(fetchMachine)

현재 state 읽기

반응형 snapshot에는 현재 state가 담깁니다. snapshot.value.matches("loading")으로 확인하면 조건부 렌더링에 적합합니다.

// template
// <Spinner v-if="snapshot.matches('loading')" />
// <Error v-if="snapshot.matches('failure')" />
console.log(snapshot.value.value) // "idle"

이벤트 보내기

이벤트와 함께 send를 호출하여 전이를 트리거합니다. 현재 state에 해당 전이가 정의된 경우에만 머신이 다음 state로 이동합니다.

function load() {
  send({ type: "FETCH" })
}
// later, on resolve:
// send({ type: "RESOLVE" })

템플릿에서 이벤트 연결하기

UI 동작을 send에 연결합니다. state 머신은 버튼이 유효한 방식으로만 흐름을 진행하도록 보장합니다.

<template>
  <button @click="send({ type: 'FETCH' })">Load</button>
  <button v-if="snapshot.matches('failure')" @click="send({ type: 'RETRY' })">
    Retry
  </button>
</template>

추가 데이터를 위한 context

머신은 가져온 결과나 오류 메시지 같은 확장 데이터인 context를 보유할 수 있으며, 전이 중 액션으로 업데이트됩니다. state는 유한하게 유지되고 context가 변경되는 데이터를 담습니다.

createMachine({
  context: { data: null, error: null },
  initial: "idle",
  states: { /* assign to context in transitions */ },
})

개발 도구로 시각화하기

엑스스테이트 머신은 다이어그램으로 시각화할 수 있습니다. 엑스스테이트 개발 도구와 스테이틀리 검사기는 실행 중인 머신을 렌더링하고, 현재 state를 강조하며, 전이를 다시 실행할 수 있게 해 줍니다. 복잡한 흐름을 이해하는 데 매우 유용합니다.

빠른 확인

Vue에서 엑스스테이트를 사용하는 방법에 대한 이해도를 확인해 보십시오.

복습

엑스스테이트를 사용한 state 머신을 배웠습니다.

  • state 머신은 유한한 state와 허용되는 전이를 정의하여 잘못된 state를 불가능하게 만듭니다.
  • createMachine은 on 이벤트에서 대상 state로 이어지는 전이를 포함한 states를 선언합니다.
  • @xstate/vue의 useMachine은 반응형 snapshot과 send를 반환합니다.
  • snapshot.matches("...")로 state를 읽고, send({ type })로 전이를 트리거합니다.
  • context는 추가 데이터를 담고, 엑스스테이트 개발 도구는 머신을 시각화합니다.

자주 묻는 질문

“Vue에서 XState로 상태 머신 만들기” 강의는 무료인가요?

네 — “Vue에서 XState로 상태 머신 만들기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Vue Academy 강의 전체를 잠금 해제할 수 있습니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Vue에서 XState로 상태 머신 만들기”에서 뭘 배우나요?

XState v5와 함께 useMachine()을 사용하고, 상태와 전환을 정의하며, DevTools에서 머신을 시각화합니다. 브라우저에서 직접 실행하는 실습 코드로 Vue Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Vue Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Vue Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“Vue에서 XState로 상태 머신 만들기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Vue Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Vue Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 고급 반응성: shallowRef와 triggerRef
  2. 컴포저블 팩토리와 매개변수화된 컴포저블
  3. Vue에서 XState로 상태 머신 만들기
  4. 그룹화된 효과를 위한 effectScope
← Vue Academy(으)로 돌아가기