
๋๋์ด ๊ฐ์ธ ํ๋ก์ ํธ์ ์ฒซ ํฌ๋ฌธ์ ์ด์๋ค. ์ฒซ ์์์ Vue.js๋ฅผ ๊ณต๋ถํ๋ฉด์ ์์ํ๋ค.
"๊ตฌ๋์ฌ๋ ๊ฐ๋ฐ์ 9diin"๋์ "2024 Vue.js ๊ฐ๋ฐ ๊ฐ์ด๋ - Full Course (feat. Composition API)" ์์์ ๊ธฐ๋ฐ์ผ๋ก ๊ณต๋ถํ ์์ ์ด๋ค(์ข์ ๊ฐ์ ๋ง๋ค์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค).
์ฌ๋ฌ ํ์ง์๋ถ๋ค์ ์กฐ์ธ์ ๋ฐ๋ฅด๋ฉด ํ์กดํ๋ ํ๋ ์์ํฌ์ค Vue.js ์ฝ๊ณ ๋น ๋ฅด๊ฒ UI๋ฅผ ๋ง๋๋ ํ๋ ์์ํฌ๋ ์๋ค๊ณ ํ์ จ๋ค. ์์ฐ์ฑ์ด ์์ฒญ๋๋ค๊ณ ...
์ํผ ๋ด๊ฐ ์ทจ์งํ๊ธฐ ์ ๊น์ง ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ต๋ํ์ผ๋ก ๋๋ฅผ ๊ฐ์๋ฃ์ด๋ณผ ์์ ์ด๋ค.
UI๊ฐ ๋ชป์๊ฒจ๋ ์ข๋ค! RESTfulํ์ง ์์๋ ์ข๋ค! ๊ทธ๋๋ ์์ฑ์ ํ์!
Vue.js๋ ์น ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ฝ๊ณ ๊ฐ๋ ฅํ๋ฉฐ ๋ค์ฌ๋ค๋ฅํ ํ๋ ์์ํฌ์ด๋ค.
Vue.js์ ๊ฐ์ ์ ๋ฎ์ ์ง์ ์ฅ๋ฒฝ๊ณผ ๋ฎ์ ๋ฌ๋์ปค๋ธ๋ฅผ ๊ฐ์ง๋ฉด์๋ ๋์ ํผํฌ๋จผ์ค๋ฅผ ์ง๋๋ค๋ ์ ์ด๋ค.
๊ทธ๋ ๊ธฐ์ FE ์์ฅ์์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ์คํ์ด React์ด๊ณ ๊ทธ ๋ค์์ด Vue.js๋ผ๊ณ ํ๋ค.
SPA(Single Page Application)๋ ๋ง ๊ทธ๋๋ก ํ๋์ ํ์ด์ง์์ ์ ์ ๊ฐ ์ํ๋ ์ ๋ณด๋ง ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
์ข ๋ ์น์ํ ๊ฐ๋ ์ ๊ฐ์ ธ์๋ณด์๋ฉด AJAX๋ฅผ ์๊ฐํ๋ฉด ๋๋ค.
์ ํต์ ์ธ ์น ํ์ด์ง ๋ฐฉ์์์๋ ์ฌ์ฉ์๊ฐ ๋์์ ํ ๋ ๋ง๋ค ํ์ด์ง ์ ์ฒด๋ฅผ ์๋ก๊ณ ์นจํด์ผํ์ง๋ง AJAX๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ๋ถ๋ถ์์ ๋ฐ์ดํฐ๋ง ๋ฐ๊ฟ๋ผ์ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์๋ค.
์ฌ๊ธฐ์ ๋งํ๋ SPA๋ AJAX์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ ๊ตฌ์กฐ๋ผ๊ณ ์ดํดํ ์ ์๊ฒ ๋ค.
SFC(Single File Component)์ญ์ ๋ง ๊ทธ๋๋ก ํ๋์ ์ปดํฌ๋ํธ ์์์ HTML, CSS, JS๊ฐ ๊ด๋ฆฌ๋๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
์ ํต์ ์ผ๋ก ๋ฒํผ UI๋ ์ ๋ ฅ ํ๋ UI๋ฅผ ๋ง๋ ๋ค๊ณ ํ ๋ ์ด UI๋ฅผ ๊ตฌํํ๊ธฐ ์ํ HTML, CSS, JS๋ ๋ชจ๋ ํ๋์ HTML ํ์ผ ์์์ ์์ฑ๋๋ค.
ํ์ง๋ง Vue.js๋ ์ด๋ฌํ UI ์์๋ค์ด ๊ฐ์ ์ปดํฌ๋ํธ๋ผ๋ ๋จ์๋ก ๊ตฌ์ฑ๋์ด์๊ณ ํน์ UI ์์์ ์ปดํฌ๋ํธ ์์ ๊ทธ UI ์์๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํ HTML, CSS, JS๊ฐ ๋ค ๋ค์ด์๋ค.(๊ฐ๊ฟ์ด์์?)
๐ก Vue.js ํ์ผ์ ํ์ฅ๋ช ์ .vue์ด๋ค
๐ก Vue.js์์ ์ปดํฌ๋ํธ๋?
์ฌ์ฌ์ฉ ๊ฐ๋ฅํ Vue ์ธ์คํด์ค์ ํ ์กฐ๊ฐ ์ฆ, ์น ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ๋ณ์ ์ด๊ณ ๋ ๋ฆฝ์ ์ธ UI ์์๋ฅผ ์๋ฏธํ๋ค.์ปดํฌ๋ํธ๋ HTML, CSS, JavaScript๋ฅผ ํฌํจํ ์ ์๋ค.
๋ฒํผ, ์ ๋ ฅ ํ๋, ํผ๊ณผ ๊ฐ์ UI ์์๋ค์ด ๊ฐ๊ฐ ํ๋์ ์ปดํฌ๋ํธ๊ฐ ๋ ์ ์๋ค.
data, methods ๋ฐ mounted ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ๋ก์ง์ ์ ์ํ๋ ๊ฐ๋ฐ ์คํ์ผ.
์ต์ ์ผ๋ก ์ ์๋ ์์ฑ์ ์ปดํฌ๋ํธ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ํจ์ ๋ด๋ถ์ this์ ๋ ธ์ถ๋๋ค.
์์ธํ ๋ด์ฉ์ ์ค์ตํ๋ฉด์ ์๊ฒ๋ ์์ ์ง๊ธ์ ๋์ด๊ฐ์.
import ํด์ ๊ฐ์ ธ์จ Vue.js ๋ด์ฅ API ํจ์๋ค์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ๋ก์ง์ ์ ์ํ๋ ๊ฐ๋ฐ ์คํ์ผ
SFC์์ ์ปดํฌ์ง์
API๋ ์ผ๋ฐ์ ์ผ๋ก <script setup>๊ณผ ํจ๊ป ์ฌ์ฉํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์์ธํ ๋ด์ฉ์ ์ค์ตํ๋ฉด์ ์๊ฒ๋ ์์ ์ง๊ธ์ ๋์ด๊ฐ์.
์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ ํ๊ดด๋๊ธฐ๊น์ง์ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ์๋ฏธํ๋ค.
๋ผ์ดํ์ฌ์ดํด์ 8๊ฐ์ ๋ผ์ดํ์ฌ์ดํด ํ ์ผ๋ก ๋๋๋ฉฐ ๊ฐ๋ฐ์๋ ์ด ํ ์ ์ฌ์ฉํ์ฌ ํน์ ์์ ์ ์ํ๋ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค.
1. beforeCreate
์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ ๋ฐ์ํ ์์คํ
์ด ์ค์ ๋๊ธฐ ์ ์ ํธ์ถ
์ด ์์ ์์๋ data์ events๊ฐ ์์ง ํ์ฑํ๋์ง ์์
2. created
์ปดํฌ๋ํธ๊ฐ ์์ฑ๋ ํ, ๋ฐ์ดํฐ ๋ฐ์ ์์คํ
๊ณผ ์ด๋ฒคํธ๊ฐ ํ์ฑํ๋์์ง๋ง, DOM์ ๋ง์ดํธ๋๊ธฐ ์ ์ ํธ์ถ
์ด ๋จ๊ณ์์ ๋ฐ์ดํฐ์ ๋ฉ์๋์ ์ ๊ทผ ๊ฐ๋ฅ
3. beforeMount
์ปดํฌ๋ํธ๊ฐ DOM์ ๋ง์ดํธ๋๊ธฐ ์ง์ ์ ํธ์ถ
์ด ์์ ์์๋ template ๋๋ render ํจ์๊ฐ ์ปดํ์ผ๋์์ง๋ง, ์์ง ํ๋ฉด์ ๋ ๋๋ง๋์ง ์์
4. mounted
์ปดํฌ๋ํธ๊ฐ DOM์ ๋ง์ดํธ๋๊ณ ๋์ ํธ์ถ ์ฆ, SFC ๊ตฌ์กฐ์์ ํ
ํ๋ฆฟ ๋ถ๋ถ์ด ๊ทธ๋ ค์ง ํ์ ํธ์ถ
์ด ์์ ์์๋ ์ปดํฌ๋ํธ๋ฅผ ์กฐ์ํ ์ ์๋ DOM์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ํ ํ๋ฆฟ ๋๋ ๋ ๋๋ง ํจ์๊ฐ DOM์ ์ ์ฉ๋ ํ์ ์ํ์
5. beforeUpdate
๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ด DOM์ ์
๋ฐ์ดํธ ๋๊ธฐ ์ ์ ํธ์ถ
์ด ๋จ๊ณ์์๋ ์๋ก์ด ๋ฐ์ดํฐ๋ก DOM์ ์ ๋ฐ์ดํธํ๊ธฐ ์ ์ ๊ธฐ์กด DOM์ ์ ๊ทผ ๊ฐ๋ฅ
6. updated
๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์ํ DOM์ ์
๋ฐ์ดํธ๊ฐ ์๋ฃ๋ ํ ํธ์ถ
์ด ์์ ์์๋ ์ ๋ฐ์ดํธ๋ DOM์ ์ ๊ทผ ๊ฐ๋ฅ
7. beforeDestroy
์ปดํฌ๋ํธ๊ฐ ํ๊ดด๋๊ธฐ ์ง์ ์ ํธ์ถ
์ด ๋จ๊ณ์์๋ ์ธ์คํด์ค๊ฐ ์์ง ์์ ํ ํ๊ดด๋๊ธฐ ์ ์ด๋ฏ๋ก, ์ธ์คํด์ค์ ๋ฐ์ดํฐ์ ๋ฉ์๋์ ์ฌ์ ํ ์ ๊ทผํ ์ ์์
8. destroyed
์ปดํฌ๋ํธ๊ฐ ํ๊ดด๋ ํ์ ํธ์ถ
์ด ์์ ์์๋ ์ปดํฌ๋ํธ์ ๋ชจ๋ ๋๋ ํฐ๋ธ๊ฐ ํด์ ๋๊ณ , ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ ๊ฑฐ๋๋ฉฐ, ๋ฐ์ํ ์์คํ ๋ ํด์
๐ก ๋ฐ์์ฑ
์ ์ธ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ณํ์ ์ ์ํ ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค.๋ฐ์์ฑ์ ๋ง์กฑํ์ง ์๋ ํ๋ก๊ทธ๋๋ฐ์ ์ฐ๋ฆฌ๊ฐ ํน์ ์์ ์ ๋ณ์๋ฅผ ์ ์ธํ๋ค๊ณ ์ด์ ์์ ์ ์ด ๋ณ์๋ฅผ ํตํด ๊ณ์ฐ๋์๋ ๊ฐ์ด ๋ฐ๋์ง ์๋๋ค.
Vue.js์๋ ๋ฐ์ํ ์์คํ ์ด ์กด์ฌํ์ฌ ์ธ์คํด์ค์ ๋ฐ์ดํฐ ๊ฐ์ฒด์ ์๋ ์์ฑ์ด ํ๋ฉด์ ๋ฐ์ธ๋ฉ๋์ด ์์ ๋, ํด๋น ์์ฑ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋์ผ๋ก ํ๋ฉด์ ์ ๋ฐ์ดํธํ์ฌ ๋ณ๊ฒฝ๋ ๊ฐ์ ๋ฐ์ํด์ค๋ค.
์๋์ ๋ธ๋ก๊ทธ ๊ธ์ ์ค๋ช ์ด ์์ฃผ ์๋์ด์๋ค.
https://ko.vuejs.org/guide/extras/reactivity-in-depth
๐ก DOM(Document Object Model)
์น ๋ธ๋ผ์ฐ์ ๋ HTML ๋ฌธ์๋ฅผ ๋ก๋ํ ๋, ํด๋น ๋ฌธ์๋ฅผ DOM ํํ๋ก ๋ณํํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค.์ด๋ ๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ DOM์ ๋ฌธ์์ ๊ตฌ์กฐํ๋ ํํ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ฌธ์ ๊ตฌ์กฐ, ์คํ์ผ, ๋ด์ฉ ๋ฑ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ํด์ค๋ค.
DOM์ ํตํด JavaScript์ ๊ฐ์ ์คํฌ๋ฆฝํธ ์ธ์ด๊ฐ ์น ํ์ด์ง์ ํ ์คํธ, ์คํ์ผ, ์์ฑ ๋ฑ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต
๐ก ๋๋ ํฐ๋ธ
HTML ์์์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ด๋ ํ๋์ ๋ถ์ฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํน๋ณํ ํ ํฐ.
์ดํ์ ์์ธํ ๋ค๋ฃฐ ์์