๐Ÿฅ• Byebye Vue.js

gon Kim
elecle
Published in
10 min readDec 27, 2021
Vue -> React

์ผ๋ ˆํด ์›นํ”„๋ก ํŠธํŒ€์—์„œ๋Š” ์–ด๋“œ๋ฏผ ํŽ˜์ด์ง€๋ฅผ react๊ธฐ๋ฐ˜์˜ next.js๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์–ด์š”. ์™œ ๊ตณ์ด ์•ˆ์ •์ ์œผ๋กœ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ๋Š” Vue.js๋ฅผ ํฌ๊ธฐํ•˜๊ณ  React ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฑธ๊นŒ์š”?

๐Ÿฅ• 3๋…„๊ฐ„ ๊ณ ์ƒํ•œ Vue.js/Nuxt.js

  • ์ผ๋ ˆํด์—์„œ๋Š” ์ง€๋‚œ 2019๋…„ 3์›”๋ถ€ํ„ฐ ํ•จ๊ป˜ํ•œ Vue.js๋ฅผ ํ†ตํ•ด ๋‹จ์ˆœํ•˜๊ฒŒ javascript์ฝ”๋“œ๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‚ด๋ถ€ ์–ด๋“œ๋ฏผ ์›น์— ์†์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”.
  • ํŠนํžˆ 1์ธํŒ€์œผ๋กœ ์‚ฌ์—… ํ™•์žฅ์— ๋”ฐ๋ฅธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ์œ„ํ•ด์„œ ์ตœ์†Œํ•œ์˜ ์œ ์ง€๋ณด์ˆ˜, ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ, ๋น ๋ฅด๊ณ  ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ํ˜„์‹ค์ ์ธ ํƒ€ํ˜‘์„ ํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ์–ด์š”
  • Vue.js๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœ์ ํŠธ๋Š” ๋”์šฑ ๋” ์œ ์—ฐํ•˜๊ณ  ๊ทœ์น™์—†์ด ํ™•์žฅ์— ์šฉ์ดํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๊ทธ๋ž˜์„œ ์ตœ์†Œํ•œ์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ทœ์น™์„ ๊ฐ€์ง€๊ณ , ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Nuxt.js๋ฅผ 2019๋…„ 10์›”๊ฒฝ ๋„์ž…ํ–ˆ์–ด์š”.
  • Nuxt.js๋Š” ํŽ˜์ด์ง€ ๋‹จ์œ„ ๊ฐœ๋ฐœ์ด ๊ฐ•์ œ๋˜์–ด, ์ˆ˜์‹ญ๊ฐœ์˜ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ง„ ์–ด๋“œ๋ฏผ ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ํ•œ์ธต ๋” ๋†’์—ฌ์ฃผ์—ˆ๊ณ , ๋ผ์šฐํŒ…์ด๋‚˜ ์ƒํƒœ๊ด€๋ฆฌ ๋“ฑ์˜ ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์ค„์ผ ์ˆ˜ ์žˆ์–ด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์— ์šฉ์ดํ–ˆ์–ด์š”.
  • Nuxt.js๋Š” ์ž์ฒด ๊ฒ€์ฆ๋œ @nuxtjs ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์•„๋ž˜ 3rd party ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ’๋ถ€ํ•˜์—ฌ ์ƒ๋Œ€์ ์œผ๋กœ ์•ˆ์ „ํ•˜๊ณ  ์‰ฝ๊ฒŒ importํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, localStorage๋‚˜ cookie, axios๋“ฑ์˜ โ€˜์–ด์ฐจํ”ผ ์•ˆ์ •์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌโ€™๋Š” @nuxtjs์˜ prefix๋ฅผ ๋‹จ ์ฑ„๋กœ ์ œ๊ณต๋˜๊ณ  ์žˆ์–ด์š”.

