WebPack์ด ๋ญ์•ผ??๐Ÿ™€

์†ก์ธ์žฌยท2023๋…„ 7์›” 28์ผ
33
post-thumbnail

์•„๋‹ˆ ์›นํŒฉ(WebPack)์ด ๋ญ์•ผ?

๊ณผ์ œ์—์„œ Webpack์ด๋‚˜ Parcel๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ํ™œ์šฉํ•˜๋ผ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด ์ฃผ์–ด์กŒ๋‹ค.

Webpack??? Parcel??? ๋ฒˆ๋“ค๋Ÿฌ??? ๊ทธ๊ฒŒ ๋ญ”๋ฐ!!!

๐Ÿšง DFS์‹ ๊ณต๋ถ€๋ฒ• ์‹œ์ž‘ ๐Ÿšง


โš€ ์›นํŒฉ์˜ ์กด์žฌ ์ด์œ 

WebPack์„ ์•Œ์•„๋ณด๊ธฐ ์ „์—, ๋ฒˆ๋“ค๋Ÿฌ(Bundler)๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค.
๋ฒˆ๋“ค๋Ÿฌ๋ž€ ๋ฌด์—‡์ผ๊นŒ?

์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•˜๋˜ ๋‚ด๊ฐ€ ๋ชฐ๋ž๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ๋‹ค

๋ฉฐ์น  ์ „, ๋…ธ์…˜์„ ํด๋ก  ์ฝ”๋”ฉ์„ ํ–ˆ๋˜ ๋‚ด ํ”„๋กœ์ ํŠธ์˜ ๋„คํŠธ์›Œํฌ ์ƒํƒœ์ด๋‹ค.
์›นํŒฉ์„ ๊ณต๋ถ€ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ด๊ฒƒ์ด ์™œ ๋ฌธ์ œ์ธ์ง€ ์ธ์ง€๋ฅผ ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

ํ˜„์žฌ ์ด๊ฒƒ์˜ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ผ๊นŒ?

ํด๋ก ์ฝ”๋”ฉ์„ ์œ„ํ•ด ๋‚˜๋Š” 7๊ฐœ์˜ jsํŒŒ์ผ์„ ์ž‘์„ฑํ–ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ด 7๊ฐœ์˜ jsํŒŒ์ผ์ด ๋ถˆ๋Ÿฌ์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ˆœํ•œ ํด๋ก ์ฝ”๋”ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— 7๊ฐœ๋งŒ์œผ๋กœ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ,
ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง„๋‹ค๋ฉด jsํŒŒ์ผ์€ ์ˆ˜์‹ญ ์ˆ˜๋ฐฑ๊ฐœ๋ฅผ ๋„˜์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋„คํŠธ์›Œํฌ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

๋‹น์—ฐํžˆ ์†๋„๋Š” ๋Š๋ ค์ง€๊ณ ,
์ด ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ์œ ์ €๋Š” ๋ถˆํŽธํ•จ์„ ๊ฒช์„ ๊ฒƒ์ด๋‹ค.


โš ๋ฒˆ๋“ค๋Ÿฌ(Bundler)

์ด๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฒˆ๋“ค๋Ÿฌ(Bundler)์ด๋‹ค.

๋ฒˆ๋“ค๋Ÿฌ๋Š” ์ด ๋งŽ์€ jsํŒŒ์ผ๊ณผ cssํŒŒ์ผ ๋“ฑ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.

์ด๋กœ์จ, ์ˆ˜ ๋งŽ์€ HTTP ์š”์ฒญ ์ˆ˜๋ฅผ ์ค„์ด๊ณ ,
ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ์›น ํŽ˜์ด์ง€์˜ ๋กœ๋”ฉ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

์ด ์™ธ์—๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์žฅ์ ์ด ์žˆ๋‹ค.

