๐Ÿ”ต ๋ ˆ๋ฒจ๋กœ๊ทธ์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ -1-

thumb_hyeokยท2022๋…„ 10์›” 16์ผ
1

๐Ÿ”ฅ WoowaCourse

๋ชฉ๋ก ๋ณด๊ธฐ
6/10

์ €๋ฒˆ์— ๋งํ–ˆ๋˜ โ€œ๋ ˆ๋ฒจ๋กœ๊ทธ์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธโ€์˜ ๋ณ€์ฒœ์‚ฌ๋ฅผ ๋‹ค๋ฃจ์–ด ๋ณผํ…๋ฐ ์˜ค๋Š˜์€ 1ํŽธ์ด๋‹ค.

์ฃผ์ œ๋Š” โ€œํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ ์ „๋žตโ€ ์ด๊ณ , webpack๊ณผ ํ•จ๊ป˜ ๋นŒ๋“œ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผ ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.

ํ˜น์‹œ ๊ธฐ์กด์˜ ๋ ˆ๋ฒจ๋กœ๊ทธ์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ ์ „๋žต์„ ๋ชจ๋ฅธ๋‹ค๋ฉด ๋ณด๊ณ ์˜ค๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

โžก๏ธ ๋ ˆ๋ฒจ๋กœ๊ทธ์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ


๐Ÿš€ ๊ฐœ๋ฐœ๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€์˜ ๋นŒ๋“œ ์ƒํ™ฉ

๋จผ์ € ๋ ˆ๋ฒจ๋กœ๊ทธ์—์„œ ๊ฐœ๋ฐœ๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ์ฃผ๋กœ ๋งˆ์ฃผ์น˜๊ฒŒ ๋˜๋Š” ๋นŒ๋“œ ์ƒํ™ฉ์„ ๋‚˜์—ดํ•ด๋ณด์•˜๋‹ค.
local, dev, prod ํ™˜๊ฒฝ์—์„œ ๊ฐ๊ฐ ์ž์ฃผ ๋งˆ์ฃผ์น˜๋Š” ๋นŒ๋“œ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ปดํŒŒ์ผ ์ „๋žต์„ ๊ตฌ์„ฑํ•ด๋ณผ ์˜ˆ์ •์ด๋‹ค.

  • Dev Server Hot Module Replacement Time
    ์›นํŒฉ ๊ฐœ๋ฐœ ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ๋‚œ ํ›„ย HMR ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ๋นŒ๋“œ๋˜๋Š” ์‹œ๊ฐ„
  • Build Time On Local Machine
    ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ ๋จธ์‹ ์—์„œ ์›นํŒฉ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๋Š” ์‹œ๊ฐ„
  • Build Time On Github Actions CI
    ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Github Actions CI ํ™˜๊ฒฝ์ƒ์—์„œ ์›นํŒฉ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๋Š” ์‹œ๊ฐ„

๐Ÿ’ป local

๋กœ์ปฌ ๋นŒ๋“œ๋Š” ์•„๋ฌด๋ž˜๋„ ์•„๋ž˜์˜ ๋‘ ๊ฐœ์˜ ์ƒํ™ฉ์—์„œ ์ž์ฃผ ์ด๋ฃจ์–ด์ง„๋‹ค.

  • Dev Server Hot Module Replacement Time
  • Build Time On Local Machine

๊ธฐ์กด ์ „๋žต์˜ ์˜๋„์— ๋”ฐ๋ฅด๋ฉด local์—์„œ๋Š” ํƒ€์ž…์ฒดํฌ๋ฅผ ํฌ๊ธฐํ•˜๋”๋ผ๋„ (VSCode์˜ ts-server์—๊ฒŒ ๋งก๊ธฐ๊ธดํ•œ๋‹ค.) ๊ฐœ๋ฐœํ•˜๋Š” ๋™์•ˆ ๋ถˆํŽธํ•˜์ง€ ์•Š๋„๋ก ๋น ๋ฅธ ๋นŒ๋“œ + ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚˜์ง€ ์•Š์Œ์ด ์šฐ์„ ์‹œ ๋˜์—ˆ๋‹ค.

์œ„ ๊ทธ๋ž˜ํ”„๋Š” โ€œBuild Time On Local Machineโ€ ์—์„œ์˜ ๋น„๊ต์ธ๋ฐ, ๋Œ€๋žต esbuild-loader ๊ฐ€ 3๋ฐฐ ์ •๋„ ๋น ๋ฆ„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์กฐ๊ฑด์ด ๋งž์ง€ ์•Š์•„ (ํƒ€์ž…์ฒดํฌ๋ฅผ ํฌํ•จํ•จ) ๋น„๊ต์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ts-loader + fork-ts-checker-webpack-plugin ๋ณด๋‹ค babal-loader ๋Š” ์กฐ๊ธˆ ๋น ๋ฅธ ์ˆ˜์ค€์ด์—ˆ๋‹ค.

