WIPIVERSE

Vuex

Vuex는 Vue.js 애플리케이션에서 상태 관리를 중앙 집중화하기 위해 설계된 오픈 소스 라이브러리이다. Vue.js의 창시자인 Evan You와 Vue 커뮤니티가 공동으로 개발했으며, 2015년에 첫 번째 공식 릴리스가 이루어졌다. MIT 라이선스로 배포되어 누구나 자유롭게 사용·수정·재배포할 수 있다.

핵심 개념

요소 설명
State 애플리케이션 전역에서 공유되는 데이터 객체. Vue 컴포넌트는 store.state를 통해 접근한다.
Getter State를 기반으로 계산된 값을 반환하는 함수. 캐시가 적용되어 동일 입력에 대해 재계산이 일어나지 않는다.
Mutation State를 직접 변경하는 유일한 방법이며, 동기적으로 실행된다. commit 메서드로 호출한다.
Action 비동기 로직을 수행하고, 필요 시 Mutation을 commit한다. dispatch 메서드로 실행한다.
Module 대규모 애플리케이션을 위해 Store를 기능별로 나누어 계층 구조를 구성한다. 각 모듈은 자체 State, Getter, Mutation, Action를 가질 수 있다.

주요 특징

  • 예측 가능한 상태 변화: 모든 상태 변경이 Mutation을 통해 명시적으로 기록되므로 디버깅이 용이하다.
  • 타임 트래블 디버깅: Vue Devtools와 연동해 상태 변화를 시간 순서대로 추적할 수 있다.
  • SSR 지원: 서버 사이드 렌더링 환경에서도 동일한 Store 인스턴스를 사용해 초기 상태를 전달한다.
  • 플러그인 구조: 로깅, 영구 저장(persistence), API 요청 처리 등 다양한 플러그인을 손쉽게 적용할 수 있다.

사용 예시

// store/index.js
import { createStore } from 'vuex'

export default createStore({
  state: {
    count: 0
  },
  getters: {
    doubleCount: (state) => state.count * 2
  },
  mutations: {
    increment(state) {
      state.count++
    }
  },
  actions: {
    asyncIncrement({ commit }) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    }
  }
})

위와 같이 정의된 Store는 Vue 애플리케이션 루트에 app.use(store) 형태로 등록된다. 컴포넌트에서는 computed와 methods를 이용해 상태와 변이 로직을 호출한다.

관련 기술

  • Vue.js: Vuex는 Vue.js(주로 Vue 2와 Vue 3)와 긴밀히 연동되며, 공식 문서에서 권장하는 상태 관리 방식이다.
  • Flux / Redux: Vuex는 Flux 아키텍처에 기반을 두고 있으며, Redux와 유사한 개념(일방향 데이터 흐름, 액션/리듀서)들을 차용한다.

참고 문서

  • 공식 문서: https://vuex.vuejs.org/
  • GitHub 저장소: https://github.com/vuejs/vuex

이상은 Vuex에 대한 객관적이고 중립적인 요약이다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기