์ˆ˜์ •์‚ฌํ•ญ,

  1. vuex -> pinia
  2. vue create -> vue latest, vite ๊ธฐ๋ฐ˜ ๋นŒ๋“œ ํˆด ์‚ฌ์šฉ
  3. optional API -> Compositional API ์‚ฌ์šฉ
  4. ์ตœ์‹  ๊ธฐ์ˆ ๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ์ค‘,,,

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 ๋ฒ„์ „ ์„ค์น˜

  1. node.js lts ๋ฒ„์ „ ์„ค์น˜
  2. Vscode ์—๋””ํ„ฐ ์„ค์น˜
  3. ์•„๋ฌด๋ฐ๋‚˜ ์ž‘์—…์šฉ ํด๋” ๋งŒ๋“ค๊ณ  vscode์—์„œ ์—ด๊ธฐ
  4. npm init vue@latest ๋ช…๋ น์–ด ์ž…๋ ฅ
  5. ์ดํ›„ ์˜ต์…˜ ์„ ํƒ

    โœ” 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.
    
  6. ์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ ๋“ค์–ด๊ฐ€์„œ ์‹œ์ž‘ํ•˜๋ฉด ๋จ

    > cd <your-project-name>
    > npm install
    > npm run dev
    
  7. ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋นŒ๋“œ ๋ช…๋ น์–ด ์ž…๋ ฅํ•˜๋ฉด ๋จ

    > npm run build
    

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