1. ํŒŒ์ผ ํฌ๊ธฐ ์ตœ์†Œํ™” : js, css ๋“ฑ์˜ ๋งŽ์€ ํŒŒ์ผ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ ํ•ฉ์นœ๋‹ค
2. ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ์ง€์› : ๋ชจ๋“ˆ๊ฐ„์˜ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
3. ์ฝ”๋“œ ์••์ถ• : ๋ถˆํ•„์š”ํ•œ ๊ณต๋ฐฑ๊ณผ ์ฃผ์„์„ ์ œ๊ฑฐํ•˜์—ฌ ํŒŒ์ผ์„ ํ•ฉ์นœ๋‹ค.
4. ํ™•์žฅ์ž ๋ณ€ํ™˜ : ๋‹ค์–‘ํ•œ ํ˜•์‹์˜ ํŒŒ์ผ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

OK ๋ฒˆ๋“ค๋Ÿฌ๋„ ์•Œ์•˜๊ฒ ๋‹ค.
๊ทธ๋Ÿผ ์›นํŒฉ(WebPack)์€ ๋ญ์•ผ?

์›นํŒฉ์€ ๋ฐ”๋กœ ์ด ๋ฒˆ๋“ค๋Ÿฌ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
๋ฒˆ๋“ค๋Ÿฌ์—๋Š” ์›นํŒฉ ๋ง๊ณ ๋„ ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋“ค์ด ์žˆ๋‹ค.

์ด ์ˆ˜๋งŽ์€ ๋„๊ตฌ๋“ค ์ค‘ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์ด ์“ฐ๋Š” ์›นํŒฉ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์žโ—๏ธโ—๏ธโ—๏ธ


โš‚ ์›นํŒฉ(WebPack)

์›นํŒฉ ๊ณต์‹ํ™ˆํŽ˜์ด์ง€์—์„œ ์Šค์Šค๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์‚ฌ์ง„์ด๋‹ค.
๋ณด๋Š”๋ฐ”์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ํŒŒ์ผ๋“ค์„ ๋‹จ์ผ ํŒŒ์ผ๋กœ ๋ฌถ์–ด์ฃผ๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด ์ด ์›นํŒฉ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?


๐Ÿƒ‘ WebPack ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑํ™˜๊ฒฝ ์„ค์ •

๋จผ์ € npm init -y๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๊ณ ,
npm i -D webpack webpack-cli ์œผ๋กœ ์›นํŒฉ์„ ์„ค์น˜ํ•˜์ž
(npm์ด ๋ญ”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์—์„œ ํ™•์ธํ•˜์ž!)

์„ค์น˜ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋šœ๋‘”!!!๐Ÿฅ๐Ÿฅ๐Ÿฅ
๋”ฑํžˆ ๋ฐ”๋€ ๊ฒƒ์ด ์—†๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!
์›นํŒฉ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‚ด๊ฐ€ ์ง์ ‘ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

๋ฃจํŠธ ํด๋”์— webpack.config.js์ด๋ผ๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

const path = require('path'); // ํŒŒ์ผ ์„ค์ •์„ ์›ํ™œํ•˜๊ฒŒ ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

module.exports = {
  	mode: 'development', // ์›นํŒฉ ๋ชจ๋“œ(development-๊ฐœ๋ฐœ์šฉ, production-์„œ๋น„์Šค์šฉ, none)
    entry: './src/main.js', // jsํŒŒ์ผ๋“ค์„ ๋ถ€๋ฅด๋Š” ๋ฉ”์ธ jsํŒŒ์ผ ๊ฒฝ๋กœ
    output: {
        path: path.resolve(__dirname, 'public'), // ํ•ฉ์ณ์ง„ jsํŒŒ์ผ์ด ์œ„์น˜ํ•  ํด๋”
        filename: 'index_bundle.js' // ํ•ฉ์ณ์ง„ jsํŒŒ์ผ์˜ ์ด๋ฆ„
    }
}