๐Ÿ’ป Vue.js/Nuxt.js์˜ ํ•œ๊ณ„

  • Vue.js์˜ option API๋Š” html๊ณผ javascript๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€๊ณ , data, methods, watch, computed๋“ฑ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ •์˜๋œ ๊ณณ์—์„œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์š”. ๋‹ค๋งŒ ๊ทธ๋ ‡๊ฒŒ ๋กœ์ง์„ ๊ตฌํ˜„ํ•จ์— ์žˆ์–ด์„œ this๋ผ๋Š” ๋งฅ๋ฝ์˜ ๋ถˆ๋ถ„๋ช…ํ•จ, mixins๋‚˜ filter๋กœ ์ „์—ญ์—์„œ ์ •์˜๋œ this๊ฐ์ œ์˜ ํ•„๋“œ๋‚˜ Vue์˜ property ๋“ฑ ๊ฐœ๋ฐœ ์ƒ์˜ ์• ๋งค๋ชจํ˜ธํ•จ์ด ์ปค์š”. ํŠนํžˆ ์›นํ”„๋ก ํŠธ ๊ฐœ๋ฐœ ํŒ€์›์ด ๋Š˜์–ด๋‚˜๋ฉด์„œ, ์–ด๋“œ๋ฏผ ํ”„๋กœ์ ํŠธ ์ž์ฒด๊ฐ€ ๋”์šฑ๋” ํ™•๋Œ€ ๋˜๋ฉด์„œ ์ด โ€˜์• ๋งค๋ชจํ˜ธํ•จโ€™์€ ๊ฐœ์„ ํ•  ํ•„์š”๊ฐ€ ์ปค์ง€๊ณ  ์žˆ์–ด์š”.
  • Vue.js/Nuxt.js๋Š” ์ด๋ฏธ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ตœ์ ํ™”๋‚˜ ํผํฌ๋จผ์Šค๋ฅผ ๋งŽ์ด ์‹ ๊ฒฝ์“ฐ๊ณ  ์žˆ์–ด์š”. ๋ฐ˜๋ฉด React/Next.js์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์˜๋„์ ์œผ๋กœ ๋ Œ๋”๋ฅผ ์ปจํŠธ๋กคํ•˜๊ฑฐ๋‚˜ ํšจ์œจ์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๋„๋ก ๋” ๋งŽ์ด ์‹ ๊ฒฝ์„ ์“ธ ์ˆ˜๊ฐ€ ์žˆ์–ด์š”. ์ฆ‰, Vue๋ณด๋‹ค React๊ฐ€ ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์ง์ ‘ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ ์ด๋ผ๊ณ  ํŒ๋‹จ๋˜์—ˆ์–ด์š”.
  • Vue.js/Nuxt.js๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ์ž์ฒด๊ฐ€ ์•„์ง ๋ถ€์กฑํ•ด์š”. React๊ธฐ๋ฐ˜ ์›น ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ›จ์”ฌ ๋” ๋งŽ๊ณ , ์ตœ์ ํ™”๋‚˜ ์ด์Šˆ์— ์žˆ์–ด ๊ฒ€์ƒ‰๊ณผ ๋Œ€์‘์ด ์šฉ์ดํ•ด์š”. (๊ทธ๋ ‡์ง€๋งŒ Next.js๋Š” ๋˜ ๋นˆ์•ฝํ•ด์š”..)

