๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

๋ทฐJS์˜ ๊ฐœ๋…๊ณผ ํ™œ์šฉ๋ฒ•

by infomationtree 2025. 4. 10.
๋ฐ˜์‘ํ˜•

๋ทฐJS์˜ ๊ฐœ๋…๊ณผ ํ™œ์šฉ๋ฒ•

๋ทฐ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๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์–ด์š”.

๋ฐ˜์‘ํ˜•