๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
BIGMAP DRAFTS๐Ÿคฟ

ํด๋ผ์ด์–ธํŠธ ๋นŒ๋“œ

by _wavy 2024. 4. 3.

1. ํด๋ผ์ด์–ธํŠธ ๋นŒ๋“œ

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํด๋ผ์ด์–ธํŠธ ์ธก ์ฝ”๋“œ(HTML, CSS, JavaScript ๋“ฑ)๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ์†Œ์Šค ์ฝ”๋“œ์˜ ์ปดํŒŒ์ผ, ๋ฒˆ๋“ค๋ง, ๋ณ€ํ™˜, ์ตœ์ ํ™”, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋“ฑ์„ ํฌํ•จํ•œ๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ์›น ์•ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ๊ธฐ์ˆ ์ด ์ ์šฉ๋œ๋‹ค.

2. ๋นŒ๋“œ ๊ณผ์ •(w/Babel&Webpack)

  1. ์ปดํŒŒ์ผ(Compilation): Sass โžœ CSS, TypeScript โžœ  JavaScript, ES6+ โžœ ES5 ์ดํ•˜(transpiling). ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜.
  2. ๋ฒˆ๋“ค๋ง(Bundling): ๋ชจ๋“  ์ฝ”๋“œ, ์ž์› ๋ฐ ์˜์กด์„ฑ์„ ํ•˜๋‚˜์˜ ๋ฒˆ๋“ค๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ์ž‘์—…. ์ž‘๊ฒŒ ๋ถ„ํ• ๋œ ์ฝ”๋“œ ๋ชจ๋“ˆ(code splitting)๊ณผ ์ž์›๋“ค๋กœ ์ง„์ž…์ (entry point)์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ ์˜์กด์„ฑ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•จ. ์ด ๋•Œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋Š” ๋ฒˆ๋“ค์— ํฌํ•จ๋˜์ง€ ์•Š์Œ(tree shaking). ๋˜ํ•œ HTML, ์ด๋ฏธ์ง€, ํฐํŠธ, ํŒŒ์ผ ๋“ฑ์˜ ์ •์  ์ž์‚ฐ๋„ ํฌํ•จํ•จ. node_modules ํด๋”๋„ ๋ฒˆ๋“ค๋ง์—์„œ ์ œ์™ธ๋˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ง์ ‘์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ํŠธ๋ฆฌ์— ํฌํ•จ๋จ. ๊ทธ๋ฆฌ๊ณ  node_modules ๋‚ด์˜ ํŒจํ‚ค์ง€์™€ ์ดˆ๊ธฐ ๋กœ๋”ฉ์— ํ•„์š”์น˜ ์•Š์€ ๋ชจ๋“ˆ์€ ๋Ÿฐํƒ€์ž„์— ํ•„์š”์‹œ ๋™์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋จ(Lazy Loading).
  3. ์ตœ์ ํ™”(Optimization): ๋ฒˆ๋“ค๋ง์—์„œ ์ ์šฉ๋œ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…, ํŠธ๋ฆฌ ์…ฐ์ดํ‚น ๋“ฑ์˜ ๊ธฐ๋ฒ•๊ณผ ๊ฐ์ข… ํŒŒ์ผ ์••์ถ•์œผ๋กœ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ž„. ์—ฌ๊ธฐ์—๋Š” ์›นํŒฉ์˜ UglifyJS ํ”Œ๋Ÿฌ๊ทธ์ธ(JS ์••์ถ•), ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ๋„๊ตฌ, CSS ์••์ถ• ๋„๊ตฌ ๋“ฑ์ด ์‚ฌ์šฉ๋จ.
  4. ์บ์‹ฑ(Caching): ์ด์ „์— ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ์„ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”.์„œ๋ฒ„ ์„ค์ •์ด๋‚˜ ์›น ์„œ๋น„์Šค ์›Œ์ปค๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋จ.
  5. ํด๋ฆฌํ•„ ์ ์šฉ
  6. ์ฝ”๋“œ ์‹คํ–‰

3. ์ค‘์š”์„ฑ

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

4. ๋นŒ๋“œ ๋„๊ตฌ