๐Ÿ’ป Vue์˜ ํ•œ๊ณ„ ๊ทน๋ณต ์‹œ๋„

  • Vue์—์„œ๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ์• ๋งค๋ชจํ˜ธํ•จ๊ณผ ๋กœ์ง์˜ ๋ถ„๋ฆฌ(๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ)๋ฅผ ์œ„ํ•ด ๊ธฐ์กด option api๊ณผ ๋‹ค๋ฅธ composition api๋ฅผ ๋„์ž…ํ•˜์—ฌ Vue 3.0์œผ๋กœ ์ •์˜ํ–ˆ์–ด์š”. Nuxt.js์—์„œ๋„ Vue 3.0 composition api๊ณผ ์ถ”๊ฐ€์ ์ธ ๊ฐœ์„ (๋นŒ๋“œ ์—”์ง„ ๊ฐœ์„  ๋“ฑ)์ด ์ด๋ฃจ์–ด์ง„ Nuxt 3.0์„ ๋Ÿฐ์นญํ•˜๊ณ ์ž ๋ฒ ํƒ€ ๋ฒ„์ „์„ ๋งŒ๋“ค๊ณ  ์ถœ์‹œ๋ฅผ ์ค€๋น„ํ•˜๊ณ  ์žˆ์–ด์š”.
  • ์ผ๋ ˆํด ์–ด๋“œ๋ฏผ ํ”„๋กœ์ ํŠธ์—์„œ๋„ nuxt 2.0์˜ ๋ธŒ๋ฆฟ์ง€ ๊ฐœ๋…์œผ๋กœ ์ œ๊ณตํ•˜๋Š” nuxtjs/composition ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด setup์—์„œ ๋กœ์ง๋‹จ์œ„์˜ ๋ถ„๋ฆฌ๋ฅผ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ง„ํ–‰ํ•ด ์™”์–ด์š”. ๋‹ค๋งŒ ์ด๋ฏธ vue 2.0/nuxt 2.0์œผ๋กœ ๊ตฌํ˜„๋œ ๊ธฐ์กด์˜ ๋ชจ๋“  ๋กœ์ง์„ ๋ฆฌํŒฉํ† ๋งํ•˜์ง€๋Š” ์•Š๊ณ  ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์–ด์š”. ์™œ๋ƒํ•˜๋ฉด 1) ๊ธฐ์กด์˜ ๋ชจ๋“  ๋กœ์ง์„ ๋ฆฌํŒฉํ† ๋ง ํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ด ๋งค์šฐ ์ปค์š”. 2) vue 3.0์˜ composition api๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” nuxtjs/composition ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด 3.0์„ ๋ง›๋ณด๊ณ  ์žˆ์ง€๋งŒ, ์•ˆ์ •์ ์ด์ง€ ์•Š์•˜๊ณ , ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ž„์‹œ์ ์œผ๋กœ vue 2.0/nuxt 2.0์ƒ์—์„œ ๊ธฐ๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด์—ˆ์–ด์š”. ํŠนํžˆ ์—๋ŸฌํŠธ๋ž™ํ‚น์ด ์ž˜ ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋‹ค์†Œ ์•ˆ์ •์ ์ด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ์‹ค์ œ ๊ฐœ๋ฐœํ•˜๋ฉฐ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”.
  • ๋”ฐ๋ผ์„œ ์•ˆ์ •์ ์œผ๋กœ ํ”„๋กœ๋•์…˜ ๋ฒ„์ „์˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•œ Nuxt 3.0์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ์–ด์š”. 2021๋…„ 10์›” Nuxt 3.0์˜ Beta๋ฒ„์ „์ด ์•ˆ์ •์ ์œผ๋กœ ๋ฐœํ‘œ ๋˜์—ˆ๊ณ , ํ”„๋กœ๋•์…˜ ๋ฒ„์ „๋งŒ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ์–ด์š”. ์˜คํ”ˆ ์†Œ์Šค๋กœ ๊ฐœ๋ฐœ๋˜๋Š” Nuxt ์ธ ๋งŒํผ ๋งŽ์€ ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค์ด issue์™€ discussion, pull request๋ฅผ ํ†ตํ•ด ์ฐธ์—ฌํ•˜๊ณ  ์žˆ์–ด์š”. ๊ทธ๋ ‡์ง€๋งŒ ์‹ค์ œ ๋„์ž…ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ Production๋ฒ„์ „์˜ ์•ˆ์ •์„ฑ์ด์—์š”. ๊ทธ๋ž˜์„œ ์–ธ์ œ ์ •์‹ ์ถœ์‹œ๊ฐ€ ๋ ๊นŒ? ํŠธ๋ž™ํ‚นํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ.. https://github.com/nuxt/framework/discussions/2198 2022๋…„ 1์›”๊นŒ์ง€ RC(์ตœ์ข… ์‹œํ—˜ํŒ) ์ถœ์‹œ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  2022๋…„ ์—ฐ๋ง production ๋ฒ„์ „์ด ์ถœ์‹œ๋  ๊ฒƒ์ด๋ผ๊ณ  ํ•ด์š”โ€ฆโ€ฆ..