์ƒ์„ฑ ํ›„, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
์ด์ œ๋Š” npx webpack ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์›นํŒฉ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ์ผ ์ด๋ฆ„์„ webpack.config.js๋ผ๊ณ  ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด,
npx webpack --config [ํŒŒ์ผ ์ด๋ฆ„] ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•ด์•ผํ•œ๋‹ค.
๊ท€์ฐฎ์œผ๋‹ˆ, ํŒŒ์ผ ์ด๋ฆ„์„ webpack.config.js ๋กœ ์ž‘์„ฑํ•˜์ž.
(๋ชจ๋“œ๋ณ„๋กœ ์›นํŒฉ์„ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์œ„์˜ ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋ฉด ์ข‹๋‹ค)

๊ทธ๋ ‡๋‹ค๋ฉด ์จ”์ŸŒ~!!

๋งŽ๋˜ 7๊ฐœ์˜ jsํŒŒ์ผ๋“ค์ด ํ•˜๋‚˜๋กœ ๋ฌถ์—ฌ์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๐Ÿ™‰

๊ทผ๋ฐ ์ž .๊น.๋งŒ

์•„๊นŒ๋Š” jsํŒŒ์ผ ๋ง๊ณ ๋„ cssํŒŒ์ผ์„ ํฌํ•จํ•ด ๋‹ค๋ฅธ ํŒŒ์ผ๋“ค๊นŒ์ง€ ๋ฌถ์–ด์„œ ํ•˜๋‚˜๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค๋ฉฐ?

์ง€๊ธˆ์€ js๋“ค๋งŒ ๋ฌถ์—ฌ์žˆ์ž–์•„?!?!
์ด ๋ฌธ์ œ๋Š” ๋ฐ”๋กœ Loader๋ผ๋Š” ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ฌถ์–ด์ค„ ์ˆ˜ ์žˆ๋‹คโ—๏ธ


๐Ÿƒ’ Loader ์„ค์ •

loader์—๋Š” ๋‹ค์–‘ํ•œ ํŒŒ์ผ๋“ค์„ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ,
์ง€๊ธˆ ์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” css๋งŒ ๋‹ค๋ฃจ๊ฒ ๋‹ค.
(์ถ”๊ฐ€์ ์ธ loader ๊ธฐ๋Šฅ์€ ์š”๊ธฐ์„œ ํ™•์ธํ•ด๋ณด๋ฉด ๋ผ์šฉ๐Ÿ˜Š)

css๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค.
npm i -D css-loader style-loader ๋ช…๋ น์–ด๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜์žโ—๏ธ

์„ค์น˜ ํ›„์—๋Š”, ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ–ˆ๋˜ webpack.config.js ๋กœ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž.

const path = require("path"); // ํŒŒ์ผ ์„ค์ •์„ ์›ํ™œํ•˜๊ฒŒ ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

module.exports = {
  entry: "./src/main.js", // jsํŒŒ์ผ๋“ค์„ ๋ถ€๋ฅด๋Š” ๋ฉ”์ธ jsํŒŒ์ผ ๊ฒฝ๋กœ
  output: {
    path: path.resolve(__dirname, "public"), // ํ•ฉ์ณ์ง„ jsํŒŒ์ผ์ด ์œ„์น˜ํ•  ํด๋”
    filename: "index_bundle.js", // ํ•ฉ์ณ์ง„ jsํŒŒ์ผ์˜ ์ด๋ฆ„
  },
  module: {
    rules: [
      {
        test: /\.css$/, // ์ •๊ทœํ‘œํ˜„์‹์„ ์ด์šฉํ•˜์—ฌ cssํŒŒ์ผ ์ฐพ๊ธฐ
        use: ["style-loader", "css-loader"], // ์•„๋ž˜ ์ถ”๊ฐ€ ์„ค๋ช…
      },
    ],
  },
};

