๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/Vue.js

Vue ์ƒ๋ช…์ฃผ๊ธฐ

by 1mj 2022. 4. 13.

Vue ์ธ์Šคํ„ด์Šค ๋ผ์ดํ”„ ์‚ฌ์ดํด

์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ ๋ฐ์ดํ„ฐ ๊ด€์ฐฐ, ํ…œํ”Œ๋ฆฟ ์ปดํŒŒ์ผ, DOM ์— ๊ฐ์ฒด ์—ฐ๊ฒฐ, ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ DOM ์„ ์—…๋ฐ์ดํŠธ ํ•˜๊ฒŒ ๋œ๋‹ค.

 

โ‘  Creation: ์ปดํฌ๋„ŒํŠธ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„
์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM์— ์ถ”๊ฐ€๋˜๊ธฐ ์ „, ํด๋ผ์ด์–ธํŠธ๋‹จ๊ณผ ์„œ๋ฒ„๋‹จ ๋ Œ๋”๋ง ๋ชจ๋‘์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ผ๋กœ ์•„์ง ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋”์— ์ถ”๊ฐ€๋˜๊ธฐ ์ „์ด๊ธฐ ๋•Œ๋ฌธ์— ๋”์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ this.$el๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

- beforeCreate
Vue.JS์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ›… ์ค‘์—์„œ ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰ ๋˜๋Š” ํ›…์ž…๋‹ˆ๋‹ค. data์™€ ์ด๋ฒคํŠธ($on, $once, $off, $emit), ๊ฐ์‹œ์ž($watch)๋“ฑ์ด ์„ค์ • ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ›…์ด๋‹ค.
- created
data, computed, methods, watch ๋“ฑ๊ณผ ๊ฐ™์€ ์˜ต์…˜ ์„ค์ •์ด ์™„๋ฃŒ๋œ ์‹œ์ ์ด๊ธฐ ๋•Œ๋ฌธ์—, data ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง DOM์— ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— $el์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

โ‘ก Mounting: DOM ์‚ฝ์ž… ๋‹จ๊ณ„
์ดˆ๊ธฐ ๋ Œ๋”๋ง ์ง์ „์— ์ปดํฌ๋„ŒํŠธ์— ์ง์ ‘ ์ ‘๊ทผ, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
- beforeMount
์ปดํฌ๋„ŒํŠธ ์ดˆ๊ธฐ์— data๊ฐ€ ์„ธํŒ…๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด created ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ›…์„, ๋ Œ๋”๋ง ๋˜๊ณ  DOM์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋ฉด mounted ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ›…์ด๋‹ค.
- mounted
์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM์— ์ถ”๊ฐ€ ๋œ ํ›„ ํ˜ธ์ถœ๋˜๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ›…์ด๋‹ค. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์€ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

$el์„ ์‚ฌ์šฉํ•˜์—ฌ DOM์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค. mounted ํ›…์ด ํ˜ธ์ถœ๋˜์—ˆ๋‹ค๊ณ  ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ ๋˜์—ˆ๋‹ค๊ณ  ๋ณด์žฅํ•  ์ˆ˜๋Š” ์—†๋‹ค.

์ „์ฒด๊ฐ€ ๋ Œ๋”๋ง ๋ณด์žฅ๋œ ์ƒํƒœ์—์„œ ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” $nextTick์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
๋ถ€๋ชจ์™€ ์ž์‹ ๊ด€๊ณ„์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•œ ์ˆœ์„œ๋กœ mounted๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค. ์ฆ‰ ๋ถ€๋ชจ์˜ mountedํ›…์ด ์ž์‹์˜ mountedํ›…๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ์˜คํžˆ๋ ค ๊ทธ ๋ฐ˜๋Œ€์ด๋‹ค.

โ‘ข Updating: Diff ๋ฐ ์žฌ๋ Œ๋”๋ง ๋‹จ๊ณ„
์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ˜์‘ํ˜• ์†์„ฑ๋“ค์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์–ด๋–ค ์ด์œ ๋กœ ์žฌ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒ๋˜๋ฉด ์‹คํ–‰, ์„œ๋ฒ„ ๋ Œ๋”๋ง์—์„œ๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.
- beforeUpdate
์—…๋ฐ์ดํŠธ ๋œ ๊ฐ’๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์—…๋ฐ์ดํŠธ ๋œ ๊ฐ’์œผ๋กœ ๋‹ค๋ฅธ ๊ฐ’๋“ค์„ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํ›…์—์„œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋‹ค์‹œ beforeUpdate ํ›…์ด ํ˜ธ์ถœ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์งˆ ๊ฑฑ์ •์€ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
- updated
DOM์ด ์—…๋ฐ์ดํŠธ ๋œ ํ›„ ํ˜ธ์ถœ ๋˜๋Š” ํ›…์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ ๋œ ํ›„์˜ DOM์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ ์šฉํ•œ ํ›…์ด๋‹ค. mounted ํ›…๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์žฌ ๋ Œ๋”๋ง์ด ๋๋‚ฌ๋‹ค๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋œ ์ƒํƒœ์—์„œ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” $nextTick์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. beforeUpdate ํ›…๊ณผ ๋‹ค๋ฅด๊ฒŒ updated ํ›…์—์„œ data๋ฅผ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜๋ฉด update ํ›…์ด ํ˜ธ์ถœ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.

