blog

Pinia๐Ÿ ์•„์ง๋„ ์‚ฌ์šฉ๋ฒ•์„ ๋ชจ๋ฅด์‹œ๋‚˜์š”? ์ด ์ž‘์€ TodoList ๋ฐ๋ชจ๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”!

์ด์ „ ๊ธ€์—์„œ๋Š” Vuex๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์ง€๋งŒ, Vue ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋˜ ๋‹ค๋ฅธ ์ข‹์€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค - Pinia...

Oct 14, 2025 ยท 6 min. read
ใ‚ทใ‚งใ‚ข

์„œ๋ฌธ

Vuex๋ฅผ ํ†ตํ•ด ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์ง€๋งŒ Vue ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋˜ ๋‹ค๋ฅธ ์ข‹์€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋„๊ตฌ ์ธ Pinia๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Vuex์— ๋น„ํ•ด Pinia์—์„œ๋Š” Vuex๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๋ฐœ๋ชฉ ํŒ”์ฐŒ๋ฅผ ๊ฐ€์ ธ ์™€์„œ ์ €์žฅ์†Œ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋กํ•ฉ๋‹ˆ๋‹ค! ์–ต์ œ๋˜์ง€ ์•Š์€ ๋ฐฉ์ข… ๋‚ด๋ถ€ ....

์‹œ์ž‘, ์šฐ์„  ์˜ค๋Š˜์˜ ๋ฐ๋ชจ์˜ ํšจ๊ณผ๋ฅผ ๋ณด์ž, ๋ฐ๋ชจ๋Š” ์–ด๋ ต์ง€ ์•Š๊ณ  Pinia์˜ ์ดํ•ด์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

์˜ค๋Š˜์˜ ์ƒˆ๋กœ์šด ์นœ๊ตฌ์ธ ํ”ผ๋‹ˆ์•„์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋Š” TodoList ๊ฐ„๋‹จํ•œ ๋ฐ๋ชจ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์„ธ์š”!

ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™” vue Cli| Vite

์˜ค๋Š˜์€ ์—ฌ์ „ํžˆ Vue ํ”„๋กœ์ ํŠธ์ด์ง€๋งŒ, ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” vite๊ฐ€ Vue ํŒ€์—์„œ ๊ฐœ๋ฐœํ•œ ์ฐจ์„ธ๋Œ€ ์Šค์บํด๋”ฉ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด Vite์™€ Vue Cli ์Šค์บํด๋”ฉ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

  • ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ Cli๋Š” ๋…ธ์ธ์— ๊ฐ€๊น๊ณ  Vue์—์„œ ํƒœ์–ด ๋‚ฌ์œผ๋ฉฐ Vue ๋งŒ ์ง€์›ํ•˜๋ฉฐ ์ฝ˜ํ…์ธ ๊ฐ€ ํ’๋ถ€ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ์ž˜ ๊ณ ๋ ค๋˜์–ด ์žˆ์œผ๋ฉฐ ์ž…์— ๋ฐฅ์„ ๋จน์ด๋Š” ๊ฒƒ์— ๊ฐ€๊น๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • Vue ํŒ€์€ Vite๋ฅผ Vue์— ๊ตญํ•œ๋˜์ง€ ์•Š๋Š” ๋ฒ”์šฉ ๋นŒ๋“œ ๋„๊ตฌ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋” ๊ฐ€๋ณ๊ณ  ์ปดํŒฉํŠธํ•˜๋ฉฐ, ES6 ๋ธŒ๋ผ์šฐ์ € ๋„ค์ดํ‹ฐ๋ธŒ ES6 ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์ง์ ‘ ํŒจํ‚ค์ง•ํ•˜์—ฌ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋Š” Vite๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค . ๋”ฐ๋ผ์„œ ํŒจํ‚ค์ง• ๊ณผ์ •์—์„œ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ ํŒŒ์‹ฑ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋” ์›ํ™œํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Vite ์Šค์บํด๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

Vite ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ, VueCli์™€์˜ ์ฐจ์ด์ , ์„ ํƒ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ฃผ์š” ์†Œ๊ฐœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์— ํŠœํ† ๋ฆฌ์–ผ์„ ๊ฒŒ์‹œํ•  ํ…Œ๋‹ˆ ์ง์ ‘ ํ”Œ๋ ˆ์ดํ•ด ๋ณด์„ธ์š”!

์ด์ „ ๊ธ€

VueCliํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™”

ํ”ผ๋‹ˆ์•„ ์‹œ์ž‘ํ•˜๊ธฐ

1. ์—ฌ๊ธฐ์„œ๋Š” node.js์—์„œ ์ œ๊ณตํ•˜๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด Pinia ์ข…์† ์š”์†Œ๋ฅผ ์ง์ ‘ ๋‹ค์šด๋กœ๋“œํ•˜๋„๋ก ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  yarn๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜์—ฌ

2. ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋ชจ๋“ˆ์‹ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.

ํ•  ์ผ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ชจ๋“ˆ์„ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ์˜ ์Šคํ† ์–ด ๋””๋ ‰ํ„ฐ๋ฆฌ์— todo.js ํŒŒ์ผ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

js
// vue 3์˜ ref ํ•จ์ˆ˜์™€ Pinia์˜ defineStore ํ•จ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ import { ref } from 'vue' import { defineStore } from 'pinia' // defineStore ํ•จ์ˆ˜๋กœ "todo"๋ผ๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ชจ๋“ˆ ์ •์˜ํ•˜๊ธฐ export const useTodoStore = defineStore("todo", () => { // ref ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ์— ๊ฐ์ฒด ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ˜์‘ํ˜• ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜ todos ์ƒ์„ฑํ•˜๊ธฐ const todos = ref([ { txt: '์ธ์ƒ์€ ๊ธฐ๋ณต์ด ์ „๋ถ€๊ฐ€ ์•„๋‹ˆ๋‹ค'} ]) // ํ• ์ผ ๋ฐฐ์—ด์— ์ƒˆ ๊ฐ์ฒด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” addTodo๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. const addTodo = () => { todos.value.push({ txt: ' }) } // ์ •์˜๋œ ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ˜ํ™˜ํ•˜๊ธฐ return { todos, addTodo } })

