๐ Vue.js ์ ๋ฆฌ
์์ ์ฌํญ,
- vuex -> pinia
- vue create -> vue latest, vite ๊ธฐ๋ฐ ๋น๋ ํด ์ฌ์ฉ
- optional API -> Compositional API ์ฌ์ฉ
- ์ต์ ๊ธฐ์ ๋ก ์ ๋ฐ์ดํธ ํ๋ ์ค,,,
00. ์ Vue ์?
- ์นด์นด์ค FE ๊ฐ๋ฐ์๋ค์ ๋ฆฌ์ํธ๋ ๋ทฐ ๋ฐ๋ฐ ์ด๋ค๊ณ ํจ
- ๊ทผ๋ฐ ์ ์ด์ ์ ์ ํ ๋ฆฌ์ํธ ์์ฐ๊ณ ๋ทฐ๋ก ์๋ก์ด ํ์ด์ง ๋ง๋ค์ด๋ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
- ์นด์นด์ค๋ ๋ค์ด๋ฒ๋
- ํนํ ๋ค์ด๋ฒ ๋ฎค์ง Vibe ๋ฐ๊ฟ๋ Vue๋ฅผ ์ฌ์ฉํด์ ๋ฐ๊ฟ -> ์ด์ผ์? ๊ฐ์ V๋ก ์์ํจ ใ
๊ทธ๋์ ๊ทธ ์ด์ ๊ฐ ๋จผ๋ฐ?
- ์ผ๋จ React, Vue, Angular ์์ฐ๋๋ฉด
- web-app ๋ง๋ค๋ ์
- ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ ๋์ง ์๊ณ ๋ถ๋๋ฝ๊ฒ ์ ํ๋๋ ์ฌ์ดํธ
- ํ์ด์ง๋ฅผ ์๋กญ๊ฒ ๋ถ๋ฌ์ค๋๊ฒ ์๋๋ผ js๋ก html์ ๊ฐ์์น์ฐ๋ฉด์ ๋ถ๋๋ฝ๊ฒ ๊ตฌํํ๋ ๊ฒ์
ok ์ js๋ก ์ํ๊ณ ?
- ๊ฐ๊ท์ฐฎ๊ณ ์ฝ๋๊ฐ ๊ธธ์ด์ง
- ๊ทผ๋ฐ ์ ๊ตณ์ด ๋ค๋ฅธ์ ๋ค ์ต์ ์ ํ ๋ฆฌ์ํธ ์์ฐ๊ณ ๋ทฐ์?
์งฑ์งฑ ์ฌ์์ ์
- ในใ ๊ฐ ์ค์ํ ์ด์
- ์ฌ์ค ์์ ๋งํ๋ 3๊ฐ ์ ๋ถ๋ค ๋๊ฐ์ด ๋ง๋ค ์ ์์
- Angular๋ ๋งค์ฐ ๋ฐฉ๋ํ๊ณ , Typescript๋ฅผ ๊ฐ์ ๋ก ์จ์ผํจ
- React๋ ๊ธฐ์กด js๋ฌธ๋ฒ์ ๋งค์ฐ๋งค์ฐ ๋ง์ด ํ์ฉํ๊ณ
- Vue๋ Vue ๋ฌธ๋ฒ์ ์๋กญ๊ฒ ๋ฐฐ์ฐ๋ผ๊ณ ํจ
๊ทธ๋์ js ๋นกํต์ผ์๋ก Vue๊ฐ ์งฑ์งฑ ์ฌ์์ง๋๊ฑฐ์
- ์ด๋ณด๋ 2~3์๊ฐ ๋ฐฐ์ฐ๋ฉด ๋์ถฉ ๋ง๋ค ์ ์์
- ์ฝ๋๋ก ์ค๋ช ํด๋ณด๋ฉด
// react์ if (1)
function App() {
const conditional = () => {
if (true) {
return <p>์ด๊ฑฐ ๋ณด์ฌ์ฃผ์
</p>;
} else {
return <p>์ด๊ฑฐ ๋ง๊ณ ,,</p>;
}
};
return <div>{conditional()}</div>;
}
// react์ if (2)
function App() {
return <>{true ? <p>์ด๊ฑฐ ๋ณด์ฌ์ฃผ์
</p> : <p>์ด๊ฑฐ ๋ง๊ณ ,,</p>}</>;
}
// vue์ if
<template>
<div>
<p v-if="show">์ด๊ฑฐ ๋ณด์ฌ์ฃผ์
</p>
<p v-else>์ด๊ฑฐ ๋ง๊ณ ,,</p>
</div>
</template>
๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๊ณ ํ์ ๋, React vs Vue์ ์ฐจ์ด
- ๋ง์ ๊ฒฝ์ฐ์ vue๊ฐ ๋ ๊น๋ํจ
- ํนํ ์ง์ผํ ์ฝ๋๊ฐ ๋ ๋ณต์กํ ์๋ก ์ฅ์ ์ด ๋ค์ด๋จ
- HTML ์ค๊ฐ์ค๊ฐ js ์ค๊ดํธ ๊ฐ์๊ฑธ ๋ง์ด ์์ง๋ ์๊ณ , ๊น๋ํ๊ฒ HTML ์ค๋ฝ๊ฒ ๋ณผ ์ ์์ด์ ํ์ด์ง ๊ตฌ์กฐ ํ์ ์ฌ์์ง
- ํ์ง๋ง ๊ฐ์ธ์ทจํฅ์ผ ๊ฐ๋ฅ์ฑ๋ ์์
๊ทธ๋๋ Vue๊ฐ ์ฝ๋ค๊ณ ํด์ ๋ญ ๊ฐ๋จํ ์ฌ์ดํธ๋ง ๋ง๋ค์ ์๋๊ฒ ์๋
- ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๊ณผ ๊ธฐ๋ฅ์ ์ฐจ์ด๋ ๊ฑฐ์ ์์
- ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋๊ฐ์ด ๋ง๋ค์ด ๋ผ ์ ์์
- ๋ค๋ง ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅผ ๋ฟ,,
๋งค์ฐ ์ค์!! Right Way๊ฐ ์์
- ๋ฆฌ์ํธ๋ ์ฝ๋์ง๋ ๋ฐฉ๋ฒ์ด ๋งค์ฐ ์์ ๋ก์
- ๋ชจ๋ ๊ฑธ ํ์ฉํ๋ ๋ฌธ๋ฒ, ์๋ฅผ๋ค๋ฉด HTML์ ๋ฐฐ์ด์๋ด์์ ์ฐ๋ ํจ์์ ๋ฃ๋ค ๋นผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ ๊ทน ํ์ฉํ์ฌ ๊ฐ๋ฐํ๊ฒ ๋จ
- for ํ๋๋ง ์ฐ๋ ค๊ณ ํด๋, map, forEach, for in, for of ๋ฑ ๋ง์ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉ ํ ์ ์์
- ๋ ์ด๋์ ์ธ์ ์ด๋ป๊ฒ ์ธ์ง๋ ๋๋ค์ด ์์์ ์ ํํด์ผํจ
๊ทผ๋ฐ Vue๋ ๊ทธ๋ฐ๊ฒ ์์ ์ ๋ต์ด ์ ํด์ ธ์์ ??? ์ด๊ฒ ์ ์ฅ์ ์?
- ์์ ๋ฅผ ์ฃผ๋ฉด ์ค์, ๊ณ ์๋ ํธ๋ฆฌํ ์ ์๊ฒ ์ผ๋, ์ด๋ณด๋ ์ด๋ ๊ฒ ํด๋ ๋๋,,,? ์ถ์ผ๋๊น ์ธํฐ๋ท ๋ค์ง๋ ๊ฒฝ์ฐ๋ ๋ง์
-
๊ทธ๋์ ์ฝ๋ ์ง๋ ๋ฐฉ๋ฒ์ ์ ํด์ฃผ๊ณ ๊ฐ๋ฅด์ณ ์ฃผ๋ Vue๊ฐ ์ด๋ณดํํ ์ฝ๊ฒ ๊ตฐ
- ํ์ฝํ ๋ ํธ๋ฆฌํจ์์ค
- ์ฝ๋ฉ์คํ์ผ์ด ์์ ๋ก์ฐ๋ฉด ์ฝ๋ฉ ์คํ์ผ ๋ง์ถ๋๋ฐ ์๊ฐ์ด ๋งค์ฐ๋งค์ฐ ์๋ชจ๋จ, ์ด๊ฑฐ ๊ท์ฐฎ๋ค๊ณ ์๋ง์ถ๋ฉด ๋์ค์ ๋งค์ฐ ํ๋ฌ
-
๊ทผ๋ฐ ์ ํด์ ธ์๋ค?? ์ด๋์ ๋ ๋ง์ถ๊ธฐ ์ฌ์์ง๋ค
- ์ฝ๋์ ์์ด ๋ง์์ง๋ฉด!! ์ค์.. ์ฝ๋์ง๋ ๋ฒ์ด ์ ํ์ ์ธ๊ฑด ๋งค์ฐ ํฐ ์ฅ์
- ๋ฌด์์ ๊ฐ๋ฐํ๋ ํ์ ๋ง์ถ์ด ์ฝ๋๋ฅผ ์ง๋์ผ ๋์ค์ ์์ ๊ณผ ๊ด๋ฆฌ๊ฐ ํธํด์ง
๊ทธ๋ ๋ค๊ณ Vue๊ฐ ๊ฝ๋งํ ํ๋ฑ ์ธ์ด๋?? ๊ทธ๋ฐ๊ฑด ์๋๊ณ , JSX. functional compoent ๊ฐ์ ๋ฆฌ์ํธ ์ค๋ฌ์ด ์์ ๋ก์ด ์น์ฑ ํ๋ก๊ทธ๋๋ฐ๋ ์ง์ํจ
01. ๊ฐ๋ฐํ๊ฒฝ ์ธํ ๊ณผ, Vue 3 ๋ฒ์ ์ค์น
- node.js lts ๋ฒ์ ์ค์น
- Vscode ์๋ํฐ ์ค์น
- ์๋ฌด๋ฐ๋ ์์ ์ฉ ํด๋ ๋ง๋ค๊ณ vscode์์ ์ด๊ธฐ
npm init vue@latest
๋ช ๋ น์ด ์ ๋ ฅ-
์ดํ ์ต์ ์ ํ
โ Project name: โฆ <your-project-name> โ Add TypeScript? โฆ No โ Add JSX Support? โฆ No โ Add Vue Router for Single Page Application development? โฆ Yes โ Add Pinia for state management? โฆ Yes โ Add Vitest for Unit testing? โฆ Yes โ Add Cypress for both Unit and End-to-End testing? โฆ No โ Add ESLint for code quality? โฆ No โ Add Prettier for code formatting? โฆ No Scaffolding project in ./<your-project-name>... Done.
-
์์ฑํ ํ๋ก์ ํธ ๋ค์ด๊ฐ์ ์์ํ๋ฉด ๋จ
> cd <your-project-name> > npm install > npm run dev
-
๋น๋ํ๋ ค๋ฉด ๋น๋ ๋ช ๋ น์ด ์ ๋ ฅํ๋ฉด ๋จ
> npm run build
๋๊ธ๋จ๊ธฐ๊ธฐ