๐Ÿฅ• Nuxt 3.0์€ ๋„ˆ๋ฌด ๋ฉ€๊ณ , ๊ธฐ์ˆ  ๋ถ€์ฑ„๋Š” ์Œ“์—ฌ ๊ฐ€๊ณ  ์žˆ์–ด์š”.

  • Vue.js/Nuxt.js 2.0์—์„œ์˜ ๊ธฐ์ˆ  ๋ถ€์ฑ„(์ตœ์ ํ™”, ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ๋” ์šฐ์„ ์œผ๋กœ ํ•œ ์ฝ”๋“œ ์ƒํƒœ)๋ฅผ Nuxt 3.0์—์„œ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋ฏธ๋ฃจ์–ด ๋‘๊ณ  ์žˆ์—ˆ์ง€๋งŒ, 2022๋…„ ์—ฐ๋ง์€ ๋„ˆ๋ฌด ๋Šฆ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์–ด์š”.
  • 2.0์— 3.0์„ ์–น์–ด์„œ ์ž˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ๋ถˆ์•ˆ์ •ํ•ด์š”. ๊ฒฐ๊ตญ ์–ด๋– ํ•œ ํ˜•ํƒœ๋“  ๊ธฐ์ˆ  ๋ถ€์ฑ„ ํ•ด์†Œ๊ฐ€ ํ•„์š”ํ•ด์š”. ๋‹ค๋งŒ Vue 2.0์ž์ฒด์˜ ํ•œ๊ณ„๋Š” ๋ช…ํ™•ํ•˜๊ณ , Nuxt 3.0์€ ๋ถˆ์•ˆ์ •ํ•ด์š”. ๊ฒฐ๊ตญ ์„ ํƒ์ง€๋Š” React๊ฐ€ ๋‚จ์•˜์–ด์š”.

๐Ÿฅ• React/Next.js๋ฅผ ๋„์ž…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์–ด์š”.

  • ๊ธฐ์ˆ ์ ์ธ ์ธก๋ฉด๋งŒ ๊ณ ๋ คํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์„œ๋น„์Šค, ์ด๋ฏธ ์•ˆ์ •์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ์œ ์ง€/๋ณด์ˆ˜๋“ฑ์„ ์ ๊ทน์ ์œผ๋กœ ๊ณ ๋ คํ–ˆ๋‹ค๋Š” ์ ์„ ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์–ด์š”! ํ˜„์žฌ๊นŒ์ง€ ์ž˜ ์ž‘๋™ํ•œ ์›น์ด์ง€๋งŒ, React๋ฅผ ๋„์ž…ํ•˜์—ฌ ๊ฐœ๋ฐœ์ ์œผ๋กœ๋„ challengingํ•˜๋ฉด์„œ๋„ ํ”„๋กœ๋•ํŠธ ๊ธฐํš/๋””์ž์ธ ์ธก๋ฉด์—์„œ๋„ ๋” ๋งŽ์€ ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊ฒจ์š”.
  • ๋”ฐ๋ผ์„œ ์•„๋ž˜ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์ง€๋งŒ, ์ ์ง„์ ์œผ๋กœ ๊ธฐ์กด ์–ด๋“œ๋ฏผ ์‚ฌ์ดํŠธ ์ด์šฉ์— ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ์—†๊ฒŒ ์•ˆ์ •์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•ด์š”. ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ž‘์€ ๋‹จ์œ„์˜ ์˜๋ฏธ์žˆ๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋Œ€์ƒ์„ ์„ ์ •ํ•œ ํ›„, ์ด์šฉ์ƒ ๋ฌธ์ œ๊ฐ€ ์—†๊ฒŒ ๋ณ€๊ฒฝํ•˜๊ณ  ์ด๋ฅผ ์ ์ง„์ ์œผ๋กœ ํ™•๋Œ€ํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๊ฐ€ React๋กœ ๋Œ€์ฒด๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•ด์š”.
  • ๋˜ํ•œ ์„œ๋น„์Šค์›น์€ ์•ˆ์ •์ ์œผ๋กœ React/Next.js๋กœ ์ œ๊ณต๋˜๊ณ  ์žˆ์–ด์š”. ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์— ์˜ํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์Šคํƒ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์ง€๋งŒ, ๋‹จ์ผ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐœ๋ฐœ์˜ ์œ ์ง€/๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ๋„ ์•ˆ์ •์„ฑ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ด์š”.
  • ์ด์ œ๋ถ€ํ„ฐ๊ฐ€ ์‹œ์ž‘์ด์—์š”. ๊ตฌ์ฒด์ ์ธ ๊ณ„ํš์„ ๋งˆ๋ จ์ค‘์ด๊ณ , ๋ฌธ์ œ ์—†์ด, seamlessํ•˜๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๋Š” ๊ฒƒ์„ ์ตœ์šฐ์„  ๋ชฉํ‘œ๋กœ ์‚ผ๊ณ  ์žˆ์–ด์š”. ๋˜ํ•œ ์ปดํฌ๋„ŒํŠธ๋‚˜ UI/UX ๊ฐœ์„  ๋“ฑ๋„ ํ•จ๊ป˜ ์ง„ํ–‰ํ•˜๊ณ ์žํ•ด์š”.