3. ๋ฐ˜์‘ํ˜• ๋ฐ์ดํ„ฐ์™€ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ์ „์šฉ ๊ตฌ์„ฑ ์š”์†Œ ํŒŒ์ผ์ธ src ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ ํŒŒ์ผ ์•„๋ž˜์— TodoList.vue ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

js
// vue 3์˜ ref ํ•จ์ˆ˜์™€ Pinia์˜ defineStore ํ•จ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ import { ref } from 'vue' import { defineStore } from 'pinia' // defineStore ํ•จ์ˆ˜๋กœ "todo"๋ผ๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ชจ๋“ˆ ์ •์˜ํ•˜๊ธฐ export const useTodoStore = defineStore("todo", () => { // ref ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ์— ๊ฐ์ฒด ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ˜์‘ํ˜• ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜ todos ์ƒ์„ฑํ•˜๊ธฐ const todos = ref([ { txt: '์ธ์ƒ์€ ๊ธฐ๋ณต์ด ์ „๋ถ€๊ฐ€ ์•„๋‹ˆ๋‹ค'} ]) // ํ• ์ผ ๋ฐฐ์—ด์— ์ƒˆ ๊ฐ์ฒด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” addTodo๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. const addTodo = () => { todos.value.push({ txt: ' }) } // ์ •์˜๋œ ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ˜ํ™˜ํ•˜๊ธฐ return { todos, addTodo } })

4. ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฒฐ๊ตญ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ๋  ๊ฒƒ์ด๋ฏ€๋กœ App.vue์— ์‚ฌ์šฉํ•˜๋„๋ก ๋“ฑ๋กํ•  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค!

App.vue์—์„œ TodoList ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  TodoStore ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•  ์ผ ๋ฐฐ์—ด์—์„œ ๋ฐ˜์‘ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  addTodo ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ž‘ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

xml
<template> <!-- TodoList๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•˜๊ณ , ํ•  ์ผ์˜ ๋ฐฐ์—ด์„ todoStore์— ์ „๋‹ฌํ•˜๊ณ , props๋ฅผ ํ†ตํ•ด addTodo ๋ฉ”์„œ๋“œ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.> <div> <TodoList :todos="todoStore.todos" :addTodo="todoStore.addTodo" /> </div> </template> <script setup> import TodoList from './components/TodoList.vue' import { useTodoStore } from './store/todos.js' // todoStore๋ผ๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ const todoStore = useTodoStore() </script> <style scoped> /* ์„ ํƒ์  ์Šคํƒ€์ผ, ์—ฌ๊ธฐ์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ๋กœ์ปฌ ์Šคํƒ€์ผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.*/ </style>

์š”์•ฝ

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

๋ฌผ๋ก  ์ตœ์ข… ๋ถ„์„์—์„œ ๋‘ ๊ฐ€์ง€๊ฐ€ ๊ฐœ๋ฐœ ๋„๊ตฌ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค ์ผ ๋ฟ์ด๋ฉฐ ์˜จ๋ผ์ธ ์ตœ์ข… ํ”„๋กœ์ ํŠธ ํŒจํ‚ค์ง•์€ ์—ฌ์ „ํžˆ ์ˆœ์ˆ˜ํ•œ HTML & CSS & JS์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์— ๋”ฐ๋ผ Vuex์™€ pinia๋ฅผ ์„ ํƒํ•ด์•ผํ•˜๋Š” ๋™์ง€์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜์˜ ๋‚ด์šฉ์„ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ ์„ธ ๊ฐ€์ง€ ์š”์ ์„ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ํ”ผ๋‹ˆ์•„ ์Šคํ† ์–ด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ.

    • ํ”„๋ŸฐํŠธ์—”๋“œ์—์„œ๋Š” store ๋””๋ ‰ํ„ฐ๋ฆฌ์— todo.js ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  defineStore ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ํ•จ์ˆ˜์ธ useTodoStore๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Pinia๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • useTodoStore๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•  ์ผ ๋“ฑ์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  2. ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ.

    • import { useTodoStore } from './store/todo.js'; ํ†ตํ•ด Vue ์ปดํฌ๋„ŒํŠธ์—์„œ useTodoStore ํ•จ์ˆ˜๋ฅผ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ•  ์ผ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ useTodoStore๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์™€์„œ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  3. ํ”ผ๋‹ˆ์•„์˜ ์žฅ์ .

    • Pinia๋Š” defineStore ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ† ์–ด๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ์ตœ์‹  ํ›„ํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: useTodoStore๋ฅผ ํ†ตํ•ด ์ƒํƒœ ๊ฐ€์ ธ์˜ค๊ธฐ).
    • ๋ฐ์ดํ„ฐ์™€ UI ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋” ๊น”๋”ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

์ด๊ฒƒ์œผ๋กœ ์˜ค๋Š˜์˜ ๊ธ€์€ ์—ฌ๊ธฐ๊นŒ์ง€์ž…๋‹ˆ๋‹ค.

๋งŒ๋“ค๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์œผ๋‹ˆ ์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ์ข‹์•„์š”๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”!

์ž์„ธํžˆ ์ฝ์–ด๋ณด์„ธ์š”.

: Gitee

Read next