์ฃผ์š” ์ž‘์—…

  • ์ฃผ๊ฐ„ ๊ณ„ํš ์ž‘์„ฑ
  • ์ปดํฌ๋„ŒํŠธ ๋‚˜๋ˆ ์„œ ์„ค๊ณ„ํ•ด๋ณด๊ธฐ
  • ๊ธฐ์ดˆ ํ™˜๊ฒฝ ์„ธํŒ…(๋ฒˆ๋“ค๋ง, ts, tailwindCSS, ํŒŒ์ผ ๊ตฌ์กฐ ๋“ฑ)

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • fsd
  • ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ
  • ๋ฒˆ๋“ค๋ง
  • tailwindCSS

๊ณ ๋ฏผ ๋ฐ ํ•ด๊ฒฐ๊ณผ์ •

๋ฒˆ๋“ค๋ง ํˆด ์„ ํƒ

Vite๋ฅผ ์ด์šฉํ•œ ์ด์œ ๋Š” ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋นŒ๋“œํ•˜๋Š” ์ž‘์—… ์ž์ฒด๊ฐ€ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๊ฑธ๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๋‹ค ์›ํ• ํ•œ DX(๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜)์„ ์œ„ํ•ด์„œ๋Š” Vite๊ฐ€ ๋‚ซ๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค.

vite๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์— ๋Œ€ํ•ด dependencies์™€ source code ๋‘ ๊ฐ€์ง€์˜ ๋ฒ”์ฃผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๊ฐœ์„ ํ•œ๋‹ค.

dependencies์˜ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์‹œ ๋‚ด์šฉ์ด ๋ฐ”๋€Œ์ง€ ์•Š์„ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜์กด์„ฑ ๋ฒˆ๋“ค๋ง ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. Vite๋Š” Esbuild์˜ ๋นŒ๋“œ ํˆด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒˆ๋“ค๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, Esbuild์˜ ๊ฒฝ์šฐ ๊ธฐ์กด webpack์ด๋‚˜ parcel๋ณด๋‹ค 100๋ฐฐ ์ด์ƒ ๋น ๋ฅธ ์†๋„๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

Source code์˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ๊ฐ€ ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋งŒ๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ, ์ฆ‰ Non-plain Js๋“ค์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋“ค์˜ ๊ฒฝ์šฐ์—๋Š” ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”์„ฑ์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ์กด์˜ ๋ฒˆ๋“ค๋ง๋œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋Š” ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •์—์„œ ์†Œ์Šค ์ฝ”๋“œ์˜ ์ˆ˜์ •์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ๋งˆ๋‹ค ํ†ต์ฑ„๋กœ ๋‹ค์‹œ ๋ฒˆ๋“ค๋งํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ์‹œ๊ฐ„ ์†Œ์š”๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋А๋‚€ Vite๋Š” Native ESM ๋ฐฉ์‹์„ ์ด์šฉํ•ด์„œ ๊ฐœ๋ฐœ ์„œ๋ฒ„(Hot Reloading)๋ฅผ ๊ตฌ๋™ํ•œ๋‹ค. ESM ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์˜ ์žฅ์ ์€, import๋ฅผ ํ†ตํ•ด ๋™์ ์œผ๋กœ ๊ทธ๋•Œ๊ทธ๋•Œ ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค๋งŒ์„ ๊ฐ€์ ธ์˜จ๋‹ค๋Š” ์ ์ด๋‹ค. ๋ฒˆ๋“ค๋ง์„ ํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋ณ„ ํŒŒ์ผ์— ๋Œ€ํ•ด ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง๋งŒ ํ•œ ๋‹ค์Œ ์ด๋ฅผ importํ•˜๋Š” ๊ตฌ์กฐ๋“ค์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋ฅผ ์™„์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‚˜๋Š” ๋น ๋ฅธ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด vite๋ฅผ ์„ ํƒํ–ˆ๋‹ค

์ปดํฌ๋„ŒํŠธ์˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ

๊ธฐ์กด์— ๋‚ด๊ฐ€ ๋‚˜๋ˆ„๋˜ ๋Œ€๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ณด์•˜๋‹ค. ๊ฐ ์ปดํฌ๋„ŒํŠธ๋งˆ๋‹ค ํ•„์š”ํ•œ ์ด๋ฒคํŠธ์™€ ์–ด๋–ค data๋ฅผ fetchingํ•ด์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— props๋กœ ์ „๋‹ฌํ•ด์ฃผ์–ด์•ผ ํ• ์ง€๋ฅผ ์ ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ œ๊นŒ์ง€ ๋‚ด๊ฐ€ ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ui, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๋ชจ๋“  ๋กœ์ง๋“ค์ด ์–ฝํ˜€์žˆ์—ˆ๋‹ค. ์–ฝํ˜€์žˆ์–ด ๊ฐ€๋…์„ฑ ๋˜ํ•œ ์ข‹์ง€ ์•Š๋˜ ํƒ“์— ์˜ค๋ฅ˜ ํ•˜๋‚˜์˜ ์›์ธ์ด ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐพ๋Š” ๊ณผ์ • ๋˜ํ•œ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚˜๋Š” ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ ๋ณ„๋กœ ui, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์— ๋Œ€ํ•ด ๋ชจ๋‘ ๋ถ„๋ฆฌํ•˜๊ณ , ๋‹จ์ผ์ฑ…์ž„์›์น™(SRP)๋ฅผ ์ง€์ผœ๊ฐ€๋ฉด์„œ ์„ค๊ณ„๋ฅผ ๋‹ค์‹œ ํ•ด๋ณผ ์˜ˆ์ •์ด๋‹ค. ์ด๋Ÿฌํ•œ ์„ค๊ณ„ ๊ณผ์ •์—์„œ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋‚˜๋ˆ„๊ณ , ์ด๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” fsd ํŒจํ„ด์„ ์ ์šฉํ•˜๋ ค ํ•œ๋‹ค. fsd ํŒจํ„ด์˜ ๊ฒฝ์šฐ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋‚˜๋ˆ„๊ณ , ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ๋ณด๋‹ค ๊ฐ€๋…์„ฑ๊ณผ ๊ธฐ๋Šฅ๋ณ„ ํ™•์žฅ ๋“ฑ์ด ์šฉ์ดํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ fsd ํŒจํ„ด์„ ์ด์šฉํ•˜์—ฌ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋ณผ ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•ด์„œ ์„ค๊ณ„์ค‘์ด๋‹ค.