Vue.js ๋?
์๋ฐ์คํฌ๋ฆฝํธ(์ดํ js) ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ์น ๊ฐ๋ฐ์ ์ํ ํ๋ ์์ํฌ ์ค ํ๋์ด๋ค.
MVVM ํจํด์ ViewModel ๋ ์ด์ด์ ํด๋นํ๋ ํ๋ฉด๋จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด DOM์ ๋ค์ ๋์ ํด์ค์ผ ํ๋ฉด์ด ๋ณ๊ฒฝ๋์๋ ์ผ๋ฐ์ ์ธ ์น ๊ฐ๋ฐ ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ, ๋ฐ์ดํฐ ๋ณํ๋ฅผ ๊ฐ์งํ์ฌ ํ๋ฉด์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ก ํ์ํ ์ ์๋ค.
- MVVM ํจํด์ ์ฌ์ฉํ๋ค.
- Virtual DOM์ ์ฌ์ฉํ๋ค.(React์ ๊ฐ์ ๋ ์ฑํ)
- ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ ๊ณตํ๋ค.(Angular์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ฑํ)
- Template์ Component๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ ๋ค.
์ Vue.js ๋ฅผ ์ฌ์ฉํ ๊น?
1. ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ๊ฐํธํ๋ค.
์๋ HTML ์ฝ๋์์ ์๋ฆฌ๋จผํธ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
<div>
<h2 id="message">hello</h2>
</div>
์ด์ ๊ฐ์ด ์๋ฆฌ๋จผํธ์ id๋ก DOM์ ์ ๊ทผํ์ฌ ํ ์คํธ๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์ ์์ ๊ฒ์ด๋ค.
<script>
var elMessage = document.getElementById('message');
elMessage.innerText = 'bye';
</script>
์ด๋ฌํ ์ฌ์ฉ์ ์ธํฐ๋ ์ ์ด ๊ฐ๋จํ๊ฑฐ๋ ๋ณ๋ก ์๋ค๋ฉด ์ง์ ๊ตฌํํด๋ ๋๊ฒ ์ง๋ง, ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ๋ง์ DOM ์์๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํ๋ค์ด์ง๋ค. ์ ๋๋ก๋ ์ปจ๋ฒค์ ๊ณผ ๊ท์น์ด ์๋ค๊ณ ํด๋ ์ด๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ DOM์ ์ ์ฉ๋์๋์ง ๊ด๋ฆฌํ๊ธฐ ๋ฒ๊ฑฐ๋กญ๋ค.
ํ๋ก ํธ ํ๋ ์์ํฌ์ธ React์์๋ state๋ฅผ, Vue์์๋ data๋ฅผ ๋ณ๊ฒฝํ๊ธฐ๋ง ํ๋ฉด DOM์ ์์์ ์ ๋ฐ์ดํธ ๋๊ธฐ ๋๋ฌธ์ ์ด ๋ฐ์ดํฐ๊ฐ ์ด๋์ ์ฐ์๋์ง ๊ธฐ์ตํ์ง ์์๋ ๋๋ค.
2. ์ปดํฌ๋ํธ ๋จ์๋ก ๊ฐ๋ฐํ๊ธฐ ํธ๋ฆฌํ๋ค.
ํ๋ฉด์ ๋ณด์ฌ์ง๋ ๋ทฐ์ ๋จ์๋ฅผ ์๊ฒ ์ชผ๊ฐ์ด ์ฌํ์ฉ์ด ๊ฐ๋ฅํ ํํ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ปดํฌ๋ํธ์ด๋ค.
์ปดํฌ๋ํธ๋ฅผ ํ์ฉํ๋ฉด ํ๋ฉด์ ๊ตฌ์กฐํํ์ฌ ์ผ๊ด์ ์ธ ํจํด์ผ๋ก ๊ฐ๋ฐ, ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ดํดํ๊ณ ์ฌ์ฌ์ฉํ ์ ์๋ค.
3. ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ๋น ๋ฅด๋ค.
Angular๋ Typescript๋ฅผ ์จ์ผ ํ๊ณ React๋ ๊ธฐ์กด js ๋ฌธ๋ฒ์ ์ ์์์ผ ํ๋ค.
๋ฐ๋ฉด vue๋ js๋ฅผ ์ ์์ง ๋ชปํด๋ ์ฌ์ฉํ ์ ์๊ณ HTML ๋ ๋๋งํ๋ ์๊ฐ์ด ๋น ๋ฅด๋ค.
MVVM ํจํด
ํ๋ฉด์ ๋ชจ๋ธ(Model) - ๋ทฐ(View) - ๋ทฐ ๋ชจ๋ธ(ViewModel)๋ก ๊ตฌ์กฐํํ์ฌ ๊ฐ๋ฐํ๋ ๋ฐฉ์์ด๋ค.
ํ๋ฉด ์์๋ค์ ์ ์ดํ๋ ์ฝ๋์ ๋ฐ์ดํฐ ์ ์ด ๋ก์ง์ ๋ถ๋ฆฌํ์ฌ ์ฝ๋๋ฅผ ์ง๊ด์ ์ผ๋ก ์ดํดํ ์ ์๊ณ ์ ์ง๋ณด์์ ์ฉ์ดํ๋ค.
์น ํ์ด์ง๋ View ์ญํ ์ ํ๋ DOM๊ณผ Model ์ญํ ์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ง๋ค์ด์ง๋ค.
ViewModel ๋ ์ด์ด๊ฐ ์๋ ๊ฒฝ์ฐ ์ง์ ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์ฐ๊ฒฐํ๋ค. (ex.document.getElementById('id').appendChild(newNode);)โ
Vue.js๋ ๋ ๋ฆฌ์ค๋์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ ๊ณตํ์ฌ ๋๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ๊ฐ์ ๋๊ธฐํ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ค.
- Vue.js์์ ๋ทฐ ๋จ์ DOM ์ด๋ฒคํธ ๊ฐ์ง
- ์ด๋ฒคํธ๊ฐ ๊ฐ์ง๋๋ฉด ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ ์์ฒญ
- ๊ฒฐ๊ณผ๋ก ๋ฐ์ Model ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํ์ฌ ํ๋ฉด ๋ณ๊ฒฝ
๋ท๋จ์ DB ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ๋น์ง๋์ค ๋ก์ง๊ณผ ์๋จ์ ํ๋ฉด ๋์ ๊ด๋ จ ๋ก์ง์ ๋ถ๋ฆฌํ๊ณ , ๋ท๋จ์์ ๋์ด์จ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ์ ๋ด์ ๋ทฐ๋ก ๋๊ฒจ์ฃผ๋ ์ค๊ฐ ์ง์ ์ด ViewModel์ด๋ค.
๊ฐ์ ๋ (Virtual DOM)
๋จผ์ DOM์ ๋ํด ์์๋ณด์. DOM์ด๋ Document Object Model๋ก์ ์น ํ์ด์ง๋ฅผ ๊ฐ์ฒด๋ก ํํํ๋ ๋ชจ๋ธ์ ์๋ฏธํ๋ค.
์ ์ฒด์ ์ธ ์น ํ์ด์ง ๋ ๋๋ง ๊ณผ์ ์ ์ด๋ ๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ HTML ํ๊ทธ๋ฅผ ํ์ฑํ์ฌ ๋ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ์คํ์ผ ์ํธ์์ CSS๋ฅผ ํ์ฑํ์ฌ ์คํ์ผ ๊ท์น์ ๋ง๋ ๋ค.
- ๋ ํธ๋ฆฌ์ ์คํ์ผ ๊ท์น์ด ํฉ์ณ์ ธ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ค.
- ์์ฑ๋ ๋ ๋ ํธ๋ฆฌ๋ ์ ํด์ง ์์๋๋ก ํ๋ฉด์ ํ์๋๊ณ ๊ทธ๋ฆฌ๊ธฐ ๊ณผ์ ์ด ์งํ๋๋ค.
- ๋ ๋๋ง ์์ง์ ์ข ๋ ๋น ๋ฅด๊ฒ ์ ๊ณตํ๊ธฐ ์ํด HTML์ ํ์ฑํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐฐ์น์ ๊ทธ๋ฆฌ๊ธฐ ๊ณผ์ ์ ์์ํ์ฌ ์ ์ ํ๋ฉด์ด ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ ๋๋ง ์์ง ์ข ๋ฅ
- ํฌ๋กฌ, ์ฌํ๋ฆฌ: ์นํท(Webkit) ์์ง ์ฌ์ฉ
- ํ์ด์ดํญ์ค: ๊ฒ์ฝ(Gecko) ์์ง ์ฌ์ฉ
๋ธ๋ผ์ฐ์ ๋ DOM์ ์ด์ฉํ์ฌ ํ๋ฉด์ ๋ ๋๋ง ํ๋ค.
ํ๋ฉด์ ๋ณ๊ฒฝ์ฌํญ์ด ์๊ธฐ๋ฉด ๋์ ์ง์ ์กฐ์ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ํด์ผ ํ๊ณ ์ด๋ ๋ ํธ๋ฆฌ๊ฐ ์์ ๋ ๋๋ง๋ค ๋ ๋ ํธ๋ฆฌ๊ฐ ์ค์๊ฐ์ผ๋ก ๊ฐฑ์ ๋๋ค๋ ๋จ์ ์ด ์์๋ค. ๊ทธ๋์ ๊ฐ์ ๋(Virtual DOM)์ ์ฌ์ฉํ๊ฒ ๋์๋ค.
๊ฐ์ ๋์ ์ค์ ๋์ ์ ๊ทผํ์ฌ ์กฐ์ํ๋ ๋์ ์ด๊ฒ์ ์ถ์ํ์ํจ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋ค. ์ค์ ๋๊ณผ๋ ๋ฌ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์์ด ์ฑ๋ฅ์ด ์ข๋ค. ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์๋ ๊ฐ์ ๋์ ์ด์ ๊ฐ์ ๋๊ณผ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ค์ ๋์ ๋ฐ์ํ๋ค.
์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ View์ Model์ ๋ฌถ์ด ์ ๊ธฐ์ ์ผ๋ก ๋์ํ๊ฒ ํ๋ ๊ฒ์ด๋ค.
- ๋จ๋ฐฉํฅ
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋ ํญ์ ์์ ์ปดํฌ๋ํธ์์ ํ์ ์ปดํฌ๋ํธ ๋ฐฉํฅ์ผ๋ก ์ ๋ฌํ๊ฒ๋ ๊ตฌ์กฐํ๋์ด์๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์๋ฐฉํฅ
๋ฐ๋ฉด, ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํ๋ฉด์ ํ์๋๋ ๊ฐ๊ณผ ํ๋ ์์ํฌ์ ๋ชจ๋ธ ๋ฐ์ดํฐ ๊ฐ์ด ๋๊ธฐํ๋์ด ํ ์ชฝ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ค๋ฅธ ํ ์ชฝ๋ ์๋์ผ๋ก ๋ณ๊ฒฝ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฐธ๊ณ ์๋ฃ ๋ฐ ์ถ์ฒ ๐โ๏ธ
https://kim6394.tistory.com/217
'๊ฐ๋ฐ > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Vue3 Composition API (0) | 2022.04.06 |
---|---|
Vuex / ์ํ๊ด๋ฆฌ / Vuex ํจํด ๋ฐ ์์ (0) | 2022.04.05 |
Vue ๋ผ์ฐํฐ / SPA / Router ๊ฐ ์ ๋ฌ (0) | 2022.04.04 |
Vue ์ปดํฌ๋ํธ / ์ปดํฌ๋ํธ ๊ฐ ํต์ (0) | 2022.04.04 |
Vue ์ฌ์ฉ๋ฒ / ๋ฌธ๋ฒ / ์ต์ / ๋๋ ํฐ๋ธ (0) | 2022.03.28 |
๋๊ธ