๐ ๋ชฉ์ฐจ
๋ทฐJS๋ ๊ฐ๋ณ๊ณ ์ ์ฐํ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ๋ก, ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ๋ง์ด ์ฌ์ฉ๋ผ์. ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ํตํด ๋ณต์กํ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ ๊ฐ๋จํ๊ฒ ๊ด๋ฆฌํ ์ ์์ด์. ํนํ ๋ฐ์ํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋๋ถ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ์ด ํ๋ฉด์ ์ฆ์ ๋ฐ์๋๋ ํน์ง์ด ์์ด์.
๋ทฐJS๋ ๋ฌ๋ ์ปค๋ธ๊ฐ ๋ฎ๊ณ ๊ฐ๋ฒผ์ ์ด๋ณด ๊ฐ๋ฐ์๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ ์ฅ์ ์ด ์์ด์. ์ต๊ทผ์๋ React์ Angular์ ํจ๊ป ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ ์ค ํ๋๋ก ์๋ฆฌ ์ก์๋ต๋๋ค.
๋ทฐJS๋ ๋ฌด์์ธ๊ฐ?
๋ทฐJS๋ ์๋ฐ ์ (Evan You)๊ฐ 2014๋ ์ ๊ฐ๋ฐํ ์คํ์์ค ํ๋ก ํธ์๋ ํ๋ ์์ํฌ์์. ๋ฆฌ์กํธ์ ์ ์ธํ ๋ ๋๋ง๊ณผ ์ต๊ทค๋ฌ์ ํ ํ๋ฆฟ ๊ตฌ๋ฌธ์ ์ ๋ชฉํ์ฌ ๊ฐ๋จํ๋ฉด์๋ ๊ฐ๋ ฅํ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํด์.
๋ทฐJS์ ์ฃผ์ ๋ชฉํ๋ "์ ์ง์ ์ฑํ"์ด์์. ์ฒ์์๋ ๋จ์ํ UI ๊ตฌ์ฑ ์์๋ก ์์ํด, ํ๋ก์ ํธ๊ฐ ์ปค์ง์๋ก ์ํ ๊ด๋ฆฌ, ๋ผ์ฐํฐ ๋ฑ์ ์ถ๊ฐํ์ฌ ์ ์ง์ ์ผ๋ก ํ์ฅํ ์ ์์ด์. ๋๋ถ์ ์๊ท๋ชจ ํ๋ก์ ํธ๋ถํฐ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ๊น์ง ํญ๋๊ฒ ํ์ฉํ ์ ์์ด์.
๋ทฐJS๋ MVVM(Model-View-ViewModel) ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ, ๋ฐ์ดํฐ์ ๋ทฐ๋ฅผ ๊น๋ํ๊ฒ ๋ถ๋ฆฌํ ์ ์์ด์. ์ด๋ก ์ธํด ์ฝ๋์ ์ ์ง๋ณด์๊ฐ ์ฝ๊ณ , ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ธฐ๋ ํธ๋ฆฌํด์.
๐ก ๋ทฐJS์ ๊ธฐ๋ณธ ํน์ง
ํน์ง | ์ค๋ช |
---|---|
๊ฒฝ๋์ฑ | ํ๋ ์์ํฌ ์์ฒด๊ฐ ๊ฐ๋ฒผ์ ์ด๊ธฐ ๋ก๋ฉ ์๋๊ฐ ๋น ๋ฆ |
์ปดํฌ๋ํธ ๊ธฐ๋ฐ | UI๋ฅผ ์์ ๋จ์๋ก ๋๋์ด ๊ด๋ฆฌ ๊ฐ๋ฅ |
์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ | ๋ฐ์ดํฐ์ ๋ทฐ๊ฐ ์ค์๊ฐ์ผ๋ก ๋๊ธฐํ๋จ |
๋ทฐJS์ ์ฅ์ ์ ๋จ์ํจ๊ณผ ํ์ฅ์ฑ์ด์์. ์ด๊ธฐ์ ์์ ํ๋ก์ ํธ์ ๋์ ํ๊ธฐ ์ฝ๊ณ , ๋ํ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ํ์ฅํ ๋๋ ๋ถ๋ด์ด ์ ์ด์. ๋๋ถ์ ์คํํธ์ ๋ถํฐ ๋๊ธฐ์ ๊น์ง ๋ค์ํ ๊ท๋ชจ์ ํ๋ก์ ํธ์์ ํ์ฉ๋๊ณ ์๋ต๋๋ค.
๋ทฐJS์ ์ฃผ์ ํน์ง
๋ทฐJS๋ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง๊ด์ ์ด๊ณ ๊ฐ๋จํ๊ฒ ์ ๊ณตํฉ๋๋ค. ํนํ, ๋ณต์กํ SPA(Single Page Application)๋ฅผ ๊ตฌ์ถํ ๋ ์ ์ฉํ ๋ค์ํ ํน์ง์ ๊ฐ์ง๊ณ ์์ด์.
๋ํ์ ์ธ ํน์ง์ผ๋ก๋ ๋ฐ์ํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ, ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ, ๊ฐ์ DOM, ๋ผ์ฐํฐ ์ง์ ๋ฑ์ด ์์ด์. ์ด๋ฌํ ํน์ง ๋๋ถ์ ๋ทฐJS๋ ๋ค์ํ ๊ท๋ชจ์ ํ๋ก์ ํธ์์ ์ ์ฐํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ต๋๋ค.
๋ํ ๋ทฐJS๋ ๋จ์ผ ํ์ผ ์ปดํฌ๋ํธ(SFC, Single File Component)๋ฅผ ์ง์ํ์ฌ HTML, CSS, JavaScript๋ฅผ ํ ํ์ผ์ ์์ฑํ ์ ์์ด์. ๋๋ถ์ ์ ์ง๋ณด์๊ฐ ํธ๋ฆฌํ๊ณ , ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์.
๐ ๋ทฐJS์ ํต์ฌ ํน์ง ์ ๋ฆฌ
ํน์ง | ์ค๋ช | ์ฅ์ |
---|---|---|
๋ฐ์ํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ | ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ทฐ๋ ์๋์ผ๋ก ๊ฐฑ์ ๋จ | ์ค์๊ฐ UI ์ ๋ฐ์ดํธ |
๊ฐ์ DOM | DOM ์กฐ์์ ์ต์ํํ์ฌ ์ฑ๋ฅ ํฅ์ | ๋น ๋ฅธ ๋ ๋๋ง |
๋จ์ผ ํ์ผ ์ปดํฌ๋ํธ | HTML, CSS, JS๋ฅผ ํ๋๋ก ๊ด๋ฆฌ | ์ฝ๋ ๊ตฌ์กฐํ ์ฉ์ด |
๋ผ์ฐํฐ ์ง์ | ํ์ด์ง ์ด๋ ์์ด URL ๋ณ๊ฒฝ | SPA ๊ตฌ์ถ์ ์ ํฉ |
๋ทฐJS์ ๋ ๋ค๋ฅธ ๋งค๋ ฅ์ ์์ฝ์์คํ ์ด ์ ๊ฐ์ถฐ์ ธ ์๋ค๋ ์ ์ด์์. ๋ทฐ ๋ผ์ฐํฐ(Vue Router), ๋ทฐ์์ค(Vuex), ๋ทฐ CLI ๋ฑ ๋ค์ํ ๊ณต์ ๋๊ตฌ๋ค์ด ์์ด์ ํ๋ก์ ํธ ๊ด๋ฆฌ์ ์ํ ๊ด๋ฆฌ๊ฐ ์์ํ๋ต๋๋ค.
์ด๋ฌํ ํน์ง ๋๋ถ์ ๋ทฐJS๋ ์คํํธ์ ๋ถํฐ ๋๊ท๋ชจ ๊ธฐ์ ๊น์ง ๋ค์ํ ๋ถ์ผ์์ ์ฑํ๋์ด ์ฌ์ฉ๋๊ณ ์์ด์. ํ์ต ๋์ด๋๋ ์๋์ ์ผ๋ก ๋ฎ์ ๋น ๋ฅด๊ฒ ํ๋ก์ ํธ์ ์ ์ฉํ ์ ์์ฃ .
๋ทฐJS์ ์ํคํ ์ฒ์ ๊ตฌ์กฐ
๋ทฐJS์ ์ํคํ ์ฒ๋ MVVM(Model-View-ViewModel) ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํด์. ์ด ๊ตฌ์กฐ ๋๋ถ์ ๋ฐ์ดํฐ์ ๋ทฐ๋ฅผ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ ์ ์์ด์. ํนํ, ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ฉด ๋ทฐ๋ ์ฆ์ ์ ๋ฐ์ดํธ๋๋ ๋ฐ์ํ ํน์ฑ์ด ์ฅ์ ์ด์์.
๋ทฐJS์ ํต์ฌ ๊ตฌ์กฐ๋ ํฌ๊ฒ "๋ทฐ ์ธ์คํด์ค", "ํ ํ๋ฆฟ", "๋๋ ํฐ๋ธ", "์ปดํฌ๋ํธ"๋ก ๋๋ ์ ์์ด์. ๋ทฐ ์ธ์คํด์ค๋ ์ฑ์ ํต์ฌ ๊ฐ์ฒด๋ก, ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ DOM๊ณผ ์ฐ๊ฒฐํ์ฌ ํ๋ฉด์ ๊ตฌ์ฑํด์.
ํ ํ๋ฆฟ์ HTML ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ๊ณณ์ผ๋ก, ๋๋ ํฐ๋ธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๊ตฌํํด์. v-bind, v-model, v-for ๊ฐ์ ๋๋ ํฐ๋ธ๋ ๋ฐ์ดํฐ์ ํ๋ฉด์ ๋๊ธฐํํ๋ ์ญํ ์ ํ๋ต๋๋ค.
๐ ๋ทฐJS ์ํคํ ์ฒ ๊ตฌ์ฑ ์์
๊ตฌ์ฑ ์์ | ์ค๋ช | ์์ |
---|---|---|
๋ทฐ ์ธ์คํด์ค | ๋ทฐ ์ฑ์ ํต์ฌ ๊ฐ์ฒด | new Vue({ el: '#app' }) |
ํ ํ๋ฆฟ | HTML๊ณผ ๋๋ ํฐ๋ธ๋ก ๊ตฌ์ฑ๋ ๊ตฌ์กฐ | <div v-bind:class="active"> |
๋๋ ํฐ๋ธ | ํน์ ๋์์ ์ํํ๋ ์์ฑ | v-if, v-for, v-model |
์ปดํฌ๋ํธ | ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ์กฐ๊ฐ | <my-component> |
๋ทฐ ์ธ์คํด์ค๋ ๋ทฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ฌ์ด์์. ์์ฑํ ๋ el ์์ฑ์ ํตํด DOM๊ณผ ์ฐ๊ฒฐํ๋ฉฐ, data ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ์ํ๋ฅผ ๊ด๋ฆฌํด์. ๋ฉ์๋(methods) ์์ฑ์ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ผ์.
์ปดํฌ๋ํธ๋ ์ฌ์ฌ์ฉ์ฑ์ ๊ทน๋ํํ์ฌ, ํ๋์ ํ์ด์ง๋ฅผ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ก ๋๋ ์ ์์ด์. ์ด๋ ๊ฒ ํ๋ฉด ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๊ณ , ์ฝ๋์ ๋ชจ๋ํ๋ ์์ฐ์ค๋ฝ๊ฒ ์ด๋ฃจ์ด์ ธ์.
์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ
๋ทฐJS์์ ์ปดํฌ๋ํธ๋ UI๋ฅผ ๊ตฌ์ฑํ๋ ํต์ฌ ๋จ์์์. ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๊ทน๋ํํ ์ ์๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ํํ์ฌ ๊ด๋ฆฌํ๊ธฐ ์ฌ์์. ํนํ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋ ํ์๋๋๋ค.
์ปดํฌ๋ํธ๋ HTML, CSS, JavaScript๋ฅผ ํ๋์ ํ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ "๋จ์ผ ํ์ผ ์ปดํฌ๋ํธ(SFC)" ํํ๋ก ์์ฑํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด์์. ์ด๋ฅผ ํตํด ํ๋ฉด ๊ตฌ์ฑ๊ณผ ๋ก์ง์ ํ๋์ ํ์ ํ ์ ์์ด ์ ์ง๋ณด์๊ฐ ์ฌ์์.
๋ทฐ ์ปดํฌ๋ํธ๋ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ก ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋๋ props์ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํด์. ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋๋ props๋ฅผ ์ฌ์ฉํ๊ณ , ๋ฐ๋๋ก ์์์ด ๋ถ๋ชจ์๊ฒ ์ ํธ๋ฅผ ๋ณด๋ผ ๋๋ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํด์.
๐ ์ปดํฌ๋ํธ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ํ๋ฆ
๊ตฌ์ฑ ์์ | ์ค๋ช | ์์ |
---|---|---|
Props | ๋ถ๋ชจ์์ ์์์ผ๋ก ๋ฐ์ดํฐ ์ ๋ฌ | <child-component :message="hello"> |
Emit | ์์์ด ๋ถ๋ชจ์๊ฒ ์ด๋ฒคํธ ์ ๋ฌ | this.$emit('update') |
Slot | ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์์ ๋ด์ฉ์ ์ ์ | <slot>๊ธฐ๋ณธ๊ฐ</slot> |
์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์ ๊ด๋ฆฌํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ๋ช ํํ๊ฒ ํ์ ํ ์ ์์ด์. ํ์ง๋ง ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ณต์กํด์ง๋ฉด ์ํ ๊ด๋ฆฌ ๋๊ตฌ(Vuex)๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์ข์์.
์๋ฅผ ๋ค์ด, ์ผํ๋ชฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ํ ๋ชฉ๋ก์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ๋ถ๋ฌ์ค๊ณ , ๊ฐ ์ํ์ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ ๋ props๋ฅผ ์ฌ์ฉํด์. ๋ฐ๋ฉด, ์ํ์ ํด๋ฆญํ์ฌ ์์ธ ํ์ด์ง๋ก ์ด๋ํ ๋๋ emit์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ์ฃ .
๋ด๊ฐ ์๊ฐํ์ ๋, ๋ทฐJS์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ ๋ฐฉ์์ ์ ๋ง ์ง๊ด์ ์ด์์. ํนํ ๋จ์ผ ํ์ผ ์ปดํฌ๋ํธ ๋๋ถ์ ์ฝ๋ ๊ตฌ์กฐ๊ฐ ๊น๋ํ๊ณ ํ์ฅ์ฑ๋ ๋ฐ์ด๋์ ์ค์ ํ๋ก์ ํธ์์๋ ๋ง์ด ์ฌ์ฉ๋๋ ์ด์ ๋ฅผ ์ ๊ฒ ๊ฐ์์.
๋ทฐ ์ธ์คํด์ค์ ์๋ช ์ฃผ๊ธฐ
๋ทฐJS์ ์ธ์คํด์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ์ญํ ์ ๋ด๋นํด์. ํ์ด์ง๋ฅผ ์ด๊ธฐํํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์ฌ์ฉ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ์ฃ . ์ด๋ฌํ ์ธ์คํด์ค๋ ํน์ ์๋ช ์ฃผ๊ธฐ(Lifecycle)๋ฅผ ๊ฐ์ง๊ณ ์์ด์.
๋ทฐ ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ณ ์ฌ๋ผ์ง๋ ๋์, ๋ค์ํ ๋จ๊ณ๋ณ ์ด๋ฒคํธ๋ฅผ ํ์ฉํ ์ ์์ด์. ์ด๋ฅผ ํตํด ์ด๊ธฐ ์ค์ , ๋ฐ์ดํฐ ๋ก๋ฉ, DOM ๊ฐฑ์ ๋ฑ ๋ค์ํ ์์ ์ ์ ์ ํ ์์ ์ ์ํํ ์ ์๋ต๋๋ค.
์๋ช ์ฃผ๊ธฐ๋ ํฌ๊ฒ ์์ฑ ๋จ๊ณ, ๋ง์ดํธ ๋จ๊ณ, ์ ๋ฐ์ดํธ ๋จ๊ณ, ์๋ฉธ ๋จ๊ณ๋ก ๋๋ ์ ์์ด์. ๊ฐ ๋จ๊ณ๋ณ๋ก ์ ๊ณต๋๋ ๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด ํน์ ์์ ์ ์ํ๋ ์์ ์ ์ํํ ์ ์์ด์.
๐ ๋ทฐ ์ธ์คํด์ค ์๋ช ์ฃผ๊ธฐ ๋จ๊ณ
๋จ๊ณ | ์ค๋ช | ์ฃผ์ ๋ฉ์๋ |
---|---|---|
์์ฑ ๋จ๊ณ | ์ธ์คํด์ค ์ด๊ธฐํ, ๋ฐ์ดํฐ์ ์ด๋ฒคํธ ์ค์ | beforeCreate, created |
๋ง์ดํธ ๋จ๊ณ | DOM์ ์ธ์คํด์ค ์ฐ๊ฒฐ | beforeMount, mounted |
์ ๋ฐ์ดํธ ๋จ๊ณ | ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ DOM ๊ฐฑ์ | beforeUpdate, updated |
์๋ฉธ ๋จ๊ณ | ์ธ์คํด์ค ์ ๊ฑฐ, ๋ฆฌ์์ค ํด์ | beforeDestroy, destroyed |
์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๋ถ๋ฌ์ฌ ๋๋ created
๋ฉ์๋๋ฅผ ๋ง์ด ์ฌ์ฉํด์. ์ด ๋ฉ์๋๋ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ์งํ์ ์คํ๋์ด ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ๊ธฐ์ ์ ํฉํ์ฃ .
๋ํ ํ๋ฉด์ ๋ทฐ๊ฐ ๋ ๋๋ง๋ ํ ์คํ๋๋ mounted
๋ฉ์๋์์๋ DOM ์กฐ์์ด๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๊ธฐํ๋ฅผ ์์ฃผ ์ํํด์. ์ด๋ ์ค์ ๋ก ํ๋ฉด์ด ๋ณด์ธ ํ ์์
์ด ํ์ํ ๋ ์ ์ฉํด์.
์
๋ฐ์ดํธ ๋จ๊ณ์์๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค beforeUpdate
์ updated
๋ฉ์๋๊ฐ ์คํ๋ผ์. ๋ฐ์ดํฐ ์์ ์ง์ ์ ์ฒ๋ฆฌํด์ผ ํ ์์
์ beforeUpdate
์์, ์์ ํ DOM ํ์ธ์ด ํ์ํ ๋๋ updated
์์ ์ํํ๋ฉด ์ข์์.
๋ทฐJS ์ํ๊ณ์ ๋๊ตฌ
๋ทฐJS๋ ๋จ์ํ ํ๋ ์์ํฌ๋ฅผ ๋์ด, ๋ค์ํ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํจ๊ปํ๋ ์ํ๊ณ๋ฅผ ๊ฐ์ถ๊ณ ์์ด์. ์ด๋ฌํ ๋๊ตฌ๋ค์ ํ์ฉํ๋ฉด ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ด๊ณ ํ๋ก์ ํธ ๊ด๋ฆฌ๊ฐ ์ฌ์์ง๋ต๋๋ค.
๋ํ์ ์ธ ๋๊ตฌ๋ก๋ ๋ทฐ ๋ผ์ฐํฐ(Vue Router), ๋ทฐ์์ค(Vuex), ๋ทฐ CLI, ๋ทฐ ๋ฐ๋ธํด(Vue DevTools)์ด ์์ด์. ๊ฐ๊ฐ์ ๋๊ตฌ๋ ํน์ ์ฉ๋์ ๋ง๊ฒ ์ฌ์ฉ๋๋ฉฐ, ๋ทฐJS ํ๋ก์ ํธ์ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ๋์ฌ์ค์.
๋ทฐ ๋ผ์ฐํฐ๋ SPA(Single Page Application) ๊ฐ๋ฐ ์ ํ์ด์ง ์ ํ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ผ์. URL ๋ณ๊ฒฝ ์ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ง ์๊ณ ๋์ ์ผ๋ก ์ฝํ ์ธ ๋ฅผ ํ์ํ ์ ์์ด์.
๐ง ๋ทฐJS ์ํ๊ณ ์ฃผ์ ๋๊ตฌ
๋๊ตฌ ์ด๋ฆ | ์ค๋ช | ํ์ฉ ์ฌ๋ก |
---|---|---|
Vue Router | SPA์์ ๋ผ์ฐํ ๊ด๋ฆฌ | ๋ค์ค ํ์ด์ง ์ ํ |
Vuex | ์ค์ ์ํ ๊ด๋ฆฌ | ๋ฐ์ดํฐ ๊ณต์ ๋ฐ ๊ด๋ฆฌ |
Vue CLI | ํ๋ก์ ํธ ์ด๊ธฐ ์ค์ ๊ณผ ๊ด๋ฆฌ | ํ๋ก์ ํธ ๊ตฌ์กฐํ |
Vue DevTools | ๋๋ฒ๊น ๊ณผ ์ํ ๊ฒ์ฌ | ์ปดํฌ๋ํธ ์ํ ๋ชจ๋ํฐ๋ง |
ํนํ Vuex๋ ์ํ ๊ด๋ฆฌ๊ฐ ๋ณต์กํด์ง ๋ ์ ์ฉํด์. ์ฌ๋ฌ ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ๋, ์ค์ ์ ์ฅ์๋ฅผ ํตํด ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ด์. ์๋ฅผ ๋ค์ด, ๋ก๊ทธ์ธ ์ํ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ญ์ผ๋ก ๊ด๋ฆฌํ ๋ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํด์.
๋ทฐ CLI๋ ํ๋ก์ ํธ ์์ฑ๋ถํฐ ๋ฐฐํฌ๊น์ง ์ ์ฒด ์ํฌํ๋ก์ฐ๋ฅผ ๊ด๋ฆฌํด์ค์. ๋ค์ํ ํ๋ฌ๊ทธ์ธ์ ํตํด Babel ์ค์ ์ด๋ ํ์ ์คํฌ๋ฆฝํธ ํตํฉ๋ ๊ฐํธํ๊ฒ ํ ์ ์์ด์.
๋ทฐ ๋ฐ๋ธํด์ ์ฌ์ฉํ๋ฉด ๋ธ๋ผ์ฐ์ ์์ ๋ทฐ ์ธ์คํด์ค์ ์ํ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์์ด์. ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋ฅผ ํ๋์ ํ์ ํ ์ ์์ด ๋๋ฒ๊น ์๋ ์ ์ฉํ๋ต๋๋ค.
FAQ
Q1. VueJS๋ฅผ ์ฒ์ ๋ฐฐ์ธ ๋ ์ด๋ค ์ ์ ์ฃผ์ํด์ผ ํ๋์?
A1. ๋ทฐJS์ ๋ฐ์ํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๊ฐ๋ ์ ๋จผ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํด์. ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ทฐ๊ฐ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๋ ๊ตฌ์กฐ๋ฅผ ์ ํ์ ํด์ผ ํด์.
Q2. VueJS์ React์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
A2. VueJS๋ ํ ํ๋ฆฟ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๊ฐ ์ง๊ด์ ์ด์์. ๋ฐ๋ฉด React๋ JSX๋ฅผ ์ฌ์ฉํด JavaScript ์ค์ฌ์ผ๋ก ์์ฑ๋ผ์. ํ์ต ๋์ด๋ ์ธก๋ฉด์์๋ VueJS๊ฐ ๋ ์ฝ๋ค๊ณ ๋๋ผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์.
Q3. Vuex๋ฅผ ๋ฐ๋์ ์ฌ์ฉํด์ผ ํ๋์?
A3. ๋ชจ๋ ํ๋ก์ ํธ์ Vuex๊ฐ ํ์ํ ๊ฒ์ ์๋์์. ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ๊ตํ์ด ๋ง๊ณ ๋ณต์กํ๋ค๋ฉด ์ ์ฉํ์ง๋ง, ๊ฐ๋จํ ํ๋ก์ ํธ์์๋ ์ง์ ์ํ๋ฅผ ๊ด๋ฆฌํด๋ ๋ฌด๋ฐฉํด์.
Q4. Vue Router ์์ด๋ SPA๋ฅผ ๋ง๋ค ์ ์๋์?
A4. ๊ฐ๋ฅํ์ง๋ง ๋ถํธํด์. URL ๊ด๋ฆฌ์ ํ์ด์ง ์ ํ ๋ก์ง์ ์ง์ ๊ตฌํํด์ผ ํ๊ธฐ ๋๋ฌธ์ Vue Router๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์ ์ด์์.
Q5. VueJS ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ ๋ ์ฃผ์ํ ์ ์?
A5. ๋น๋ ์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐ๊ณผ ๋ฐฐํฌ ํ๊ฒฝ์ ๋ช ํํ ๊ด๋ฆฌํด์ผ ํด์. ๋ํ ์ฝ๋ ๋๋ ํ์ ์์ถ์ ํตํด ์ฑ๋ฅ ์ต์ ํ๋ ํ์์์.
Q6. ๋ทฐ ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ด๋ป๊ฒ ํ๋์?
A6. ๋ถ๋ชจ์์ ์์์ผ๋ก๋ props๋ฅผ ์ฌ์ฉํ๊ณ , ์์์์ ๋ถ๋ชจ๋ก๋ ์ด๋ฒคํธ($emit)๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์. ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ์ฝํ ๊ฒฝ์ฐ Vuex๋ฅผ ํ์ฉํ ์ ์์ด์.
Q7. Vue3์์ Composition API๋ฅผ ๊ผญ ์จ์ผ ํ๋์?
A7. ๊ผญ ์ฌ์ฉํ ํ์๋ ์์ง๋ง, ๋ณต์กํ ์ํ ๊ด๋ฆฌ๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์์ด์. Options API์ ํผ์ฉ๋ ๊ฐ๋ฅํ๋ ํ๋ก์ ํธ์ ๋ง๊ฒ ์ ํํ๋ฉด ๋ผ์.
Q8. ๋ทฐJS๋ก ๋ชจ๋ฐ์ผ ์ฑ๋ ๋ง๋ค ์ ์๋์?
A8. ๋ค, VueJS๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ํ๋ ์์ํฌ์ธ NativeScript๋ Quasar๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ๋ ๊ฐ๋ฐํ ์ ์์ด์.