module ์ด๋ผ๋Š” ์„ค์ •์ด ์ถ”๊ฐ€ ๋˜์—ˆ๋‹ค.
module์•ˆ์— test ๋ผ๋Š” ๊ณณ์—์„œ cssํŒŒ์ผ๋“ค์„ ์ฐพ๊ณ ,
๊ทธ๊ฒƒ๋“ค์„ use๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ ๋Š”๋‹ค.

๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์—ญํ• ์€

  • css-loader: cssํŒŒ์ผ๋“ค์„ js์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก jsํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • style-loader: ๋ณ€ํ™˜ํ•œ jsํŒŒ์ผ๋“ค์„ style ํƒœ๊ทธ ์•ˆ์— ๋„ฃ์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

์ด๊ฒƒ์ด ๊ตฌ๋™ํ•˜๊ฒŒ ๋˜๋Š” ์›๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. webpack.config.js ํŒŒ์ผ์„ ์ฝ๋Š”๋‹ค.
  2. module์˜ rules๋ฅผ ์ฝ๋Š”๋‹ค.
  3. test ๋ฅผ ์ฝ์–ด ์•ˆ์˜ ๋‚ด์šฉ๋“ค์„ ์‹คํ–‰ํ•œ๋‹ค.
  4. use ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์‹คํ–‰์‹œํ‚จ๋‹ค.
  5. css-loader๋ฅผ ํ†ตํ•ด cssํŒŒ์ผ๋“ค์„ jsํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  6. style-loader๋ฅผ ํ†ตํ•ด js๋กœ ๋ณ€ํ™˜๋œ ํŒŒ์ผ์„ styleํƒœ๊ทธ์— ๋„ฃ๋Š”๋‹ค.

โ€ป ์ฃผ์˜ ์‚ฌํ•ญ : use๋ถ€๋ถ„์— style-loader๋ฅผ ์ ๊ณ , ๋‹ค์Œ์— css-loader๋ฅผ ์ ์„ ๊ฒƒ.

( ๊ฑฐ๊พธ๋กœ ์ ์œผ๋ฉด ์ธ์‹์„ ๋ชปํ•˜๋Š”๋ฐ ๊ทธ ์ด์œ ๊ฐ€ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์˜ ์ˆœ์„œ๋กœ loader๊ฐ€ ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ทธ ๋ฐ˜๋Œ€๋กœ ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•˜๋„ค์š”...!! ์ด ์ด์œ ๋ฅผ ๋ชฐ๋ผ์„œ ์ฐพ์•„๋ณด๋Š๋ผ ์• ๋ฅผ ์กฐ๊ธˆ ๋งŽ์ด ๋จน์—ˆ์Šต๋‹ˆ๋‹ค๐Ÿฅน)

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด ์จ”์ŸŒ!!!

cssํŒŒ์ผ๋„ index_bundels.jsํŒŒ์ผ์— ๋“ค์–ด๊ฐ€ HTTP์š”์ฒญ์ด ํ•˜๋‚˜ ๋” ์ค„์–ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค!!
ํ•˜๋‚˜ํ•˜๋‚˜ ์ค„์—ฌ๊ฐ€๋Š” ๊ฒƒ์ด ์•„์ฃผ ์žฌ๋ฐŒ๊ณ ๋งŒ๐Ÿ˜Ž


๐Ÿƒ“ Output

์ด์ œ ์•„์ฃผ ์•ฝ๊ฐ„์˜ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ ์„ ์‚ดํŽด๋ณด์ž.
jsํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์•ผํ•˜๋Š” ์ƒํ™ฉ์˜ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ,
๊ฐ„ํ˜น ๋ช‡ ๊ฐœ์˜ ํŒŒ์ผ๋กœ ์ชผ๊ฐœ์•ผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

const path = require('path'); 

module.exports = {
    entry: { // ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ ํ›„, filename์˜ ์ด๋ฆ„์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๊ณ  ๊ฒฝ๋กœ ์ง€์ •
      index: './src/main.js', 
      addIndex: './scr/subMenu.js',
    }
    output: {
        path: path.resolve(__dirname, 'public'),
        filename: '[name]_index_bundle.js', // [name]์œผ๋กœ ํ†ต์ผํ•˜์—ฌ ๋“ค์–ด๊ฐ
    }
}

