๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“  archive

[Vue.js ์ƒํƒœ๊ด€๋ฆฌ 2ํŽธ] Vuex ๋ฅผ ์ด์šฉํ•œ ์ƒํƒœ ๊ด€๋ฆฌ

by HandHand 2022. 3. 7.

๐Ÿ“Œ Vuex ๋ž€?

Vuex ๋Š” vue ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ณต์‹ ์ง€์›ํ•˜๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘์•™์— ์ง‘์ค‘๋˜์–ด์žˆ๋Š” ๋•๋ถ„์— ๋ฐ์ดํ„ฐ๋ฅผ props ์™€ event emit ์œผ๋กœ

๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค๊ณผ ํ†ต์‹ ํ•˜๋Š” ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ Vuex๋ฅผ ์™œ ์จ์•ผ ํ• ๊นŒ?

์•ฑ์ด ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ณผ์ •

์šฐ๋ฆฌ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด view, state, actions ์˜ ํ๋ฆ„์œผ๋กœ

์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

 

1

 

์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • action ์„ ์ทจํ•˜๋ฉด ๊ทธ์— ๋”ฐ๋ผ state ๊ฐ€ ๋ฐ”๋€Œ๊ณ  ์ด๊ฒƒ์ด view ์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์€ view ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ์œผ๋ฉฐ

๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ state ๋Š” ์ปดํฌ๋„ŒํŠธ์— ์ข…์†๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋Œ€๊ทœ๋ชจ ์•ฑ์—์„œ๋Š”?

์ž‘์€ ํฌ๊ธฐ์˜ ์•ฑ์ด๋ผ๋ฉด ์œ„์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋Š” ์ „ํ˜€ ๋ฌธ์ œ ๋  ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค.

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

ํ•˜์ง€๋งŒ ํ˜„๋Œ€ ๋ชจ๋˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณต์žกํ•œ ํ™”๋ฉด๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๊ณ ,

๊ทธ์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณต์žกํ•œ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

2

Vue ์—์„œ๋Š” ๋ถ€๋ชจ์™€ ์ž์‹ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์€ props ๋กœ ํ•˜๊ณ ,

์ž์‹์€ ๋ถ€๋ชจ์—๊ฒŒ event emit ์„ ํ†ตํ•ด ๋ถ€๋ชจ์—๊ฒŒ์„œ ์ „๋‹ฌ๋ฐ›์€ ์ƒํƒœ ๊ฐ’์ด ๋ณ€ํ™”ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

๋ณต์žกํ•œ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋Š” ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€

์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋“ค์—๊ฒŒ props ๋ฅผ ๊ณ„์† ์ „๋‹ฌํ•ด์ฃผ๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ํ”ํžˆ props drilling ์ด๋ผ๊ณ  ํ•˜๋ฉฐ ์ƒํƒœ๊ด€๋ฆฌ ๋Š” ์ด๋Ÿฌํ•œ ์ด์Šˆ ๋•Œ๋ฌธ์— ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์•ฑ ๊ตฌ์กฐ๋Š” ์ด๋ ‡๊ฒŒ ๋ณ€ํ•ฉ๋‹ˆ๋‹ค.

Vuex ๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ๋ผ๋ฆฌ ๊ณต์œ ๋˜์–ด์•ผ ํ•˜๋Š” ์ƒํƒœ๋Š” Vuex ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๋ฉฐ

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

3

 

๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ

Vuex ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „๊ณผ ํ›„์˜ ์•ฑ ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ข‹์€ ์˜ˆ์‹œ๊ฐ€ ์žˆ์–ด์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

loggedInUser ๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ธ๋ฐ

props & event emit ๋ฐฉ์‹๊ณผ vuex ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์˜ ์ฐจ์ด์ ์ด ๋ช…ํ™•ํžˆ ๋ณด์ด๋„ค์š” ๐Ÿ˜„.

4

 

๐Ÿ“Œ Vuex์™€ FLUX ํŒจํ„ด

Vuex ๋Š” Flux ํŒจํ„ด์— ์˜๊ฐ์„ ๋ฐ›์•„ ๋งŒ๋“ค์–ด์ง„ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด Flux ํŒจํ„ด์€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ๊ฒƒ์ผ๊นŒ์š”?

MVC ํŒจํ„ด

5

 

6

MVC ํŒจํ„ด์€ Model, View, Controller ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๊ฐ๊ฐ ๋‹ค์Œ ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

 

  • Model : ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • View : ๋ชจ๋ธ์„ UI ์ƒ์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • Controller : View์™€ Model ์‚ฌ์ด์— ์ค‘๊ฐ„ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ์ด ์ปค์งˆ์ˆ˜๋ก ๊ฐ ๊ธฐ๋Šฅ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋†’์€ ๊ฒฐํ•ฉ๋„๋Š” ์ฝ”๋“œ ์ˆ˜์ • ์‹œ side effect ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜์— ๋ถˆ๋ฆฌํ•ด์ง‘๋‹ˆ๋‹ค.

MVC ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ์œผ๋ฉฐ UI ์‹œ์Šคํ…œ์„ ์—ญํ• ๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ

๊ธฐ๋Šฅ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ท„์Šต๋‹ˆ๋‹ค.

MVC ํŒจํ„ด์˜ ํ•œ๊ณ„

ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ MVC ํŒจํ„ด์—๋„ ํ•œ๊ณ„์ ์€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋‹ค์ˆ˜์˜ view ์™€ model ์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜๊ธฐ ๋•Œ๋ฌธ์—

controller ๊ฐ€ ๋น„๋Œ€ํ•ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.

 

์ด๋ฅผ ํ”ํžˆ massive-view-controller ๋ผ๊ณ  ํ•˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋ฅผ ๋ฑ๋‹ˆ๋‹ค.

 

7

๋‹ค์ˆ˜์˜ model ์ด ์„œ๋กœ ์˜์กด์„ฑ์ด ์žˆ๋Š” ๋‹ค๋ฅธ model์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋“ฑ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์œ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด MVC ํŒจํ„ด์€ ํ•œ์ชฝ์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๋˜ ๋‹ค๋ฅธ ์ชฝ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์–ด

์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์˜ ๊ฐ€๋Šฅ์„ฑ๋„ ๋‚ดํฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

Flux ํŒจํ„ด์˜ ๋“ฑ์žฅ

ํŽ˜์ด์Šค๋ถ ๊ฐœ๋ฐœํŒ€์€ MVC ๊ฐ€ ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค์—์„œ ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค๊ณ  ํŒ๋‹จํ•œ ๋’ค

Flux ํŒจํ„ด์„ ์ฝ”๋“œ ๋ฒ ์ด์Šค์— ์ ์šฉ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค๊ณ  ๋ฐœํ‘œํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋“ค์€ MVC ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ ์ด ์žˆ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

 

* ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์‹œ์Šคํ…œ์˜ ๋ณต์žก๋„๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค.
* ๊นจ์ง€๊ธฐ ์‰ฝ๊ณ  ์˜ˆ์ธก์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
* ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์–ด๋–ค side effect ๋ฅผ ์ผ์œผํ‚ฌ์ง€ ์˜ˆ์ธก์ด ํž˜๋“ค๋‹ค.

์ข€ ๋” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํŽ˜์ด์Šค๋ถ ๊ฐœ๋ฐœํŒ€์€ FLUX ํŒจํ„ด์„ ์ ์šฉํ–ˆ๊ณ 

์ด๋Š” ์•„์ฃผ ์„ฑ๊ณต์ ์ด์—ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

8

  • Store(s) : ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณณ์ด๋ฉฐ ๋ณดํ†ต ๊ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ๋ณ„๋กœ store ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Action : action ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ dispatcher ์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • Dispatcher : action ๋“ค์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ store ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • View & Controller-View : MVC ํŒจํ„ด์˜ View ์™€ ๋™์ผํ•˜๋ฉฐ UI ์ƒ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Dispatcher ๋Š” ์–ด๋–ค Action ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ

์–ด๋–ป๊ฒŒ Store ๋ฅผ ๊ฐฑ์‹ ํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Store ๊ฐ€ ๊ฐฑ์‹ ๋˜๋ฉด ์ด์— ๋”ฐ๋ผ View ๋„ ๊ฐฑ์‹ ๋˜๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์—

๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ์œ ์ง€๋จ ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’ก Controller View ๋Š” ๋ฌด์—‡์ผ๊นŒ?

์ผ๋ฐ˜์ ์ธ View ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Controller View ๋Š” store ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„
ํ•˜์œ„ ๊ณ„์ธต์˜ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ props ๋กœ ์ „๋‹ฌํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด MVC ํŒจํ„ด์˜ Controller ์™€ ์œ ์‚ฌํ•˜์—ฌ Controller View ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ก Redux ๋Š” Flux ์™€ ๋‹ค๋ฅด๊ฒŒ ๋‹จ์ผ store ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค

์ด๋Š” ํŠน์ • action ์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” store ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„
์ถ”์ ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค๊ณ  ์ด๋กœ ์ธํ•ด ์ƒํƒœ ๊ด€๋ฆฌ ์ด์Šˆ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“Œ Vuex ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ์„๊นŒ?

ํ•ด์™ธ ํฌ์ŠคํŠธ๋ฅผ ๋ณด๋‹ˆ Vuex ์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ๋ชจ์…˜์œผ๋กœ ์ž˜ ๋งŒ๋“ค์–ด๋†“์€ ๊ฒƒ์ด ์žˆ์–ด์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

์•ž์„œ ์‚ดํŽด๋ณธ Flux ํŒจํ„ด์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ๊ตฌ์กฐ์ž„์ด ๋ช…ํ™•ํžˆ ๋ณด์ด์ฃ ?

9

State

Vuex ๋Š” ๋‹จ์ผ ์ƒํƒœ ํŠธ๋ฆฌ(single state tree) ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ store ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ๊ฐ์ฒด์ด๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์ƒํƒœ์— ๋Œ€ํ•œ ์Šค๋ƒ…์ƒท์„ ์ถ”์ ํ•˜๊ธฐ ์‰ฌ์›Œ ๋””๋ฒ„๊น…์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ store ๋ผ๊ณ ํ•ด์„œ ๋ชจ๋“ˆํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