โ‘ฃ Destroy: ์ปดํฌ๋„ŒํŠธ ์ œ๊ฑฐ ์‹œ ์‹คํ–‰
- beforeDestroy
์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ œ๊ฑฐ ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ›…์ด๋‹ค. ์ด ํ›…์—์„œ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ณธ๋ž˜์˜ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์˜จ์ „ํ•œ ์ƒํƒœ์ด๋‹ค. ์ด ํ›…์—์„œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ•ด์ œํ•˜๊ฑฐ๋‚˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋™์ž‘์œผ๋กœ ํ• ๋‹น ๋ฐ›์€ ์ž์›๋“ค์€ ํ•ด์ œํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•œ ํ›…์ด๋‹ค. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
- destroyed
์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ œ๊ฑฐ ๋œ ํ›„ ํ˜ธ์ถœ๋˜๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ›…์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ๋ชจ๋“  ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ(@click, @change ๋“ฑ..)์™€ ๋””๋ ‰ํ‹ฐ๋ธŒ(v-model, v-show ๋“ฑ..)์˜ ๋ฐ”์ธ๋”ฉ์ด ํ•ด์ œ ๋˜๊ณ , ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋„ ๋ชจ๋‘ ์ œ๊ฑฐ๋œ๋‹ค. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๋ผ์ดํ”„์‚ฌ์ดํด ํ›… ์„ค๋ช…
beforeCreate Vue ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ฐ€์žฅ ์ฒ˜์Œ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋‹จ๊ณ„
์ธ์Šคํ„ด์Šค์˜ data ์™€ methods ์†์„ฑ๊ณผ ํ™”๋ฉด ์š”์†Œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์•„ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ
created Vue ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๊ณ  data ์™€ methods ์†์„ฑ์ด ์ •์˜๋˜์–ด ๋‘ ์†์„ฑ ๊ฐ’์ด ์ ‘๊ทผ ๊ฐ€๋Šฅ
ํ™”๋ฉด ์š”์†Œ์— ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฐ๊ฒฐ๋˜๊ธฐ ์ „์œผ๋กœ template ์†์„ฑ์— ์ •์˜๋œ ๋”์—๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ
beforeMount template ์†์„ฑ์— ์ง€์ •ํ•œ ๋งˆํฌ์—… ์†์„ฑ์„ render() ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ el ์†์„ฑ์— ์ง€์ •ํ•œ ํ™”๋ฉด ์š”์†Œ์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋ถ€์ฐฉํ•˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ
mounted el ์†์„ฑ์—์„œ ์ง€์ •ํ•œ ํ™”๋ฉด ์š”์†Œ์— ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฐ๊ฒฐ๋œ ํ›„ ํ˜ธ์ถœ
template ์†์„ฑ์— ์ •์˜๋œ ๋”์— ์ ‘๊ทผํ•˜์—ฌ ํ™”๋ฉด ์š”์†Œ ์ œ์–ด ๊ฐ€๋Šฅ
beforeUpdate ์ธ์Šคํ„ด์Šค ์†์„ฑ์ด ํ™”๋ฉด์— ์—ฐ๊ฒฐ๋˜๊ณ  ๊ด€์ฐฐํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ํ™”๋ฉด์— ๋ฐ˜์˜๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ
updated ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  ๋‚˜์„œ ํ™”๋ฉด ์š”์†Œ ์ œ์–ด ๊ฐ€๋Šฅ
beforeDestroy Vue ์ธ์Šคํ„ด์Šค๊ฐ€ ์—†์–ด์ง€๊ธฐ ์ง์ „์— ํ˜ธ์ถœ
destroyed Vue ์ธ์Šคํ„ด์Šค๊ฐ€ ์—†์–ด์ง€๊ณ  ๋‚œ ํ›„ ํ˜ธ์ถœ

 

์ฐธ๊ณ ์ž๋ฃŒ ๋ฐ ์ถœ์ฒ˜ ๐Ÿ™‡‍โ™‚๏ธ

https://v3.ko.vuejs.org/guide/composition-api-lifecycle-hooks.html

https://hyeooona825.tistory.com/40

 

'๊ฐœ๋ฐœ > Vue.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

vue router / query vs params  (0) 2022.06.14
$nextTick()  (0) 2022.04.18
Vue3 Composition API  (0) 2022.04.06
Vuex / ์ƒํƒœ๊ด€๋ฆฌ / Vuex ํŒจํ„ด ๋ฐ ์š”์†Œ  (0) 2022.04.05
Vue ๋ผ์šฐํ„ฐ / SPA / Router ๊ฐ’ ์ „๋‹ฌ  (0) 2022.04.04

๋Œ“๊ธ€