๐Ÿƒ” etc...

์ด ์™ธ์—๋„ Plugin์ด๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋‹ˆ,
๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ๊ณต์‹๋ฌธ์„œ์—์„œ ํ™•์ธํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๐Ÿ˜Š
(์ถ”๊ฐ€๋กœ ์•Œ๋ฉด ์ข‹์„ ๋‚ด์šฉ : Code Splitting lazy loading)


์ฒ˜์Œ์—๋Š” ์›นํŒฉ์ด๋ผ๋Š” ์ด๋ฆ„๋งŒ ๋“ค์–ด๋„ ๋ฒฝ์ด ๋Š๊ปด์ง€๊ณ ,
๋ฌธํ„ฑ์ด ๋†’์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ
์—ญ์‹œ ํ•ด๋ณด๋‹ˆ๊นŒ ํ•ด๋ณผ๋งŒ ํ•œ ๊ฒƒ ๊ฐ™๋‹ค๐Ÿคซ
์‹œ๋„๋„ ์•ˆํ•ด๋ณด๊ณ  ๋ฌด์„œ์›Œํ•˜์ง€ ๋ง๊ณ  ์ผ๋‹จ ํ•œ ๋ฒˆ ํ•ด๋ณด์ž!

์ด ์™ธ์—๋„ ์•Œ๊ณ  ์‹ถ์€ ์ฃผ์ œ๋‚˜ ๊ถ๊ธˆํ•˜์‹  ์  ์žˆ์œผ์‹œ๋‹ค๋ฉด ๋‹ต๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค:)

์˜ค๋Š˜๋„ ์ด ๊ธ€๋กœ ์ธํ•ด ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•œ๋‹ค ๐ŸŒˆ๐Ÿ™

์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋‹ต๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค:)

์ถœ์ฒ˜
Youtube ์ƒํ™œ์ฝ”๋”ฉ

์ฝ์–ด๋ณด๊ธฐ ์ข‹์€ ๋ธ”๋กœ๊ทธ
๋ธ”๋กœ๊ทธ 1

profile
๊ฟˆ์„ ๊พธ๊ณ  ๋„์ „ํ•˜๊ธฐ๐ŸŒŸ

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

comment-user-thumbnail
2023๋…„ 7์›” 28์ผ

์šฐ์™€! ๋งˆ์นจ ๊ถ๊ธˆํ•˜๋˜ ๋‚ด์šฉ์ด๋ผ ์ฐพ์•„๋ณผ๊นŒ~ ํ•˜๊ณ  ์ƒ๊ฐ๋งŒ ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์ด๋Ÿฐ ๊ธ€์ด.... ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2023๋…„ 7์›” 28์ผ

์ธ์žฌ๋‹˜ ๊ธ€์€ ์ •๋ง์ •๋ง ์ฝ๊ธฐ ์‰ฝ๊ณ  ์œ ์šฉํ•˜๋‹ค๊ณ  ๋Š๊ปด์ ธ์š”... ์ž˜ ์ฝ๊ณ  ์ €๋„ ์ธ์žฌ๋‹˜ ๊ธ€ ์ฝ์€ ๊ฒƒ ํ† ๋Œ€๋กœ webpack ๋…ธ์…˜์— ์ •๋ฆฌํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค! ์ข‹์€ ๊ธ€ ๊ฐ์‚ฌ๋“œ๋ ค์š”~!!

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2023๋…„ 7์›” 28์ผ

๋„ˆ๋ฌด ์ดํ•ด๊ฐ€ ์ž˜ ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค......๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค..์ œ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์›นํŒฉ์„ ์ž˜๋ชป ์“ฐ๊ณ  ์žˆ์—ˆ๊ตฐ์š” ํ‘ํ‘

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