Vuex ๋Š” ํ•˜๋‚˜์˜ store ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ submodule ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

Getter

๊ฐ€๋”์”ฉ ์ €์žฅ๋œ state ๊ฐ’์„ ์ด์šฉํ•ด์„œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ด๊ฐ’์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

getter ๋Š” ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด ์กด์žฌํ•˜๋ฉฐ ์ข…์†๋œ state ๊ฐ€ ๋ณ€ํ™”ํ•  ๋•Œ

ํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์„œ ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.

 

Mutation

store ์— ์ €์žฅ๋œ state ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” mutation ์„ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

mutation ์€ ์ด๋ฒคํŠธ ํ‚ค๊ฐ’๊ณผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

ํ•ธ๋“ค๋Ÿฌ๋Š” store ์˜ state ์— ์ ‘๊ทผํ•ด์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ, mutation ์€ ๋ฐ˜๋“œ์‹œ ๋™๊ธฐ์ ์ธ ์ž‘์—… ๋งŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

- ๋น„๋™๊ธฐ ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— `devtool` ์ด `mutation` ์ˆ˜ํ–‰ ์ „ํ›„์— ์Šค๋ƒ…์ƒท์œผ๋กœ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
- mutation ์— ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋น„๋™๊ธฐ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜๋ฉด ์–ด๋–ค mutation ์ด ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œ์ผฐ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Actions

action ์€ mutation ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋น„๋™๊ธฐ์ž‘์—… ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์ƒํƒœ๋ฅผ ์ง์ ‘ ๋ณ€ํ™”์‹œํ‚ค๋Š” ๋Œ€์‹ , mutation ์„ ์ด์šฉํ•ด์„œ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ Vuex ์‚ฌ์šฉ ์‹œ ์žฅ์ ์€?

๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ผ์ •ํ•œ ํŒจํ„ด ์ œ๊ณต

์šฐ๋ฆฌ์˜ store ๊ฐ€ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ 

์ด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ •ํ•œ ์ธํ„ฐํŽ˜์ด์Šค (actions, mutations, getters) ๋“ค์ด ์ œ๊ณต๋˜๋Š” ๊ฒƒ์€

๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ถ”์ ํ•˜๋Š”๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์— ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์„ ์ถ”์ ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

vuex ๋Š” ์ผ์ •ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ์— ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ๋“ค์ด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

 

๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋ฌธ์ œ ํ•ด๊ฒฐ

์•ž์„œ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ผ์ •ํ•œ ํŒจํ„ด์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—

ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋ผ๊ณ  ๋ณด๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Time Travel์„ ํ†ตํ•œ ํŽธ๋ฆฌํ•œ ๋””๋ฒ„๊น…

ํ˜„์—…์—์„œ Vuex ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ฐ€์žฅ ํŽธ๋ฆฌํ•˜๋‹ค๊ณ  ๋Š๋‚€ ์ ์ด ๋ฐ”๋กœ time travel ๊ธฐ๋Šฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์„ ๊ฑฐ๊พธ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ์˜ฌ๋ผ๊ฐ€

Vuex ์— ์ €์žฅ๋˜์–ด์žˆ๋˜ ์ด์ „ ์ƒํƒœ ๊ฐ’๋“ค์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ๋””๋ฒ„๊น… ์‹œ ์•„์ฃผ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋ฉฐ ๊ฐ’์ด ๋ฐ”์ธ๋”ฉ๋œ ํ™”๋ฉด์˜ ๋ณ€ํ™”๋„ ํ•จ๊ป˜ ํ™•์ธํ•˜๋ฉฐ

๊ฐœ๋ฐœ์ž๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฐ’์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š”๋ฐ ํฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ์ฃผ์˜ํ•  ์ ์€ ์—†์„๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด Vue ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Vuex ๊ฐ€ ํ•ญ์ƒ ์ •๋‹ต์ผ๊นŒ์š”?

๋ชจ๋“  ๊ธฐ์ˆ ์—๋Š” ์žฅ๋‹จ์ ์ด ์žˆ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ž˜ ์•Œ๊ณ  ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ์ฐธ๊ณ  ์ž๋ฃŒ

What is a Store in Vue.js? - Vue.js Tutorials

[VueMastery] Mastering Vuex - part 1

[Vue.js] Vuex๋ž€? Vuex์˜ ์ปจ์…‰๊ณผ ๊ตฌ์กฐ

ํŽ˜์ด์Šค๋ถ์˜ ๊ฒฐ์ •: MVC๋Š” ํ™•์žฅ์— ์šฉ์ดํ•˜์ง€ ์•Š๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด Flux๋‹ค.

MVC(Model, View, Controller) Pattern

MVC vs Flux vs Redux - The Real Differences

[Vue.js] Vuex๋ž€? Vuex์˜ ์ปจ์…‰๊ณผ ๊ตฌ์กฐ

What is Vuex? | Vuex

In-Depth Overview | Flux

๋ฐ˜์‘ํ˜•

๐Ÿ’ฌ ๋Œ“๊ธ€