๐Ÿฅ• React๋กœ ๋ฌด์—‡์ด ๊ฐ€๋Šฅํ• ๊นŒ? ๊ฑฑ์ •๋„ ๋ถ„๋ช… ์žˆ์–ด์š”.

  • vue์˜ โ€˜์‰ฝ๋‹คโ€™๋Š” html, js์˜ ์กฐํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๋‹ค๋Š” ์ ์ด์—์š”. ๋‹ค๋งŒ ์ด๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์งˆ ์ˆ˜๋ก ๊ด€๋ฆฌ๊ฐ€ ๋‹ค์†Œ ๋ถˆํŽธํ•ด์ง€๋Š” ์ ์ด ์žˆ์—ˆ์–ด์š”. React์—์„œ๋Š” ๋ Œ๋” ์‹œ์ ์„ ํ†ต์ œํ•˜๊ฑฐ๋‚˜ ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์šฉ์ดํ•˜์—ฌ ํผํฌ๋จผ์Šค ๊ฐœ์„ ์— ํ›จ์”ฌ ๋„์›€์ด ๋  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ด๋ฏธ React๋ฅผ ๋„์ž…ํ•œ ์„œ๋น„์Šค์›น ํ”„๋กœ๋•ํŠธ๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์ ์„ ์ถฉ๋ถ„ํžˆ ํ™•์ธํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์—์„œ, ์‹ค์ œ๋กœ ์ผ๋ ˆํด ์„œ๋น„์Šค์—์„œ ๋” ๋ณต์žกํ•œ ์–ด๋“œ๋ฏผ ์‚ฌ์ดํŠธ์— React๋ฅผ ๋„์ž…ํ•˜์—ฌ ํ”„๋กœ๋•ํŠธ๋ฅผ ๊ฐœ์„ ํ•˜๋ฉด ํผํฌ๋จผ์Šค๋‚˜ ์œ ์ € ๊ฒฝํ—˜์„ ํ›จ์”ฌ ๋” ๋†’์ผ ์ˆ˜ ์žˆ๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„๋“ค์˜ ์—…๋ฌด ํšจ์œจ์ด ๋Œ€ํญ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • React๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ์ฐจ์„ธ๋Œ€ Figma๋กœ ํ‰๊ฐ€๋˜๋Š” Framer๋ฅผ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์–ด์š”. Figma๋กœ ๋””์ž์ธ์„ ์ง„ํ–‰ํ•˜์—ฌ๋„ ์ด๋ฅผ ๊ฐœ๋ฐœ ์ฝ”๋“œ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์ถ”๊ฐ€์ ์ธ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋“œ๋Š”๋ฐ Framer๋Š” ์ด์กฐ์ฐจ๋„ ์ž๋™ํ™”ํ•ด์ฃผ๋Š” ํˆด์ด์—์š”.(Figma์™€ ๋ณ„๋„์˜ ํˆด์ด์ง€๋งŒ, Figma์˜ ์ƒ์œ„ํ˜ธํ™˜) ํŠนํžˆ React๊ธฐ๋ฐ˜ ์›น ํ”„๋กœ์ ํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ๋””์ž์ธ โ†’ ๊ฐœ๋ฐœ์— ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ๋ณธ์ด๊ณ , ์ง์ ‘ ์ฝ”๋”ฉ๋˜์–ด ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง์ ‘ โ€˜์ด์šฉโ€™ํ•˜์—ฌ ๋””์ž์ธํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Š” ํŠนํžˆ ์–ด๋“œ๋ฏผ ํ”„๋กœ๋•ํŠธ์— ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š”๋ฐ์š”, ํ˜„์žฌ ์Šคํฌ๋ฆฐ์ƒท์ด๋‚˜ ์ž„์‹œ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐํšํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์‹ค์ œ๋กœ ์ด์šฉ๋˜๊ณ  ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋” ์ ๊ทน์ ์œผ๋กœ, ๊ทธ๋Ÿผ์—๋„ ํ›จ์”ฌ ์†์‰ฝ๊ฒŒ ์ด์šฉํ•จ์œผ๋กœ์จ ์–ด๋“œ๋ฏผ ํ”„๋กœ๋•ํŠธ ๊ธฐํš/๊ฐœ๋ฐœ ํšจ์œจ์ด ๋งค์šฐ ํ–ฅ์ƒ๋  ๊ฒƒ์ด๋ผ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์–ด์š”.
  • React๋Š” Vue๋ณด๋‹ค (์šฐ๋ฆฌ๋‚˜๋ผ์—์„œ) ๊ฐœ๋ฐœ์ž ํ’€ ํ™•๋ณด๊ฐ€ ํ›จ์”ฌ ์šฉ์ดํ•ด์š”. ์–ธ์  ๊ฐ€ ์ผ๋ ˆํด ์„œ๋น„์Šค๊ฐ€ ํ™•์žฅ๋  ์ˆ˜๋ก, ๋˜ ์–ด๋– ํ•œ ์ƒํ™ฉ์—์„œ๋„ React ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ์Šคํƒ์€ ์žฅ์ ์ด ๋  ๊ฑฐ์—์š”.
  • ๋‹ค๋งŒ Vue์—์„œ ๋””์ž์ธ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์‹ค์ƒ 0์œผ๋กœ ์ค„์—ฌ์ฃผ์—ˆ๋˜ Vuetify ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋”์ด์ƒ ์ด์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฑฐ์—์š”. Vuetify๋Š” ๋‹จ์ˆœํ•œ UI๋””์ž์ธ ์ด์™ธ์—๋„ Vue์ž์ฒด์™€ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด๋‚˜ ๋กœ์ง๊ณผ ๊ฒฐํ•ฉ๋œ ํ˜•ํƒœ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ’๋ถ€ํ–ˆ์–ด์š”. ์ด๋ฅผ React์—์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์€ ๋ถ„๋ช… ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•ด์š”. ํ•˜์ง€๋งŒ Vuetify๋„ Material UI๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋ ˆ์ž„์›Œํฌ๊ณ , ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ React์—์„œ๋„ Material UI๋ผ๋Š” UIํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์กด์žฌํ•ด์š”. ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋กœ์ง์„ ์ •์˜ํ•˜๊ณ  ์ปค์Šคํ…€ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ฒ ์ง€๋งŒ Framer์˜ ๋„์ž…๊ณผ ํ•จ๊ป˜ ํ›จ์”ฌ ๋” ์˜๋ฏธ์žˆ๋Š” ๋ฐฉ์‹์ด ๋  ๊ฒƒ์ด๋ผ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿฅ• ๊ทธ๋ž˜์„œ ์ง€๊ธˆ๋ถ€ํ„ฐ ๊ธฐ์กด ์–ด๋“œ๋ฏผ ๊ฐœ๋ฐœ์„ ์ค‘๋‹จํ•˜๋Š” ๊ฑด๊ฐ€์š”?

  • ์•„๋‹ˆ์—์š”. ๋ชจ๋“  ์Šคํ”„๋ฆฐํŠธ๋‚˜ ํ˜„์žฌ ์–ด๋“œ๋ฏผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ๊ธฐ๋Šฅ ์ค‘๋‹จ์ด๋‚˜ ๋ถ€๋ถ„์  ๊ฐœ๋ฐœ ์ค‘๋‹จ ์กฐ์ฐจ ์—†์ด ๊ธฐ์กด๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ๋™์ผํ•˜๊ฒŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€/๊ฐœ์„ /๋ณ€๊ฒฝ ๋“ฑ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋ฏธ ์–ด๋“œ๋ฏผ ํ”„๋กœ์ ํŠธ์— ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€/๊ฐœ์„ /๋ณ€๊ฒฝ ํƒœ์Šคํฌ๋Š” ์ด๋ฏธ ๊ธฐ์กด ์ฝ”๋“œ๋Š” ์œ ์ง€/๋ณด์ˆ˜์˜ ๊ด€์ ์—์„œ, ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋Š” vue 3.0์˜ api๋ฅผ ๋จผ์ € ๋„์ž…ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์˜ ๋„์ž… ๊ด€์ ์—์„œ ๋Œ€์‘ํ•˜๊ณ  ์žˆ์—ˆ์–ด์š”. ์ด์™€ ๊ฐ™์€ ๊ธฐ์กฐ๋Š” ๋ฆฌํŒฉํ† ๋ง์ด ๋ถˆ๊ฐ€ํ”ผํ•œ ์ƒํ™ฉ์—์„œ ์ง€์†๋  ๊ฒƒ์ด์—์š”.

