React๋ ์๋ ๋ง์ด ์ฌ์ฉํ์ง๋ง
์์ฆ๋ค์ด Vue๋ ๋ง์ด ์ฌ์ฉํ๋ ์ถ์ธ์ธ ๊ฒ ๊ฐ๋ค!
์ด๋ค ์ ์ด ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ํ ๋ฒ ์์๋ณด์.
1. DOM (Document Object Model)
๋จผ์ DOM์ ๋ํ ์ดํด๋๊ฐ ์์ด์ผ Vue์ React์ ํน์ง์ ๋ ์ ์ดํดํ ์ ์๋ค.
- DOM์ HTML ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ๊ณ ์กฐ์ํ ์ ์๋๋ก ํธ๋ฆฌ ๊ตฌ์กฐ ํํ์ ๊ฐ์ฒด๋ก ๋ณํํ ๊ฒ์ด๋ค.
- HTML ์์ฒด๋ ๋จ์ํ ํ ์คํธ ํ์ผ์ด๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์น ํ์ด์ง์ ํ ์คํธ๋ฅผ ๋ฐ๊พธ๊ฑฐ๋ ์คํ์ผ์ ๋ณ๊ฒฝํ๋ ค๋ฉด HTML ์์๋ค์ ์ ๊ทผ ๊ฐ๋ฅํ ๊ฐ์ฒด ํํ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋์์์ผ ํ๋๋ฐ, ๊ทธ ์ธํฐํ์ด์ค๊ฐ DOM์ด๋ค.
- DOM์ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ก DOM์ ์กฐ์ํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ํ๋ฉด์ ์์น์ ํฌ๊ธฐ๋ฅผ ๋ค์ ๊ณ์ฐํ๋ Reflow์ ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฌ๋ Repaint ๊ณผ์ ์ ๊ฑฐ์น๋ค.
- ๊ทธ๋์ ์ด๋ฐ ๋ฌธ์ ๋๋ฌธ์ React์ Vue ๋ชจ๋ ๊ฐ์ DOM(Virtual DOM)์ ์ฌ์ฉํ๋ค.
- ์ง์ง DOM ๋์ ๋ฉ๋ชจ๋ฆฌ์ ๋งค์ฐ ๊ฐ๋ฒผ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ํํ์ ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ค.
- ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋ก์ด ๊ฐ์ DOM์ ์์ฑํ๊ณ ์ด์ ๊ฐ์ DOM๊ณผ ๋น๊ตํ๋ฉฐ ์ค์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ฐพ์๋ธ๋ค.
- ๋ณ๊ฒฝ๋ ์ต์ํ์ ์์๋ง ์ง์ง DOM์ ํ ๋ฒ์ ์ ์ฉํ๋ค. -> Reflow์ Repaint๋ฅผ ์ต์ํ
- ์ด๋ ๊ฒ React์ Vue๋ ๋ชจ๋ Virtual DOM์ ์ฌ์ฉํ๋ค.
- ๊ทธ๋ฌ๋ DOM์ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ๋ณํ๋ฅผ ๊ฐ์งํ๋ ๋งค์ปค๋์ฆ๊ณผ DOM์ ์ ์ํ๋ ๋ฌธ๋ฒ์๋ ํฐ ์ฐจ์ด๊ฐ ์๋ค.
2. React
์ํ๋ฅผ UI๋ก ํํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- React๋ ์น์ฌ์ดํธ ํ๋ฉด์ ์ปดํฌ๋ํธ๋ก ๋๋์ด ๋ง๋ ๋ค, ํ์ํ ์กฐ๊ฐ๋ง ๋ถ์ฌ์ ํ๋ฉด์ ๋ง๋๋ ๋๊ตฌ์ด๋ค.
- ์๋ ์๋ "๋ฒํผ์ ๋๋ฅด๋ฉด ํ ์คํธ๋ฅผ ๋นจ๊ฐ์์ผ๋ก ๋ฐ๊ฟ๋ผ."๋ผ๊ณ ์ผ์ผ์ด ์ง์ํด์ผ ํ๋ค.
- React๋ "๋ฐ์ดํฐ๊ฐ ์ฑ๊ณต์ด๋ฉด ์ด๋ก์, ์คํจ๋ฉด ๋นจ๊ฐ์"์ด๋ผ๊ณ ๊ท์น๋ง ์ ํด๋๋ฉด, ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ ์๊ฐ ์์์ ํ๋ฉด์ ๋ณ์ ์ํจ๋ค.
- ์ปดํฌ๋ํธ ์ค์ฌ ์ฌ๊ณ ์ Hook์ ํตํ ๋ก์ง ์ฌ์ฌ์ฉ
React๋ ๋ชจ๋ ์์๋ฅผ ๋ ๋ฆฝ์ ์ธ ์ปดํฌ๋ํธ ๋จ์๋ก ์ชผ๊ฐ์ด ๊ฐ๋ฐํ๋ค. View์ ๋ก์ง์ ์๋ฒฝํ๊ฒ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋จ์๋ก ๋ถ๋ฆฌํ๋ค. ํนํ useState(์ํ๋ฅผ ๊ธฐ์ตํ๊ณ ์ํ๊ฐ ๋ฐ๋๋ฉด ํ๋ฉด์ ๋ฐ๊ฟ), useEffect(ํ๋ฉด์ด ๊ทธ๋ ค์ง ๋ค ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ํ์ด๋จธ๋ฅผ ์ค์ ํ๋ ๋ฑ ๋ถ์์ ์ธ ์์ ์ฒ๋ฆฌ) ๊ฐ์ React Hooks๋ฅผ ํ์ฉํด ์ปดํฌ๋ํธ ์์์ ์ํ ๊ด๋ฆฌ์ ์๋ช ์ฃผ๊ธฐ ์ ์ด๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๊ตฌํํ ์ ์๋ค. - ๋ถ๋ณ์ฑ ๊ธฐ๋ฐ์ ์ํ ๊ฐ์ง
React๋ ์ํ๋ ์ ๋ ์ง์ ๋ณ๊ฒฝํ์ง ์๋๋ค๋ ๋ถ๋ณ์ฑ ์์น์ ๋ฐ๋ฅธ๋ค. useState(์ํ๋ฅผ ๊ธฐ์ตํ๊ณ ์ํ๊ฐ ๋ฐ๋๋ฉด ํ๋ฉด์ ๋ฐ๊ฟ)์ ๊ฐฑ์ ํจ์๋ฅผ ํตํด ์์ ์๋ก์ด ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ์์ฑํด ๋๊ฒจ์ฃผ์ด์ผ๋ง React๊ฐ ๋ณํ๋ฅผ ์ธ์งํ๊ณ ๊ฐ์ DOM์ ๋น๊ต ๋ฐ ๋ฆฌ๋ ๋๋ง ์์ ์ ์ํํ๋ค. - JSX(JavaScript XML)
React๋ JSX๋ผ๋ ๋ฌธ๋ฒ์ ํตํด HTML๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ๋์ ๋ก์ง ์์์ ๊ฒฐํฉํ๋ค. ๊ทธ๋์ ๋ณ๋์ ํ๋ ์์ํฌ ์ ์ฉ ์ง์์ด๋ฅผ ๋ฐฐ์ธ ํ์ ์์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ๋ฌธ๋ฒ์ ์ฌ์ฉํด UI๋ฅผ ์ ์ดํ ์ ์๋ค. - ๋จ๋ฐํฅ ๋ฐ์ดํฐ ํ๋ฆ
React์ ๋ฐ์ดํฐ๋ ํญ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก๋ง ํ๋ฅธ๋ค. ์ด๋ ๊ฒ ๋ฐ์ดํฐ ํ๋ฆ์ด ํ ๋ฐฉํฅ์ผ๋ก ๊ณ ์ ๋์ด ์์ด์ ์ฑ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋๋ผ๋ ๋ฐ์ดํฐ์ ๋ณํ ์์ธ์ ์ถ์ ํ๊ณ ๋๋ฒ๊น ํ๊ธฐ ์ฝ๋ค. - ๊ฐ๋ฐ์๊ฐ ํ๋ก์ ํธ ์ํฉ์ ๋ฐ๋ผ ๋ผ์ฐํ , ์ํ ๊ด๋ฆฌ(TanStack Query, Redux, Zustand ๋ฑ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ๋กญ๊ฒ ์กฐํฉํ์ฌ ๊ตฌ์ฑํ ์ ์์ด์ ๋์ ์ ์ฐ์ฑ์ ๊ฐ์ง๋ค.
Q. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ์ ์ฐจ์ด์ ์ด ๋ฌด์์ธ๊ฐ์?
A. ์ด ๋์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ ์ ์ด๊ถ์ ํ๋ฆ์ ๋๊ฐ ์ฃผ๋ํ๋๋์ ์๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ์ ์ด๊ถ์ ๊ฐ์ง๋ค. ๊ฐ๋ฐ์๊ฐ ํ์ํ ์์ ์ ์ง์ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ์ํ๋ ๊ณณ์๋ง ์์ ๋กญ๊ฒ ์ ํํด์ ์ ์ฉ ๊ฐ๋ฅํ๋ค. ๊ทธ๋์ ์์ ๋๊ฐ ํ๋ ์์ํฌ์ ๋นํด ์๋์ ์ผ๋ก ๋๋ค. ํ๋ ์์ํฌ๋ ํ๋ ์์ํฌ๊ฐ ์ฃผ๋๊ถ์ ๊ฐ์ง๋ค. ์ด๋ฏธ ํ๋ ์์ํฌ์ ๊ท์น์ด ์๊ณ ๊ทธ๊ฑฐ์ ๋ฐ๋ผ ์์ฑํ๋ฉด ์์์ ํธ์ถ๋๋ ๋ฐฉ์์ด๋ค. ์๋ฌด๋๋ ํ๋ ์์ํฌ๊ฐ ์ ํ ๊ท๊ฒฉ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ์ผํ๊ธฐ ๋๋ฌธ์ ์์ ๋๋ ์๋์ ์ผ๋ก ๋ฎ์ ํธ์ด๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ์ ์ธ ์์๋ React, jQuery, NumPy๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ ์์ํฌ์ ๋ํ์ ์ธ ์์๋ Spring, Django, Next.js, Vue.js๊ฐ ์๋ค.
3. Vue
๊ณต์์ ์ธ ํ์ ์ ๊ณตํ๋ ํ๋ ์์ํฌ
- Vue๋ ๊ฐ๋ฐ์ ํ์ํ ํต์ฌ ๋๊ตฌ๋ฅผ ๊ณต์์ ์ผ๋ก ๊ด๋ฆฌํ๋ ํ๋ ์์ํฌ๋ค.
- ๋ผ์ฐํ (Vue Router), ์ํ ๊ด๋ฆฌ(Pinia), ๋น๋ ๋๊ตฌ(Vite) ๋ฑ์ด ๊ณต์์ ์ธ ํ์ค์ผ๋ก ์ ๋ฆฝ๋์ด ์๋ค.
- ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ๋ ์๊ฐ์ ์ค์ด๊ณ ํ์ ์ ํต์ผ๋ ์ฝ๋๋ฅผ ์ ์งํ๊ธฐ ์ฝ๋ค.
- SFC(Single File Component)
HTML, CSS, JS์ ์ง๊ด์ ์ธ ๋ถ๋ฆฌ๋ก Vue๋ .vue๋ผ๋ ๋จ์ผ ํ์ผ ์์ <template>, <script>, <style> ์์ญ์ ๋ช ํํ ๋๋์ด ์์ฑํ๋ค. ๊ธฐ์กด ์น ๊ฐ๋ฐ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ณ ์ฝ๋์ ์ญํ ๊ตฌ๋ถ์ด ์ง๊ด์ ์ด๋ค. - ๋ฐ์ํ ์์คํ
๊ณผ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
Vue๋ ์๋ฐ์คํฌ๋ฆฝํธ์ Proxy ๊ธฐ๋ฐ ๋ฐ์ํ ์์คํ ์ ์ฌ์ฉํด์ ๊ฐ์ฒด์ ๊ฐ์ ์ง์ ์์ ํ๊ธฐ๋ง ํด๋ ๋ณ๊ฒฝ ์ฌํญ์ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ํ๋ฉด์ ๊ฐฑ์ ํ๋ค. v-model ์ง์์ด๋ฅผ ํตํด ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ง์ํ๋ฉฐ ํผ ์ ๋ ฅ๊ฐ์ ์ํ์ ๋๊ธฐํํ ๋ ์์ฑํด์ผ ํ๋ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋(ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๋ ์ต์ํ์ ์์ ๋ง ๊ฑฐ์น๊ฑฐ๋ ๊ทธ๋๋ก ๋ฐ๋ณตํด์ ์ฌ์ฉํ๋ ํ์์ ์ธ ํ์ค ์ฝ๋ ์กฐ๊ฐ)๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ฌ์ค๋ค. - ๋๋ ํฐ๋ธ๋ฅผ ํตํ ๊ฐํธํ UI ์ ์ด
Vue๋ HTML ํ๊ทธ ์์ v-if(์กฐ๊ฑด์ด ์ฐธ์ผ ๋๋ง DOM์ ์์๋ฅผ ์์ฑ), v-for(๋ฐฐ์ด์ด๋ ๊ฐ์ฒด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ผํ DOM ์์๋ฅผ ๋ฐ๋ณตํ์ฌ ๋ ๋๋ง), v-show(DOM ์์๋ฅผ ํญ์ ์์ฑํด๋๊ณ ์กฐ๊ฑด์ ๋ฐ๋ผ CSS์ display ์์ฑ๋ง ๋ณ๊ฒฝํ์ฌ ํ๋ฉด์ ์จ๊ธฐ๊ฑฐ๋ ๋ณด์ฌ์ค) ๊ฐ์ ๋๋ ํฐ๋ธ๋ฅผ ์ฝ์ ํด ํ ํ๋ฆฟ ์ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ค. ์ด๋ฅผ ํตํด HTML ๊ตฌ์กฐ ๋ด์์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ด๋ ๋ฐ๋ณต ์ถ๋ ฅ์ ์ง๊ด์ ์ด๊ณ ๋น ๋ฅด๊ฒ ์์ฑํ ์ ์๋ค. - Composition API๋ฅผ ํตํ ์ ์ฐํ ๋ก์ง ์ฌ์ฌ์ฉ
Vue 3๋ถํฐ ๋์ ๋ Composition API๋ React์ Hooks์ ๋งค์ฐ ์ ์ฌํ ๊ฐ๋ฐ ๋ฐฉ์์ ์ ๊ณตํ๋ค. ์ฐ๊ด๋ ์ํ์ ๋ก์ง์ ํ๋์ ํจ์ ๋จ์๋ก ๋ฌถ์ด ๋ชจ๋ํํ ์ ์๊ณ ์ฑ ๊ท๋ชจ๊ฐ ์ปค์ง๋๋ผ๋ ์ฝ๋ ์ฌ์ฌ์ฉ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ ์์ค์ผ๋ก ์ ์งํ ์ ์๋ค.
Q. Composition API๊ฐ ๋ฌด์์ธ๊ฐ?
A. Composition API๋ <script setup> ํ๊ทธ์ ref, reactive ๋ฑ์ ๋ฐ์ํ API๋ฅผ ํ์ฉํ์ฌ ๊ด๋ จ ๋ก์ง์ ํ๊ณณ์ ๋ชจ์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๋ค. <script setup>์ Composition API๋ฅผ ํจ์ฌ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฌธ๋ฒ ์คํ์ด๋ค. ref( )๋ ๊ธฐ๋ณธ ํ์ ์ ๊ฐ(์ซ์, ๋ฌธ์์ด ๋ฑ)์ ๋ฐ์ํ์ผ๋ก ๋ง๋ค ๋ ์ฌ์ฉํ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ ์์ญ์์๋ .value๋ก ์ ๊ทผํ๋ค. ๊ด๋ จ ์๋ ๋ฐ์ดํฐ, ๋ฉ์๋, ์๋ช ์ฃผ๊ธฐ ํ ์ ํ ๊ณต๊ฐ์ ๋ฌถ์ด์ ์์ฑํ ์ ์์ด ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ด ๋์์ง๋ค.
<template> <div> <p>ํ์ฌ ์นด์ดํธ: {{ count }}</p> <p>2๋ฐฐ ๊ฐ: {{ doubleCount }}</p> <button @click="increment">์ฆ๊ฐ</button> </div> </template> <script setup> import { ref, computed, onMounted } from 'vue' // 1. ๋ฐ์ํ ์ํ ์ ์ const count = ref(0) // 2. ๊ณ์ฐ๋ ์์ฑ (Computed) const doubleCount = computed(() => count.value * 2) // 3. ๋ฉ์๋ ์ ์ const increment = () => { count.value++ } // 4. ์๋ช ์ฃผ๊ธฐ ํ (Lifecycle Hook) onMounted(() => { console.log('์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋์์ต๋๋ค.') }) </script>โ
3. React์ Vue์ ์ฐจ์ด์
- React๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ(JSX) ๊ธฐ๋ฐ์ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ฐ๋ฐ์์ ์์ ๋๊ฐ ๋๋ค.
Vue๋ ํ์ค HTML/CSS/JS ๊ตฌ์กฐ๋ฅผ ์ ๊ทน ํ์ฉํ๋ ํ๋ ์์ํฌ๋ก ์์ฐ์ฑ๊ณผ ํ์คํ๋ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค. - React๋ ์ํ๋ฅผ ์ง์ ์์ ํ์ง ์๊ณ ์ ๊ฐ์ผ๋ก ๊ต์ฒดํ๋ ๋ถ๋ณ์ฑ ์์น์ ๋ฐ๋ฅธ๋ค.
Vue๋ ๋ฐ์ดํฐ ์์ ์ ๋ณํ๋ฅผ ์๋์ผ๋ก ์ถ์ ํ๋ ๋ฐ์ํ ์์น์ ๋ฐ๋ฅธ๋ค. - ๊ฐ์ DOM ์๋ ๋ฐฉ์ ์ฐจ์ด
React_ ํธ๋ฆฌ ์ฌ์คํ๊ณผ ์ ์ฒด ์ฌ๋ ๋๋ง
- ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํด๋น ์ปดํฌ๋ํธ ํจ์ ์ ์ฒด๊ฐ ๋ค์ ์คํ๋๋ค.
- ์ปดํฌ๋ํธ ํ์์ ์ ์ฒด ๊ฐ์ DOM ํธ๋ฆฌ๋ฅผ ์๋กญ๊ฒ ์์ฑํ ๋ค, ์ด์ ๊ฐ์ DOM ํธ๋ฆฌ์ ๋น๊ต(Diffing)ํ์ฌ ๋ฌ๋ผ์ง ์ฐจ์ด์ ๋ง ์ค์ DOM์ ๋ฐ์ํ๋ค.
- ๋ถ๋ชจ๊ฐ ์ฌ๋ ๋๋ง๋๋ฉด ์์ ์ปดํฌ๋ํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๋ ๋๋ง๋๋ค. ๋ถํ์ํ ์ฌ๋ ๋๋ง์ ๋ง๊ธฐ ์ํด useMemo, useCallback, React.memo ๊ฐ์ ์ต์ ํ ๊ธฐ๋ฒ์ ์ง์ ์ ์ฉํด์ผ ํ๋ค.
Vue_ ๋ฐ์ํ ์ถ์ ๊ณผ ์ ์ /๋์ ๋ถ๋ฆฌ
- Vue๋ ์๋ฐ์คํฌ๋ฆฝํธ Proxy๋ฅผ ํตํด ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์ด๋ค DOM ์์์ ๋ฐ์ธ๋ฉ๋์ด ์๋์ง ๊ฐ์ง(์์กด์ฑ ์ถ์ )ํฉ๋๋ค.
- ๊ฐ๋ฐ์๊ฐ const count = ref(0) ๋๋ reactive({name : 'Vue'})์ฒ๋ผ ์ํ๋ฅผ ์ ์ํ๋ฉด Vue๋ ์ด ๊ฐ์ฒด๋ฅผ Proxy๋ก ๊ฐ์ผ๋ค.
- Vue๋ ์ด ๋ฐ์ดํฐ๊ฐ ์ด๋ค ์ปดํฌ๋ํธ์ ๊ฐ์ DOM์ ์ฐธ์กฐํ๊ณ ์๋์ง ๊ธฐ์ตํด๋๋ค. (์์กด์ฑ)
- ์ด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ฉด Proxy๊ฐ ์ด๋ฅผ ๊ฐ์งํ๊ณ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ผ๊ณ ์๋ ค์ค๋ค.
- ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ฉด ์ ์ฒด ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๊ณ์ฐํ๋ ๋์ , ํด๋น ๋ฐ์ดํฐ์ ์ํฅ์ ๋ฐ๋ ์ต์ํ์ ํ ํ๋ฆฟ ์์ญ๋ง ํํฌ์ธํธ๋ก ์ถ์ ํ์ฌ ๊ฐฑ์ ํ๋ค.
- Vue 3๋ ์ปดํฌ๋ํธ ํ ํ๋ฆฟ ๋ด์์ ๋ณํํ์ง ์๋ ์ ์ ์์์ ๋ณํํ๋ ๋์ ์์๋ฅผ ๋น๋ ํ์์ ๋ฏธ๋ฆฌ ๊ตฌ๋ถํ์ฌ ๊ฐ์ DOM ๋น๊ต ๋ฒ์๋ฅผ ๋ํญ ์ค์ธ๋ค.
- <p>{{count}}</p>์ฒ๋ผ ๋ณ์๊ฐ ๋ค์ด๊ฐ ๋ถ๋ถ์๋ ์ด ํ๊ทธ๋ ํ ์คํธ๋ง ๋ฐ๋๋ค๋ PathFlag(ํ๊ทธ)๋ฅผ ๋ฌ์๋๋ค.
- ๊ทธ๋์ ๊ฐ์ DOM ๋น๊ต๊ฐ ์์๋ ๋, Vue๋ ์ ์ ์์๋ ๊ฑด๋๋ฐ๊ณ PatchFlag๊ฐ ๋ถ์ ๋์ ์์๋ง ํํฌ์ธํธ๋ก ๋น๊ตํ๋ค.
- ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฌ๋ ๋๋ง ์ต์ ํ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ ๊ธฐ๋ณธ ๊ตฌ๋ ์ฑ๋ฅ์ด ์ผ์ ํ๊ฒ ์ ์ง๋๋ค. - ์๋ช
์ฃผ๊ธฐ ํ
์ ์ฐจ์ด์
์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ - DOM์ ๋ง์ดํธ๋๊ณ - ์ ๋ฐ์ดํธ๋๊ณ - ํ๊ดด๋๋ ๊ณผ์ (์๋ช ์ฃผ๊ธฐ)์ ๋ค๋ฃจ๋ ๋ฐฉ์์ ์ฐจ์ด๋ฅผ ์์๋ณด์.
React_ useEffect ์ค์ฌ์ Side Effect ๊ด๋ฆฌ
- React ํจ์ํ ์ปดํฌ๋ํธ์์๋ ๋จ๊ณ๋ณ ํ ์ด ๋ฐ๋ก ์กด์ฌํ์ง ์๋๋ค.
- useEffect๋ก ๋ง์ดํธ/์ ๋ฐ์ดํธ/์ธ๋ง์ดํธ ๋์์ ํตํฉ ๊ด๋ฆฌํ๋ค.
- React๋ ํน์ ๋ฐ์ดํฐ ์ํ๊ฐ ๋ฐ๋ ๋ ์ด๋ค Side Effect๋ฅผ ์คํํ๊ณ ์ ๋ฆฌํ ๊ฑด์ง ์ํ ๋๊ธฐํ ์ค์ฌ์ผ๋ก ์ ๊ทผํ๋ค.
Vue_ ๋ช ์์ ์ธ ์์ ๋ณ API
- Vue๋ ์ปดํฌ๋ํธ์ ํน์ ๋จ๊ณ์ ์ ํํ ๋ง์ถฐ ์คํ๋๋ ์ง๊ด์ ์ธ ์ด๋ฆ์ ํ ํจ์๋ค์ ์ ๊ณตํ๋ค.
- setup( )์ ์ปดํฌ๋ํธ ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ณ ๋ฐ์ํ ๋ฐ์ดํฐ๊ฐ ์ด๊ธฐํ๋๋ ์์ ์ด๋ค.
- onMounted( )๋ DOM ์์๊ฐ ์ค์ ํ๋ฉด์ ๋ง์ดํธ๋ ์งํ๋ค.
- onUpdated( )๋ ๋ฐ์ํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ผ๋ก ์ธํด DOM์ด ์ฌ๋ ๋๋ง ์๋ฃ๋ ์งํ๋ค.
- onUnmounted( )๋ ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ธ๋ง์ดํธ๋ ์งํ๋ค.
- Vue๋ ์ง๊ธ์ด ๋ง์ดํธ ๋จ๊ณ์ธ์ง ์ ๋ฐ์ดํธ ๋จ๊ณ์ธ์ง๋ผ๋ ์์ ์ค์ฌ์ผ๋ก ์ ๊ทผํ๋ค.