1) ๋ฐ”๋ฒจ(Babel)

  • ์ปดํŒŒ์ผ๋Ÿฌ(Compiler):
    • ๊ณ ์ˆ˜์ค€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ €์ˆ˜์ค€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ์—ญํ• 
    • ๋ฐ”๋ฒจ์€ ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋„๊ตฌ. ๊ณผ๊ฑฐ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒ„์ „์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ
  • ๊ธฐ๋Šฅ: 
    • ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง(Transpiling): ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์‹  JavaScript ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ํ•˜์œ„ ๋ฒ„์ „์˜ JavaScript๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •
    • ํด๋ฆฌํ•„(Polyfilling): ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ. ์˜ˆ๋ฅผ ๋“ค์–ด, Promise, fetch API ๋“ฑ์˜ ์ตœ์‹  ๋ฉ”์„œ๋“œ๋ฅผ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ € ์ƒํ™ฉ์— ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
  • ์„ค์ • ํŒŒ์ผ (`.babelrc`)

2) ์›นํŒฉ(Webpack)

  • ๋ฒˆ๋“ค๋Ÿฌ(Bundler):
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ชจ๋“ˆ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๋„๊ตฌ. ๊ฐ ํŒŒ์ผ์ด๋‚˜ ๋ชจ๋“ˆ๊ฐ„์˜ ์˜์กด์„ฑ์„ ํŒŒ์•…ํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ฒˆ๋“ค๋กœ ๋งŒ๋“ค์–ด์คŒ์œผ๋กœ์จ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๊ณ , ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ๋‹จ์ˆœํ™”ํ•จ.
    • ์›นํŒฉ์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋กœ, ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์ž์›์„ ๋ชจ๋“ˆ๋กœ ๋ณด๊ณ  ๊ทธ ์˜์กด ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฒˆ๋“ค ํŒŒ์ผ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•จ. ์ด๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ํŒŒ์ผ๋“ค์„ ๊ด€๋ฆฌํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ •์  ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•ด ์คŒ.
  • ๊ธฐ๋Šฅ: ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์ง€์›ํ•จ
    • ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋ง(Module Bundling): ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์ž์›์„ ๋ชจ๋“ˆ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ , ๊ทธ ์˜์กด ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ๋ฒˆ๋“ค ํŒŒ์ผ๋กœ ๋ฌถ์–ด์คŒ
    • ์ฝ”๋“œ ๋ถ„ํ• (Code Splitting): ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ์ฒญํฌ(chunk)๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋กœ๋”ฉ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•จ
    • ํŠธ๋ฆฌ ์…ฐ์ดํ‚น(Tree Shaking): ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ. ์ด๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ตœ์ข… ๋ฒˆ๋“ค์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
    • ๋ ˆ์ด์ง€ ๋กœ๋”ฉ(Lazy Loading): ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ํšจ๊ณผ์ ์ž„. ํ•„์š”ํ•œ ์‹œ์ ์—๋งŒ ๋ชจ๋“ˆ์„ ๋กœ๋”ฉํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ค„์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•จ
    • ๋กœ๋” ํ”Œ๋Ÿฌ๊ทธ์ธ(Loader Plugin): ๋‹ค์–‘ํ•œ ๋กœ๋”์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
  • ์„ค์ • ํŒŒ์ผ (`webpack.config.js`)

3) Parcel

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒˆ๋“ค๋Ÿฌ

5. ๋นŒ๋“œ ๋ฐฉ์‹

  1. ์ •์  ๋นŒ๋“œ(Static Build): ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํ•œ, ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹
  2. ๋™์  ๋นŒ๋“œ(Dynamic Build): ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‹ค์‹œ ์ƒ์„ฑ๋˜๋Š” ๋ฐฉ์‹

6. ๊ฐ™์ด ๋ณด๊ธฐ

  • ํ”„๋ฆฌํ‹ฐ์–ด(Prettier): ์ฝ”๋“œ ํฌ๋งคํ„ฐ
  • ๋ฆฐํŠธ(Lint): ์›น ํ‘œ์ค€ ์ค€์ˆ˜๋ฅผ ์œ„ํ•œ ์ •์  ๋ถ„์„ ๋„๊ตฌ. ESLink๋Š” JS์šฉ ๋ฆฐํŠธ

'BIGMAP DRAFTS๐Ÿคฟ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋กœ๊ทธ์ธ  (0) 2024.04.03
ํด๋ฆฐ์ฝ”๋“œ  (0) 2024.04.03
์• ์ž์ผ  (0) 2024.04.03

๋Œ“๊ธ€