๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
WEB/Front-End๐ŸŒ

Vue3 ํŠน์ง•

by narang111 2024. 1. 12.

virtual DOM ์‚ฌ์šฉ

๋„ˆ๋ฌด ๋งŽ์ด ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋น„ํšจ์œจ์ ์ธ ์—ฐ์‚ฐ์„ ์ค„์ด๊ณ ์ž ๋งŒ๋“  ๊ฐ€์ƒ์˜ DOM

DOM ๊ตฌ์กฐ๋ฅผ ์ฒดํฌํ•˜๋Š” ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ์‹์ด ๋ณต์žกํ•˜๋ฉฐ ๋‹จ์ˆœํ™”/์ž๋™ํ™” ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง

 

 

Virtual DOM ๋™์ž‘ ์›๋ฆฌ

- UI๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ „์ฒด UI๋ฅผ Virtual DOM์œผ๋กœ ๋ Œ๋”๋ง

- ํ˜„์žฌ Virtual DOM๊ณผ ์ด์ „ Virtual DOM์„ ๋น„๊ตํ•ด ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ๋ฐ˜์˜

- ๊ฐ€์ƒ ๋” ๋ Œ๋”๋ง์€ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ DOM์— ์ ์šฉ, ์ƒํƒœ ๋ณ€ํ™” ์ž๋™๊ฐ์ง€, ๋น ๋ฅธ ํ™”๋ฉด ๋ Œ๋”๋ง ๊ฐ€๋Šฅ

 

Vue3์˜ Virtual DOM ์ƒˆ๋กœ์šด ๋ Œ๋”๋ง ์ „๋žต

- ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ์—์„œ ์ •์  ์š”์†Œ์™€ ๋™์  ์š”์†Œ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ํŠธ๋ฆฌ ์ˆœํ™˜ ์‹œ ๋™์  ์š”์†Œ๋งŒ ์ˆœํ™˜

๊ตฌ๋ฌธ ๋‚ด์˜ ์ •์  ์˜์—ญ์„ ๋ฏธ๋ฆฌ ๋ธ”๋ก์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ Œ๋”๋ง ์‹œ ์ •์  ๋ธ”๋ก์—๋Š” ์ ‘๊ทผx, ๋™์ ์š”์†Œ ์ฝ”๋“œ์—๋งŒ ์ ‘๊ทผํ•˜์—ฌ ๋ Œ๋”๋ง ํŠธ๋ฆฌ ํƒ์ƒ‰ ์ตœ์ ํ™”

- ๋ Œ๋”๋ง ์‹œ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฏธ๋ฆฌ ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ ๋‚ด ์ •์  ์š”์†Œ, ์„œ๋ธŒํŠธ๋ฆฌ, ๋ฐ์ดํ„ฐ ๊ฐ์ฒด ๋“ฑ์„ ํƒ์ง€ํ•ด ๋ Œ๋”๋Ÿฌ ํ•จ์ˆ˜ ๋ฐ–์œผ๋กœ ํ˜ธ์ด์ŠคํŒ… 

๋ Œ๋”๋ง ์‹œ Render๋งˆ๋‹ค ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ ๋ฐฉ์ง€

- ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฏธ๋ฆฌ ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ ๋‚ด์—์„œ ๋™์  ๋ฐ”์ธ๋”ฉ ์š”์†Œ์— ๋Œ€ํ•ด ํ”Œ๋ž˜๊ทธ ์ƒ์„ฑ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋‘” ํ”Œ๋ž˜๊ทธ๋กœ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ Œ๋”๋ง ์†๋„ ํ–ฅ์ƒ

 

> ํŠธ๋ฆฌ์‰์ดํ‚น ๊ฐ•ํ™”

- ๋ชจ๋“ˆ์„ ๋ฒˆ๋“ค๋งํ•˜๋Š” ๊ณผ์ •์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ์ œ๊ฑฐ -> ํŒŒ์ผํฌ๊ธฐ ์ค„์–ด๋“ฆ, ๋กœ๋”ฉ์„ฑ๋Šฅ ํ–ฅ์ƒ
- Bundle ํฌ๊ธฐ ์ ˆ๋ฐ˜ ์ด์ƒ์œผ๋กœ ์ค„์ž„

 

> ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ง€์›

- ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž… ์ถ”๋ก  ๋ฐฉ์‹์€ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ์ถ”๋ก  ๊ฐ€๋Šฅํ•ด์•ผํ•จ(๊ฐ์ฒด ๊ตฌ์กฐ ํŠน์„ฑ์ƒ ์ผ์ผ์ด ํƒ€์ž… ์ •์˜)

 

> SFC(sing file component)

- ๋‹จ์ผ ํŒŒ์ผ ์ปดํฌ๋„ŒํŠธ

- ํ•˜๋‚˜์˜ ํŒŒ์ผ์ด ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ

- HTML CSS Javascript๋ฅผ <template> <script> <style>  ๋ธ”๋Ÿญ์œผ๋กœ ์บก์Аํ™”

 

> Template ๋ฌธ๋ฒ•

- ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ๋ Œ๋”๋งํ•˜๋Š” ๊ณผ์ •์—์„œ ํ…œํ”Œ๋ฆฟ์ด๋ผ๋Š” ๋ฌธ๋ฒ• ์‚ฌ์šฉ

- vue ํ…œํ”Œ๋ฆฟ์€ HTML CSS ๋“ฑ์˜ ๋งˆํฌ์—… ์†์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ๋ฐ ๋กœ์ง๋“ค์„ ์—ฐ๊ฒฐ -> HTML ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜

 

> Vue-CLI

- Vue ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •๋„๊ตฌ, ์ž๋™์œผ๋กœ Vue ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•ด์คŒ

- Babel๊ณผ Webpack  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊นŒ์ง€ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์ถ• ์šฉ์ด

- ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœ์ ํŠธ ์„ธํŒ…(ํด๋”๊ตฌ์กฐ, Lint์™€ build๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์„ฑ, Webpack)

 

> Vue.js์˜ Component

- ๋‹จ์ผ ํŒŒ์ผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”์ฒœ

- css๋Š” ์ƒ์œ„ css์˜ ์˜ํ–ฅ ๋ฐ›์ง€ ์•Š์Œ(๋นŒ๋“œ ์‹œ์ ์— ๊ณ ์œ ํ•œ ์…€๋ ‰ํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๋ฐฉ์‹ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ)

- ๋ ˆ์ด์•„์›ƒ์˜ ๊ฐ ์„น์…˜์ด ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋˜๋“ฏ์ด ์ด์— ์ƒ์‘ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ํŠธ๋ฆฌํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๊ตฌ์กฐ

 

> MVVM ๋ชจ๋ธ

- HTML DOM์ด view์—ญํ• , JS๊ฐ€ Model ์—ญํ• 

- ๋ทฐ๋ชจ๋ธ์ด ์—†๋Š” ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” getElementByid์™€ ๊ฐ™์€ DOM API๋ฅผ ์ง์ ‘ ์ด์šฉํ•ด์„œ ๋ชจ๋ธ๊ณผ ๋ทฐ ์—ฐ๊ฒฐํ•ด์•ผํ–ˆ์Œ

  ex) jQuery

 

 

Vue React

๊ณตํ†ต์ :

๊ฐ€์ƒ๋” ์‚ฌ์šฉ

์ปดํฌ๋„ŒํŠธ ์ œ๊ณต

๋ทฐ์—๋งŒ ์ง‘์ค‘, ๋ผ์šฐํ„ฐ, ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ

์„ฑ๋Šฅ์˜ ์ฐจ์ด:

react์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ์—…๋ฐ์ดํŠธ ๋ฐฉ์ง€ํ•  ๋•Œ shouldCoponentUpdate ๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ตœ์ ํ™”

Vue์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ข…์†์„ฑ์ด ๋ Œ๋”๋ง ์ค‘ ์ž๋™์œผ๋กœ ์ถ”์ 