๐Ÿฅ

Loaders

  • ์›นํŒฉ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋งŒ๋“  ๋ชจ๋“ˆ ๋ฟ ์•„๋‹ˆ๋ผ css, html, ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค ๋“ฑ๋“ฑ ๋ชจ๋“ ๊ฒƒ์„ ๋ชจ๋“ˆ์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋Š”๊ฒƒ์ด ๋ฐ”๋กœ ๋กœ๋”์ž…๋‹ˆ๋‹ค.
ย 
๋กœ๋”๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋Š” ์ผ์€ ํŒŒ์ผ์„ ์ง€์ •ํ•ด์„œ ๋กœ๋” ํ•จ์ˆ˜์—์„œ ์ •ํ•œ ์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ปค์Šคํ…€ ๋กœ๋” ๋งŒ๋“ค๊ธฐ

  1. Loader ๋กœ ์‚ฌ์šฉํ•  ํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  1. webpack.config.js ํŒŒ์ผ์—์„œ ๋กœ๋”๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
ย 

css-loader & style-loader

css-loader๊ฐ€ ํ•˜๋Š” ์ผ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์— css ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ƒŒ๋“œ๋ฐ•์Šค๋ผ๋Š” ์„œ๋น„์Šค๋ฅผ ์•„์‹œ๋‚˜์š”? ์—ฌ๊ธฐ์„œ๋„ css๋ฅผ ๋ชจ๋“ˆ์ฒ˜๋Ÿผ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ ๋กœ์ปฌ์—์„œ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
ย 
์šฐ๋ฆฌ๋Š” ์›นํŒฉ์œผ๋กœ css ๋ฅผ ๋ชจ๋“ˆ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ด๋ด…์‹œ๋‹ค.
  1. ๋ชจ๋“ˆ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ css ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  1. App.js ํŒŒ์ผ์— import ๋ฌธ์œผ๋กœ css ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
  1. css-loader๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
npm install css-loader
ย 
  1. webpack.config.js ํŒŒ์ผ๋กœ ์ด๋™ํ•ด์„œ css-loader ๋ชจ๋“ˆ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ผ๋‹จ main.js ์—๋Š” css ํŒŒ์ผ์ด ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์•„์ง html ํŒŒ์ผ์— ๋‚˜์˜ค์ง€๋Š” ์•Š๋Š”๋ฐ์š”, ์•„์ง ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๋“ค์–ด์žˆ๋Š” css ์ฝ”๋“œ๋ฅผ html์— ๋„ฃ์–ด์ฃผ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ๋ฐ”๋กœ style-loader์ž…๋‹ˆ๋‹ค.
ย 
  1. Style-loader๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
npm install style-loader
  1. webpack.config.js ํŒŒ์ผ๋กœ ์ด๋™ํ•ด์„œ style-loader ๋ชจ๋“ˆ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
ย 
ย 

File-loader

์•ž์„œ ๋กœ๋”๋Š” js ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํŒŒ์ผ์„ ๋ชจ๋“ˆ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์”€์„ ๋“œ๋ ธ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ชจ๋“ˆ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
ย 
์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ชจ๋“ˆ์—์„œ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋˜๋ฉด ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์ด ํ•ด์‹œ ๊ฐ’์œผ๋กœ ๋ฐ”๋€Œ์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๊ฐฑ์‹ ๋˜์—ˆ์„ ๋•Œ ํŒŒ์ผ๋ช…์ด ๊ธฐ์กด๊ณผ ๋™์ผํ•  ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—ฌ์ „ํžˆ ์ด์ „ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ์ž…๋‹ˆ๋‹ค. ์บ์‰ฌ๊ฐ’์ดย ๊ธฐ์กด์˜ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค์‹œ ๋ถ€๋ฅด๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ์— ์ด๋ฏธ์ง€๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์ง€ ์•Š๋„๋ก ํ•จ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
ย 
์›๋ž˜ ์›นํŒฉ5 ์ด์ „๊นŒ์ง€๋Š” ํŒŒ์ผ์„ ๋ชจ๋“ˆ๋ง ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” file-loader ๋ผ๋Š” ๋กœ๋”๋ฅผ ๋”ฐ๋กœ ์„ค์น˜ํ•ด์•ผ ํ–ˆ์ง€๋งŒ ์›นํŒฉ5๋กœ ์˜ค๋ฉด์„œ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ย 
ย 
ย 

Base64 ํฌ๋ฉง์œผ๋กœ ์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

๊ฐ„๋‹จํ•œ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฌธ์ž์—ด๋กœ ๊ทธ๋ ค๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋งˆ์น˜ svg ์ด๋ฏธ์ง€๋ฅผ xml์ฝ”๋“œ๋กœ ๊ทธ๋ ค๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ, ์ผ๋ฐ˜์ ์ธ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋„ base64๋ฌธ์ž์—ด ํฌ๋ฉง์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. webpack.config.js ์— asset/inline ๋กœ๋”(https://webpack.kr/guides/asset-modules/)๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋กœ ์„ค์น˜ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์›นํŒฉ5 ์ด์ „์—๋Š” url-loader ๋ฅผ ๋”ฐ๋กœ ์„ค์น˜ํ–ˆ์–ด์•ผ ํ•˜์ง€๋งŒ ์ด์ œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (https://v4.webpack.js.org/loaders/url-loader/)
  1. ์ด๋ ‡๊ฒŒ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„๋œ ์ด๋ฏธ์ง€๋Š” ๋‹ค์šด๋กœ๋“œ๋ฅผ ํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋น ๋ฆ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ๋ณต์žกํ•œ ์ด๋ฏธ์ง€๋ฅผ base64๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ์˜คํžˆ๋ ค ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ € ๋กœ๋”ฉ์ด ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ๋งŒ์•ฝ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ์— ์ œํ•œ์„ ๋‘๊ณ  ์‹ถ๋‹ค๋ฉด type์„ โ€˜assetโ€™ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
type: 'asset', parser: { dataUrlCondition: { maxSize: 20 * 1024 // 20kb } },