# Vue 3 Pinia vs Vuex 완벽 비교: 2026년 상태 관리 전략과 면접 핵심 질문 > Vue 3 생태계에서 Pinia와 Vuex를 비교 분석합니다. Options Store와 Setup Store 패턴, TypeScript 통합, 크로스 스토어 구성, SSR 지원, Vuex에서 Pinia로의 마이그레이션 전략, 그리고 2026년 면접에서 자주 출제되는 상태 관리 질문을 코드 예제와 함께 정리합니다. - Published: 2026-04-23 - Updated: 2026-04-23 - Author: SharpSkill - Tags: vue, pinia, vuex, state-management, interview - Reading time: 9 min --- Vue 3의 공식 상태 관리 라이브러리인 Pinia는 Vuex 4를 대체하는 차세대 솔루션으로 자리 잡았습니다. Vue 코어 팀이 공식적으로 권장하는 Pinia는 Composition API와의 자연스러운 통합, 완전한 TypeScript 추론, 그리고 뮤테이션 없는 직관적 API를 제공합니다. 이 글에서는 Pinia와 Vuex의 아키텍처적 차이를 실제 코드로 비교하고, 프로덕션 환경에서의 마이그레이션 전략과 2026년 프런트엔드 면접에서 빈출되는 상태 관리 질문을 체계적으로 정리합니다. > **핵심 요약** > > Pinia 3는 Vue 3의 공식 상태 관리 솔루션입니다. 뮤테이션이 제거되어 직접 상태 변경이 가능하며, TypeScript 타입 추론이 자동으로 동작합니다. 번들 크기는 gzip 기준 약 1KB로 Vuex 4(약 6KB)의 6분의 1 수준입니다. 신규 프로젝트에서는 Pinia를 선택하고, 기존 Vuex 프로젝트는 점진적 마이그레이션을 권장합니다. ## Pinia의 두 가지 스토어 패턴: Options Store vs Setup Store Pinia는 스토어를 정의하는 두 가지 방식을 제공합니다. Options Store는 Vuex에 익숙한 개발자가 빠르게 적응할 수 있는 구조이며, Setup Store는 Composition API 패턴을 그대로 활용합니다. ### Options Store Options Store는 `state`, `getters`, `actions` 객체를 사용하여 스토어를 정의합니다. Vuex의 구조와 유사하지만 뮤테이션이 제거되어, 액션 내에서 `this`를 통해 상태를 직접 변경할 수 있습니다. ```typescript // stores/counter-options.ts import { defineStore } from 'pinia' // Options Store syntax — familiar to Vuex developers export const useCounterStore = defineStore('counter', { state: () => ({ count: 0, lastUpdated: null as Date | null, }), getters: { // Getters receive state as first argument with full type inference doubleCount: (state) => state.count * 2, isPositive(): boolean { // Access other getters via `this` return this.count > 0 }, }, actions: { increment() { // Direct state mutation — no commit() needed this.count++ this.lastUpdated = new Date() }, async fetchCount(id: string) { // Async actions work without extra configuration const response = await fetch(`/api/counters/${id}`) const data = await response.json() this.count = data.count }, }, }) ``` Options Store에서 getter는 첫 번째 인자로 `state`를 받으며 완전한 타입 추론이 적용됩니다. 다른 getter에 접근할 때는 `this`를 사용합니다. 액션에서는 `commit()`이나 `dispatch()` 없이 `this`를 통해 상태를 직접 변경합니다. 비동기 액션도 추가 설정 없이 `async/await` 패턴을 그대로 사용할 수 있습니다. ### Setup Store Setup Store는 Composition API의 `ref`, `computed`, 일반 함수를 사용하여 스토어를 정의합니다. 컴포넌트의 `