# ์ƒํƒœ ๊ด€๋ฆฌ ์†Œ๊ฐœ

์ƒํƒœ ๊ด€๋ฆฌ๋ž€ ํ˜„๋Œ€ ํ”„๋ŸฐํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋ทฐ์—์„œ๋Š” ๋ทฐ์—‘์Šค(Vuex)๋ผ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ˆซ์ž๊ฐ€ ๋งŽ์•„์กŒ์„ ๋•Œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด๋‚˜ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ๋” ๋ช…์‹œ์ ์ด๊ณ  ํšจ์œจ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ์ƒํƒœ ๊ด€๋ฆฌ์ž…๋‹ˆ๋‹ค.

# ๋ทฐ์—‘์Šค ์†Œ๊ฐœ

๋ทฐ์—‘์Šค๋ž€ ๋ทฐ์˜ ์ƒํƒœ ๊ด€๋ฆฌ ํŒจํ„ด์ด์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๋ทฐ์—‘์Šค์˜ ๊ฐœ๋…์„ ๋‹จ์ˆœํ•˜๊ฒŒ ๋„์‹ํ™”ํ•œ ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค.

๋ทฐ์—‘์Šค ์ปจ์…‰

ํ™”๋ฉด(View) -> ํ™”๋ฉด์—์„œ์˜ ์ด๋ฒคํŠธ ๋ฐœ์ƒ(Actions) -> ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ(State)์˜ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค.

# ๋ทฐ์—‘์Šค ๊ธฐ์ˆ  ์š”์†Œ

๋ทฐ์—‘์Šค์˜ ์ฃผ์š” ๊ธฐ์ˆ  ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • state
  • getters
  • mutations
  • actions

๊ฐ ์†์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ํ•ด๋‹น ์ฑ•ํ„ฐ์—์„œ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

# ๋ทฐ์—‘์Šค ์„ค์น˜

๋ทฐ์—‘์Šค๋ฅผ ํ”„๋กœ์ ํŠธ์— ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

# CDN ๋ฐฉ์‹

<script src="https://unpkg.com/vuex"></script>

# NPM ๋ฐฉ์‹

npm install vuex --save

# ๋ทฐ์—‘์Šค ๋“ฑ๋ก

๋ทฐ์—‘์Šค๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ทฐ ๋ผ์šฐํ„ฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ทฐ ์Šคํ† ์–ด๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export const store = new Vuex.Store({
  // ..
});

๋ทฐ ์Šคํ† ์–ด๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜๊ณ  ๋‚˜์„œ ES6 import/export ๋ฌธ๋ฒ•์œผ๋กœ main.js ํŒŒ์ผ์˜ ์ธ์Šคํ„ด์Šค์— ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

// main.js
import Vue from 'vue';
import { store } from './store.js';

new Vue({
  store: store
})

# ๋ทฐ์—‘์Šค ๊ตฌ์กฐ๋„

๋ทฐ์—‘์Šค์˜ ์ „์ฒด ํ๋ฆ„์„ ๋‚˜ํƒ€๋‚ธ ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค.

๋ทฐ์—‘์Šค ์ปจ์…‰

๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์€ Actions -> Mutations -> State ์ˆœ์„œ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.