๐Ÿฅ• ์–ด๋–ป๊ฒŒ ๋„์ž…ํ• ๊นŒ์š”?

  • ์ตœ์ข… ๋ชฉํ‘œ๋Š” ๋ชจ๋“  ์–ด๋“œ๋ฏผ ํ”„๋กœ์ ํŠธ์˜ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ react๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฑฐ์—์š”.
  • ๋‹ค๋งŒ ์ด๊ฒƒ์ด ์‹คํ˜„๊ฐ€๋Šฅํ•˜๋„๋ก ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์ง„์ ์œผ๋กœ ๋„์ž…ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”
  1. ๊ณ ๊ฐ๊ด€๋ฆฌ ์–ด๋“œ๋ฏผ ์‚ฌ์ดํŠธ์˜๊ฒฐ์ œ ๋‚ด์—ญ ํŽ˜์ด์ง€๋ฅผ reactํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•œ ๊ฒฐ์ œ ๋‚ด์—ญ ํŽ˜์ด์ง€๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
    - ์ด ๋•Œ, ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ Framer๋ฅผ ๋„์ž…ํ•˜๋Š” ๋“ฑ react/next๋ฅผ ์ด์šฉํ•œ ํฐ ํ‹€๊ณผ ๊ฐœ๋ฐœ ํ”„๋กœํ† ์ฝœ์„ ์ƒ์„ธํžˆ ์žก์•„๋‚˜๊ฐˆ ์˜ˆ์ •์ด์—์š”.
    - ๋˜ํ•œ ์‹ค์ œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋”๋ผ๋„, ๋™์ž‘์€ ๊ธฐ์กด๊ณผ ๋™์ผํ•˜๋„๋ก, ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ถ”๊ฐ€์ ์œผ๋กœ ๋กœ๊ทธ์ธ์ด ํ•„์š” ์—†๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ๋ฉ”๋‰ด nav bar๋ฅผ ํ†ตํ•œ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋กœ์˜ ์ด๋™๋„ ๋‘ ์‚ฌ์ดํŠธ๊ฐ„ ๋ฌธ์ œ ์—†์ด ํ˜ธํ™˜๋  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์—…ํ•˜๊ณ ์ž ํ•ด์š”. seamless๊ฐ€ ๊ฐ€์žฅ ํฐ ๋ชฉํ‘œ์—์š”
    - ๊ธฐ๋Šฅ์ ์ธ ๋ณ€๊ฒฝ์ด๋‚˜ ๊ธฐํš์ƒ์˜ ๋ณ€๊ฒฝ์€ ์ „ํ˜€ ์—†์„ ๊ฑฐ์—์š”.
  2. ๊ณ ๊ฐ๊ด€๋ฆฌ ์–ด๋“œ๋ฏผ์˜ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋“ค์„ reactํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋Œ€์ฒดํ•˜์—ฌ ๊ณ ๊ฐ๊ด€๋ฆฌ ์–ด๋“œ๋ฏผ ์ž์ฒด๋ฅผ ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ž‘์„ฑํ•˜์—ฌ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์šด์˜ ์–ด๋“œ๋ฏผ์—์„œ ๊ณ ๊ฐ๊ด€๋ฆฌ ์–ด๋“œ๋ฏผ๊ณผ ๊ณต์œ ํ•˜๊ณ  ์žˆ๋Š” ํŽ˜์ด์ง€๋“ค์„ react๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
  4. ์šด์˜ ์–ด๋“œ๋ฏผ์˜ ๋‚จ์€ ํŽ˜์ด์ง€๋„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
    - ์ด ๋•Œ ํŠนํžˆ h3์ด๋‚˜ ์ง€๋„ ๊ด€๋ จ ๊ธฐ๋Šฅ์€ ๋งค์šฐ heavyํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ •์„ฑ์„ ์ตœ์„ ์œผ๋กœ ๊ธฐ์กด ๊ธฐ๋Šฅ ์ด์šฉ์— ๋ฌธ์ œ๊ฐ€ ์—†๋„๋ก ๋งˆ์ง€๋ง‰์— ๋Œ€์ฒด๋ฅผ ํ•  ๊ฒƒ ๊ฐ™์•„์š”.
  • ํฌ๊ฒŒ๋Š” ์œ„ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์ผ๋‹จ 1๋ฒˆ์„ 1์›”์— ์ง„ํ–‰ํ•ด๋ณด๋ฉฐ ์ „์ฒด์ ์ธ ํƒ€์ž„๋ผ์ธ์„ ๋” ๊ตฌ์ฒดํ™”๋‚˜๊ฐ€๊ณ ์ž ํ•ด์š”.
  • ๊ธฐ์กด ์Šคํ”„๋ฆฐํŠธ๋‚˜ ํ”„๋กœ๋•ํŠธ ๊ฐœ๋ฐœ์—๋„ ๋ฌธ์ œ ์—†์ด, ์žฅ๊ธฐ์ ์ธ ์žฅ๋‹จ์ ์„ ๊ณ ๋ คํ•ด์„œ ๋‚ด๋ฆฐ ๊ฒฐ์ •์ด์—์š”! ์›นํ”„๋ก ํŠธ์—”๋“œํŒ€์€ ํ”„๋กœ๋•ํŠธ ์ ์œผ๋กœ, ๊ธฐ์ˆ  ์ ์œผ๋กœ๋„ ํ›จ์”ฌ ๋” ๋‚˜์€ ๋ฐฉํ–ฅ์ด๋ผ๊ณ  ๋ฏฟ๊ณ  ์žˆ๊ณ , react๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์–ด์š”. ๋งŽ์€ ์ฝ”๋ฉ˜ํŠธ, ํ”ผ๋“œ๋ฐฑ๊ณผ ์‘์› ๋ถ€ํƒ๋“œ๋ ค์š”! ๐Ÿฅ•

--

--