[Vue.js] ๊ธฐ์ดˆ

์ง‘์ค‘๋งž์€ ๋„๋‘‘๋ ฅยท2024๋…„ 3์›” 29์ผ

์›น ๊ฐœ๋ฐœ

๋ชฉ๋ก ๋ณด๊ธฐ
8/14
post-thumbnail

0. ๐Ÿ”– ๋ชฉ์ฐจ


  1. Vue.js ์ •์˜
    1-1. ๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ
    1-2. Vue.js๋ž€?
    1-3. Vue.js์˜ ๊ตฌ์กฐ
  2. Vue.js ๊ฐœ๋ฐœ์Šคํƒ€์ผ
    2-1. Options API
    2-2. Composition API
  3. ๋ผ์ดํ”„์‚ฌ์ดํด(LifeCycle)
    3-1. ๋ผ์ดํ”„์‚ฌ์ดํด์ด๋ž€?
    3-2. ๋ผ์ดํ”„์‚ฌ์ดํด ํ›…

1. Vue.js ์ •์˜


1-1. ๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ

๋“œ๋””์–ด ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์˜ ์ฒซ ํฌ๋ฌธ์„ ์—ด์—ˆ๋‹ค. ์ฒซ ์‹œ์ž‘์€ Vue.js๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์‹œ์ž‘ํ•œ๋‹ค.

"๊ตฌ๋””์‚ฌ๋Š” ๊ฐœ๋ฐœ์ž 9diin"๋‹˜์˜ "2024 Vue.js ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ - Full Course (feat. Composition API)" ์˜์ƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณต๋ถ€ํ•  ์˜ˆ์ •์ด๋‹ค(์ข‹์€ ๊ฐ•์˜ ๋งŒ๋“ค์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค).

์—ฌ๋Ÿฌ ํ˜„์ง์ž๋ถ„๋“ค์˜ ์กฐ์–ธ์— ๋”ฐ๋ฅด๋ฉด ํ˜„์กดํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ค‘ Vue.js ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ UI๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์—†๋‹ค๊ณ  ํ•˜์…จ๋‹ค. ์ƒ์‚ฐ์„ฑ์ด ์—„์ฒญ๋‚˜๋‹ค๊ณ ...

์•”ํŠผ ๋‚ด๊ฐ€ ์ทจ์งํ•˜๊ธฐ ์ „ ๊นŒ์ง€ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์„ฑํ• ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ตœ๋Œ€ํ•œ์œผ๋กœ ๋‚˜๋ฅผ ๊ฐˆ์•„๋„ฃ์–ด๋ณผ ์˜ˆ์ •์ด๋‹ค.

UI๊ฐ€ ๋ชป์ƒ๊ฒจ๋„ ์ข‹๋‹ค! RESTfulํ•˜์ง€ ์•Š์•„๋„ ์ข‹๋‹ค! ๊ทธ๋ž˜๋„ ์™„์„ฑ์€ ํ•˜์ž!

1-2. Vue.js๋ž€?

Vue.js๋ž€ ์›น ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์‰ฝ๊ณ  ๊ฐ•๋ ฅํ•˜๋ฉฐ ๋‹ค์žฌ๋‹ค๋Šฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

Vue.js์˜ ๊ฐ•์ ์€ ๋‚ฎ์€ ์ง„์ž…์žฅ๋ฒฝ๊ณผ ๋‚ฎ์€ ๋Ÿฌ๋‹์ปค๋ธŒ๋ฅผ ๊ฐ€์ง€๋ฉด์„œ๋„ ๋†’์€ ํผํฌ๋จผ์Šค๋ฅผ ์ง€๋‹Œ๋‹ค๋Š” ์ ์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ์— FE ์‹œ์žฅ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ์Šคํƒ์ด React์ด๊ณ  ๊ทธ ๋‹ค์Œ์ด Vue.js๋ผ๊ณ  ํ•œ๋‹ค.

1-3. Vue.js์˜ ๊ตฌ์กฐ

1-3-1. SPA ๊ตฌ์กฐ

SPA(Single Page Application)๋Š” ๋ง ๊ทธ๋Œ€๋กœ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€์—์„œ ์œ ์ €๊ฐ€ ์›ํ•˜๋Š” ์ •๋ณด๋งŒ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

์ข€ ๋” ์นœ์ˆ™ํ•œ ๊ฐœ๋…์„ ๊ฐ€์ ธ์™€๋ณด์ž๋ฉด AJAX๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์ „ํ†ต์ ์ธ ์›น ํŽ˜์ด์ง€ ๋ฐฉ์‹์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ž‘์„ ํ•  ๋•Œ ๋งˆ๋‹ค ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•ด์•ผํ–ˆ์ง€๋งŒ AJAX๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„์—์„œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ”๊ฟ”๋ผ์šฐ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” SPA๋„ AJAX์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ตฌ์กฐ๋ผ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

1-3-2. SFC ๊ตฌ์กฐ

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 ์š”์†Œ๋“ค์ด ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

2. Vue.js ๊ฐœ๋ฐœ์Šคํƒ€์ผ


2-1. Options API

data, methods ๋ฐ mounted ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๋กœ์ง์„ ์ •์˜ํ•˜๋Š” ๊ฐœ๋ฐœ ์Šคํƒ€์ผ.

์˜ต์…˜์œผ๋กœ ์ •์˜๋œ ์†์„ฑ์€ ์ปดํฌ๋„ŒํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this์— ๋…ธ์ถœ๋œ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‹ค์Šตํ•˜๋ฉด์„œ ์•Œ๊ฒŒ๋  ์˜ˆ์ • ์ง€๊ธˆ์€ ๋„˜์–ด๊ฐ€์ž.

2-2. Composition API

import ํ•ด์„œ ๊ฐ€์ ธ์˜จ Vue.js ๋‚ด์žฅ API ํ•จ์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๋กœ์ง์„ ์ •์˜ํ•˜๋Š” ๊ฐœ๋ฐœ ์Šคํƒ€์ผ

SFC์—์„œ ์ปดํฌ์ง€์…˜ API๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ <script setup>๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‹ค์Šตํ•˜๋ฉด์„œ ์•Œ๊ฒŒ๋  ์˜ˆ์ • ์ง€๊ธˆ์€ ๋„˜์–ด๊ฐ€์ž.

3. ๋ผ์ดํ”„์‚ฌ์ดํด(LifeCycle)


3-1. ๋ผ์ดํ”„์‚ฌ์ดํด์ด๋ž€?

์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ํŒŒ๊ดด๋˜๊ธฐ๊นŒ์ง€์˜ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋ผ์ดํ”„์‚ฌ์ดํด์€ 8๊ฐœ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ํ›…์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ ๊ฐœ๋ฐœ์ž๋Š” ์ด ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์‹œ์ ์— ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

3-2. ๋ผ์ดํ”„์‚ฌ์ดํด ํ›…

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 ์š”์†Œ์— ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์ด๋‚˜ ํ–‰๋™์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํŠน๋ณ„ํ•œ ํ† ํฐ.
์ดํ›„์— ์ž์„ธํžˆ ๋‹ค๋ฃฐ ์˜ˆ์ •

profile
ํ‹€๋ฆฐ_๋‚ด์šฉ์ด_์žˆ๋‹ค๋ฉด_๋งํ•ด์ฃผ์„ธ์š”.

0๊ฐœ์˜ ๋Œ“๊ธ€