์ถ”๊ฐ€๋กœ โ€œDev Server Hot Module Replacement Timeโ€ ์—์„œ์˜ ๋น„๊ต์—์„œ๋„ react-refresh-webpack-plugin ๋ฅผ ์‚ฌ์šฉํ•œ babel-loader ๊ฐ€ esbuild-loader ๋ณด๋‹ค ๋Š๋ ธ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ณดํ†ต 100ms๋„ ์•ˆ ๋˜๋Š” ๋ฏธ๋น„ํ•œ ์ฐจ์ด๋ผ ๋”ฐ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ์ œ์ž‘ํ•˜์ง€๋Š” ์•Š์•˜๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ์ดˆ๊ธฐ ๋นŒ๋“œ๋ฅผ ์ž์ฃผ ํ•˜์ง€๋Š” ์•Š๊ณ , HMR ์ƒํ™ฉ์—์„œ๋Š” ํฌ๊ฒŒ ์†๋„ ์ฐจ์ด๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค.
๊ฒŒ๋‹ค๊ฐ€ babel-loader ๋Š” react-refresh-webpack-plugin ์„ ํ†ตํ•ด ์ฝ”๋“œ ์ˆ˜์ •์ด ๋ฐœ์ƒํ•  ๋•Œ ํ™”๋ฉด ๊นœ๋นก์ž„์ด ์ผ์–ด๋‚˜๋Š” ์—†์ด ํŽธ์•ˆํ•˜๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์–ด babel-loader ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.


๐Ÿ“ก dev, prod

์•„๋ฌด๋ž˜๋„ dev, prod๋Š” ๊ฐœ๋ฐœ ๋„์ค‘์— local Machine์—์„œ ๋นŒ๋“œ๋ฅผ ํ•  ์ƒํ™ฉ์ด ๊ฑฐ์˜ ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

  • Build Time On Github Actions CI

๊ทธ๋ž˜์„œ ์ฃผ๋กœ Github Actions CI ์—์„œ์˜ ์ƒํ™ฉ์„ ์‚ดํŽด๋ณด๋Š”๊ฒŒ ๋งž์„ ๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿฌ๋‚˜โ€ฆ ๋‹น์žฅ ์—ฌ๋Ÿฌ๋ฒˆ PR์„ ๋ณด๋‚ด๋Š” ๊ฒƒ๋ง๊ณ ๋Š” Github Actions CI ์—์„œ์˜ ์†๋„ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๊ธฐ๋Š” ํž˜๋“ค ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ž˜์„œ ์–ด์ฉ”์ˆ˜ ์—†์ด local Machine์—์„œ์˜ ๋นŒ๋“œ๋กœ ๋Œ€์ฒดํ–ˆ๋‹ค.

dev, prod์—์„œ๋Š” ts-loader ๋ฅผ ์œ ์ง€ํ•œ ๋’ค, ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋กœ ์˜ฎ๊ฒจ์„œ ์ง„ํ–‰ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š”ย fork-ts-checker-webpack-plugin ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  esbuild-loader์—๋„ ๊ฐ™์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ ์šฉํ•ด์ค€ ๋’ค ์ถ”๊ฐ€๋กœ ESBuildMinifyPlugin ๊นŒ์ง€ ์ ์šฉํ•ด์ฃผ์—ˆ๋‹ค.

Webpack ๋นŒ๋“œ์‹œ Esbuild์˜ ์†๋„๋ฅผ ํ†ตํ•ด Transpilation๊ณผย Minification
๋‹จ๊ณ„์— ๋Œ€ํ•œ ๋” ๋น ๋ฅธ ๋Œ€์•ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ โ€œBuild Time On Local Machineโ€ ์—์„œ์˜ ๋น„๊ต๋งŒ ๋ด๋„ ๊ธฐ์กด์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋นจ๋ผ์ง„ ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค. dev ๋นŒ๋“œ๋Š” ๋”ฐ๋กœ ๋น„๊ตํ•˜์ง€ ์•Š๊ณ  prod ๋นŒ๋“œ๋งŒ ๋น„๊ตํ–ˆ๋‹ค.

"Github Actions CI" ์—์„œ ๋นŒ๋“œํ–ˆ์„ ๋•Œ, dev๋นŒ๋“œ๋Š” ์†๋„ ์ฐจ์ด๊ฐ€ ๊ฑฐ์˜ ์—†์—ˆ์ง€๋งŒ, prod๋นŒ๋“œ์—์„œ ์†๋„๊ฐ€ ์œ ์˜๋ฏธํ•˜๊ฒŒ ์ค„์–ด๋“  ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿง ์ •๋ฆฌ

์—ฌ๊ธฐ๊นŒ์ง€ ๋ณ€ํ™”๋œ ๋ ˆ๋ฒจ๋กœ๊ทธ์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ ์ „๋žต์„ ์‚ดํŽด๋ดค๋‹ค.

๊ฒฐ๋ก ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค

  • local
    babel-loader (ํƒ€์ž…์ฒดํฌX + HMR ๊ณ ๋ ค)
  • dev, prod
    esbuild-loader + fork-ts-checker-webpack-plugin + ESBuildMinifyPlugin

๋‹ค์Œ์—๋Š” ์ƒํ™ฉ์„ ๋ณด๊ณ  ๋ ˆ๋ฒจ๋กœ๊ทธ์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ โ€œ์ฝ”๋“œ ์Šคํƒ€์ผโ€ ํŽธ์œผ๋กœ ๋Œ์•„์˜ค๊ฒ ๋‹ค.


๐Ÿ“–ย ์ฐธ๊ณ  ์ž๋ฃŒ

profile
์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 4๊ธฐ ์›น ํ”„๋ก ํŠธ์—”๋“œ

0๊ฐœ์˜ ๋Œ“๊ธ€