[TECH-QA] ์ปดํŒŒ์ผ(Compile)๊ณผ ๋นŒ๋“œ(Build) ๊ทธ๋ฆฌ๊ณ  React ์›นํŒฉ(Webpack)๊ณผ ๋ฐ”๋ฒจ(Babel)

์ปดํŒŒ์ผ (Compile)

์ปดํŒŒ์ผ์€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•œ ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(์˜ˆ: C, Java, Python ๋“ฑ)์—์„œ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ €๊ธ‰ ์–ธ์–ด(๊ธฐ๊ณ„์–ด ๋˜๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์ปดํŒŒ์ผ๋Ÿฌ(Compiler)๋ผ๋Š” ๋„๊ตฌ๊ฐ€ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, C ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ(์˜ˆ: .exe)์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.
  • ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋‚˜ ํƒ€์ž… ์˜ค๋ฅ˜ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด๋ฅผ ์žก์•„๋‚ด๊ณ  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ (Build)

๋นŒ๋“œ๋Š” ์ปดํŒŒ์ผ์„ ํฌํ•จํ•œ ๋” ํฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ๋งŒ๋“œ๋Š” ์ „์ฒด ์ž‘์—…์„ ๋นŒ๋“œ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ๋นŒ๋“œ ๊ณผ์ •์—๋Š” ๋ณดํ†ต ์ด๋Ÿฐ ๋‹จ๊ณ„๋“ค์ด ํฌํ•จ๋˜๋ฉฐ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํ”„๋กœ์ ํŠธ ์ „์ฒด๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 1.์ปดํŒŒ์ผ : ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜.
  • 2.๋งํ‚น(Linking) : ์—ฌ๋Ÿฌ ์†Œ์Šค ํŒŒ์ผ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•˜๋‚˜๋กœ ์—ฐ๊ฒฐ.
  • 3.ํ…Œ์ŠคํŠธ : ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ์‹คํ–‰ (๊ฒฝ์šฐ์— ๋”ฐ๋ผ).
  • 4.ํŒจํ‚ค์ง• : ์‹คํ–‰ ํŒŒ์ผ์ด๋‚˜ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ(์˜ˆ: .jar, .apk) ์ƒ์„ฑ.
์š”์•ฝํ•ด๋ณด์ž๋ฉด
  • ์ปดํŒŒ์ผ: ์ฝ”๋“œ ๋ฒˆ์—ญ ๊ณผ์ • (๋ถ€๋ถ„).
  • ๋นŒ๋“œ: ์ปดํŒŒ์ผ + ์ถ”๊ฐ€ ์ž‘์—…๊นŒ์ง€ ํฌํ•จํ•œ ์ „์ฒด ์ค€๋น„ ๊ณผ์ •.

๋ฆฌ์•กํŠธ ๋นŒ๋“œ(Build)๋„๊ตฌ

๋ฆฌ์•กํŠธ(React)์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋นŒ๋“œ ๋„๊ตฌ๋“ค์€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ ์ฝ”๋“œ ๋ฒˆ๋“ค๋ง, ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง, ์ตœ์ ํ™” ๋“ฑ์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ๊ฐœ๋ฐœ ๊ฒฝํ—˜๊ณผ ๋ฐฐํฌ ํšจ์œจ์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค. ์•„๋ž˜์— ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋นŒ๋“œ ๋„๊ตฌ๋“ค์„ ์„ค๋ช… ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์›นํŒฉ(Webpack)

์›นํŒฉ์€ ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ์„ ๋น„๋กฏํ•œ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค(์˜ˆ: CSS, ์ด๋ฏธ์ง€, ํฐํŠธ ๋“ฑ)๋ฅผ ์ฐพ์•„๋‚ด๊ณ , ์ด๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜๋‚˜์˜ ๋ฒˆ๋“ค(Bundle)๋กœ ๋ฌถ๊ณ  ํŒจํ‚นํ•˜๋Š” ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ(Module Bundler)์ž…๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ž€, ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋‚˜๋‰˜์–ด ์žˆ๋Š” ํŒŒ์ผ๋“ค(๋ชจ๋“ˆ๋“ค)์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•ด ์ฃผ๋Š” ๋„๊ตฌ์ด์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์›นํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, ์Šคํƒ€์ผ์‹œํŠธ, ์ด๋ฏธ์ง€ ๋“ฑ ์ˆ˜๋งŽ์€ ํŒŒ์ผ์ด ํ•„์š”ํ•  ๋•Œ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด ํŒŒ์ผ๋“ค์„ ์„œ๋ฒ„์— ๊ฐœ๋ณ„์ ์œผ๋กœ ์š”์ฒญํ•˜๋ฉด ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๊ณ  ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›นํŒฉ์€ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ผ(๋˜๋Š” ํ•„์š”์— ๋”ฐ๋ผ ๋ช‡ ๊ฐœ์˜ ํŒŒ์ผ)๋กœ ์••์ถ•ํ•˜๊ณ  ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฒˆ๋“ค๋ง๋œ ๊ฒฐ๊ณผ๋ฌผ์€ ์š”์ฒญ ํšŸ์ˆ˜๋ฅผ ์ค„์ด๊ณ , ์ฝ”๋“œ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ์˜์กด์„ฑ ๊ด€๋ฆฌ : ์›นํŒฉ์€ ํ”„๋กœ์ ํŠธ ๋‚ด ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, import๋‚˜ require๋กœ ์—ฐ๊ฒฐ๋œ ํŒŒ์ผ๋“ค์„ ์ถ”์ ํ•ด ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ํฌํ•จ์‹œํ‚ค๊ณ , ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋Š” ์ œ์™ธ(ํŠธ๋ฆฌ ์‰์ดํ‚น)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋กœ๋”(Loader) : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์™ธ์—๋„ CSS(css-loader), ์ด๋ฏธ์ง€(file-loader), TypeScript(ts-loader) ๋“ฑ ๋‹ค์–‘ํ•œ ํŒŒ์ผ ํ˜•์‹์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ™•์žฅ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ”Œ๋Ÿฌ๊ทธ์ธ(Plugins) : ๋ฒˆ๋“ค๋ง ๊ณผ์ •์—์„œ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, HtmlWebpackPlugin์€ HTML ํŒŒ์ผ์„ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ , UglifyJsPlugin์€ ์ฝ”๋“œ๋ฅผ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ : webpack-dev-server๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ๋ฐ˜์˜ํ•˜๋Š” ํ•ซ ๋ฆฌ๋กœ๋”ฉ(Hot Reloading)์„ ์ œ๊ณตํ•ด ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.
  • ์ตœ์ ํ™” : ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ฝ”๋“œ ๋ถ„ํ• (Code Splitting)์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜, ์บ์‹ฑ์„ ํ™œ์šฉํ•ด ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ์›นํŒฉ์€ JSX๋ฅผ ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜(Babel๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ)ํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ์™€ ์Šคํƒ€์ผ, ๊ธฐํƒ€ ์ž์›์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋งŒ๋“œ๋Š” ๋ฐ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ Create React App์€ ์›นํŒฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค์ •์ด ๋ฏธ๋ฆฌ ๋˜์–ด ์žˆ์–ด, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ, ์›นํŒฉ์€ ๋‹จ์ˆœํžˆ ํŒŒ์ผ์„ ๋ฌถ๋Š” ๊ฒƒ์„ ๋„˜์–ด, ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ์—์„œ ํ•„์ˆ˜์ ์ธ ์ฝ”๋“œ ์ตœ์ ํ™”์™€ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์„ค์ •์ด ๋ณต์žกํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์  ๋•Œ๋ฌธ์— ์ตœ๊ทผ์—๋Š” Vite๋‚˜ Parcel ๊ฐ™์€ ๋Œ€์•ˆ๋„ ์ฃผ๋ชฉ๋ฐ›๊ณ  ์žˆ์ฃ .

๋ฐ”๋ฒจ(Babel)

๋ฐ”๋ฒจ์€ ๋ชจ๋“  ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ(Transpiler)์ž…๋‹ˆ๋‹ค.
  • ์ฃผ๋กœ ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•(์˜ˆ: ES6/ES2015 ์ด์ƒ)์„ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ES5 ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ์•กํŠธ์˜ JSX๋‚˜ TypeScript(TS)์™€ ๊ฐ™์€ ํŠน์ˆ˜ ๋ฌธ๋ฒ•์„ ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ,
  • ํŠน์ • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋˜์ง€ ์•Š๋Š” ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ์ฝ”๋“œ๋ฅผ ์žฌ๊ตฌ์„ฑํ•ด ์ค๋‹ˆ๋‹ค.

ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง(Transpiling)์˜ ์˜๋ฏธ

๋ฐ”๋ฒจ์€ ์—„๋ฐ€ํžˆ ๋งํ•ด "์ปดํŒŒ์ผ๋Ÿฌ"๋ผ๊ธฐ๋ณด๋‹ค๋Š” "ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ"๋กœ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. ์ด๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ฐ”๊พธ๋Š” ๋Œ€์‹ , ๊ฐ™์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด ๋‚ด์—์„œ ์ตœ์‹  ๋ฌธ๋ฒ•์„ ๊ตฌํ˜• ๋ฌธ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋œปํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, const๋‚˜ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(=>) ๊ฐ™์€ ES6 ๋ฌธ๋ฒ•์„ ES5์˜ var์™€ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.
  • ES6+ ๋ณ€ํ™˜: let, const, async/await, ๋ชจ๋“ˆ(import/export) ๋“ฑ ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜• ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ๋ณ€ํ™˜.
  • JSX ์ง€์›: ๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” JSX ๋ฌธ๋ฒ•(์˜ˆ:
    Hello
    )์„ React.createElement() ๊ฐ™์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜.
  • TypeScript ์ง€์›: .ts๋‚˜ .tsx ํŒŒ์ผ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ, ํƒ€์ž… ์ฒดํฌ๋Š” ๋ณ„๋„๋กœ TypeScript ์ปดํŒŒ์ผ๋Ÿฌ(tsc)์— ๋งก๊น€.
  • ํด๋ฆฌํ•„(Polyfill): ๋ฐ”๋ฒจ ์ž์ฒด๋Š” ๋ฌธ๋ฒ•๋งŒ ๋ณ€ํ™˜ํ•˜์ง€๋งŒ, @babel/polyfill์ด๋‚˜ core-js์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด Promise, Array.includes ๊ฐ™์€ ์ตœ์‹  API๋„ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๊ฒŒ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ.

์ž‘๋™ ๋ฐฉ์‹

  • ํŒŒ์‹ฑ(Parsing): ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฝ์–ด ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST)๋กœ ๋ณ€ํ™˜.
  • ๋ณ€ํ™˜(Transforming): ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ”„๋ฆฌ์…‹(Preset)์„ ํ†ตํ•ด AST๋ฅผ ์ˆ˜์ •(์˜ˆ: ES6 โ†’ ES5).
  • ์ƒ์„ฑ(Generating): ์ˆ˜์ •๋œ AST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ตœ์ข… ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ถœ๋ ฅ.

ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ”„๋ฆฌ์…‹

  • ๋ฐ”๋ฒจ์€ ๋ชจ๋“ˆํ™”๋œ ๊ตฌ์กฐ๋กœ, ํŠน์ • ๋ณ€ํ™˜ ์ž‘์—…์„ ํ”Œ๋Ÿฌ๊ทธ์ธ(์˜ˆ: @babel/plugin-transform-arrow-functions)์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋ฆฌ์…‹์€ ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฌถ์€ ์„ธํŠธ๋กœ, @babel/preset-env๋Š” ํƒ€๊ฒŸ ๋ธŒ๋ผ์šฐ์ €์— ๋งž์ถฐ ํ•„์š”ํ•œ ๋ณ€ํ™˜๋งŒ ์ ์šฉํ•ด ํšจ์œจ์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ์šฉ์œผ๋กœ๋Š” @babel/preset-react๊ฐ€ JSX ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์—์„œ ๋ฐ”๋ฒจ์€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. JSX๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ , ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋„ ๋‹ค์–‘ํ•œ ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•ด ์ค๋‹ˆ๋‹ค. Create React App์ด๋‚˜ Vite ๊ฐ™์€ ๋„๊ตฌ๋Š” ๋ฐ”๋ฒจ์„ ๊ธฐ๋ณธ์œผ๋กœ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด ์„ค์ • ์—†์ด๋„ ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๊ฒฐ๋ก ์ ์œผ๋กœ, ๋ฐ”๋ฒจ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์—์„œ "ํ˜ธํ™˜์„ฑ์˜ ๋‹ค๋ฆฌ" ์—ญํ• ์„ ํ•˜๋ฉฐ, ํŠนํžˆ ๋ฆฌ์•กํŠธ์ฒ˜๋Ÿผ ์ตœ์‹  ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์—†์–ด์„œ๋Š” ์•ˆ ๋  ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์›นํŒฉ์ด๋‚˜ Vite ๊ฐ™์€ ๋นŒ๋“œ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์ž์œ ๋กญ๊ฒŒ ์“ฐ๋ฉด์„œ๋„ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.