elice/study

[CS] ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์™€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ

1. ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ(Module bundler)

1-1. ๋ชจ๋“ˆ(Module)

๋ชจ๋“ˆ์€ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์— ๊ด€ํ•œ ์ฝ”๋“œ๋“ค์ด ํ•œ๋ฐ ๋ชจ์—ฌ์žˆ๋Š” ํŒŒ์ผ๋กœ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  • ์œ ์ง€๋ณด์ˆ˜์„ฑ
    • ๊ธฐ๋Šฅ๋“ค์ด ๋ชจ๋“ˆํ™”๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ๋‹ค๋ฉด, ์˜์กด์„ฑ์„ ๊ทธ๋งŒํผ ์ค„์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•œ๋‹ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šคํ™”
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ „์—ญ๋ณ€์ˆ˜๋Š” ์ „์—ญ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๋‹ค ๋ณด๋ฉด ๋„ค์ž„์ด ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด ๋•Œ ๋ชจ๋“ˆํ™”๋ฅผ ํ•˜๋ฉด, ๊ฐ ๋ชจ๋“ˆ๋งŒ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์žฌ์‚ฌ์šฉ์„ฑ
    • ๋˜‘๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌ์‹œ์ผœ์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

1-2. ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ(Module bundler)

ํ˜„๋Œ€์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์€ ๋ชจ๋“ˆ๋‹จ์œ„๋กœ ํŒŒ์ผ์„ ์—ฎ์–ด์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ฆ‰, ๋ชจ๋“ˆ์€ ์„œ๋กœ ์˜์กด์„ฑ์„ ๋„๊ณ  ์žˆ๋Š”๋ฐ ์ด๋Ÿฐ ์ ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์ด ๋ฐœ์ƒํ•œ๋‹ค.

  • ์ˆ˜๋งŽ์€ ๋ชจ๋“ˆ๋“ค์˜ ์ˆœ์„œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€? (์˜์กด์„ฑ ์ฒ˜๋ฆฌ)
  • ๋ชจ๋“ˆ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก HTTP ์š”์ฒญ์ด ๋งŽ์•„์งˆํ…๋ฐ, ์ด๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ๊ฒƒ์ธ๊ฐ€?
  • ES6+ ์ŠคํŽ™์˜ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€?

์œ„ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ฒƒ์ด ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋กœ, ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๋„๊ตฌ์ด๋‹ค.

์ด๋ฏธ์ง€ ์••์ถ•, ์ตœ์†Œํ™”(Minification) ๋“ฑ์˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ๋“ค๋„ ์ œ๊ณตํ•˜๋ฉฐ ์œ ๋ช…ํ•œ ๋ฒˆ๋“ค๋Ÿฌ๋กœ๋Š” Webpack, Parcel, Rollup ๋“ฑ์ด ์žˆ๋‹ค.

 

2. ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ(Transpiler)

ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง(Transpiling)์ด๋ž€ ํŠน์ • ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋น„์Šทํ•œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ํ–‰์œ„๋ฅผ ๋งํ•˜๋ฉฐ, ์ด๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์ด๋‹ค.

ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š”, ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ES6+์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ES5๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•œ๋ฐ, ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์ค€๋‹ค.

ES6+์˜ ๊ธฐ๋Šฅ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฆฌ์•กํŠธ๋ฅผ JSX์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค๊ฑฐ๋‚˜, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ๋“ฑ์˜ ์—ญํ• ๋„ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์˜ ๊ธฐ๋Šฅ ์ค‘์— ํ•˜๋‚˜์ด๋‹ค.

ES6+๋‚˜ JSX๋ฅผ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋กœ๋Š” ๋ฐ”๋ฒจ(Babel)์ด ์žˆ์œผ๋ฉฐ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ๋„๊ตฌ๋กœ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ(tsc ๋ช…๋ น์–ด ์ด์šฉ)๊ฐ€ ์žˆ๋‹ค.

 

๐ŸŒ  ๋ณดํ†ต ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•  ๋•Œ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์— ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

์ฐธ๊ณ 

https://github.com/baeharam/Must-Know-About-Frontend/blob/main/Notes/frontend/bundler-transpiler.md

 

https://doodreamcode.tistory.com/190