Jieunny์ ๋ธ๋ก๊ทธ
S4) Unit 3. [React] ๋ฒ๋ค๋ง๊ณผ ์นํฉ ๋ณธ๋ฌธ
๐ฃ ๋ฒ๋ค๋ง์ด๋?
๐ญ. ๋ฒ๋ค์ ์ ์
โ๏ธ ์ฌ์ฉ์์๊ฒ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ๊ธฐ ์ํ ํ์ผ ๋ฌถ์
โฐ ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด, ํด๋น ์ฃผ์์์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ๋ฒ๋ค๋งํ ์ฌ๋ฌ ํ์ผ์ ๋ฐ๋๋ค.
โฐ ์ด ํ์ผ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํํ์ฌ ๋ฉ์ง ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๊ฒ ๋๋ค.
๐ฎ. ๋ฒ๋ค๋ง์ ํ์์ฑ
โ๏ธ ์๋์ ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ ํ์๊ฐ ์๋ค.
โฐ ๋ ๊ฐ์ .js ํ์ผ์์ ๊ฐ์ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์์ด ๋ณ์ ๊ฐ ์ถฉ๋์ด ์ผ์ด๋ฌ๋ค.
โฐ ๋ฑ ํ ๋ฒ ๋ถ๋ฌ์ค๋ ํ๋ ์์ํฌ ์ฝ๋๊ฐ 8MB๋ผ์, ์ธํฐ๋ท ์๋๊ฐ ๋๋ฆฐ ๊ตญ๊ฐ์ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ์ฌ์ฉ์๊ฐ ๋ถํธ์ ํธ์ํ๋ค.
โฐ ๋ฒ๋ค ํ์ผ ์ฌ์ด์ฆ๋ฅผ ์ค์ด๊ธฐ ์ํด์ ํ์ผ์ ๊ณต๋ฐฑ์ ๋ชจ๋ ์ง์ ๋๋ฐ, ๊ฐ๋ ์ฑ์ด ๋๋ฌด ๋จ์ด์ ธ์ ์ฝ๋ฉํ๊ธฐ๊ฐ ์ด๋ ต๋ค. ๊ฒฐ๊ตญ ๊ทธ๋๋ก ๊ณต๋ฐฑ์ ๋๋๋ ค์ ์ฝ๋ฉํ๋ค.
โฐ ๋ฐฐํฌ ์ฝ๋๊ฐ ๋๋ฌด ์ฝ๊ธฐ ์ฌ์ ๊ฐ๋ฐ์ ํ ์ค ์๋ ์ฌ์ฉ์๊ฐ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์๋ก ์กฐ์ํ์ฌ ํผํด๊ฐ ๋ฐ์ํ๋ค.
๐ฃ ์นํฉ ์ด๋?
๐ญ. Webpack
โ๏ธ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ๋ฅผ ์ํด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ฒ๋ค๋ฌ
โ๏ธ ์ฌ๋ฌ ๊ฐ์ ํ์ผ์ ํ๋์ ํ์ผ๋ก ํฉ์ณ์ฃผ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ
โฐ ๋ชจ๋ ๋ฒ๋ค๋ฌ : HTML, CSS, JS ๋ฑ์ ์์์ ์ ๋ถ ๊ฐ๊ฐ์ ๋ชจ๋๋ก ๋ณด๊ณ ์ด๋ฅผ ์กฐํฉํด ํ๋์ ๋ฌถ์์ผ๋ก ๋ฒ๋ค๋ง(๋น๋)ํ๋ ๋๊ตฌ
๐ฎ. ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋ฑ์ฅ
โ๏ธ JS ์ฝ๋์ ์์ด ์ฆ๊ฐํ๊ณ , ๋ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฑ์ฅํ๋ฉด์ ์ธ๋ถํ๋ ๋ชจ๋ ํ์ผ์ด ํญ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํ๊ธฐ๋๋ฌธ์ ์ด ๋ชจ๋ ๋จ์์ ํ์ผ๋ค์ ํ๋์ ์์์ ์์ ๋ชจ๋ ์ถ์ ํ์ฌ ํ๋์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค์ด๋ด๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ๊ฐ ๋ฑ์ฅํ๊ฒ ๋์๋ค.
๐ฏ. Webpack์์์ ๋ชจ๋
โ๏ธ JS๋ชจ๋์๋ง ๊ตญํํ์ง ์๊ณ HTML, CSS, ์ด๋ฏธ์ง ํ์ผ๋ค๋ ์ ๋ถ ํฌํจํ ํฌ๊ด์ ์ธ ๊ฐ๋
๐ฐ. ๋น๋์ ๋ฒ๋ค๋ง
โ๏ธ ๋น๋ : ๊ฐ๋ฐ์ด ์๋ฃ๋ ์ฑ์ ๋ฐฐํฌํ๊ธฐ ์ํด ํ๋์ ํด๋๋ก ๊ตฌ์ฑํ์ฌ ์ค๋นํ๋ ์์
โฐ React์์ npm run build๋ฅผ ์คํํ๋ฉด React build ์์ ์ด ์งํ๋๊ณ , index.html ํ์ผ์ ์์ถ๋์ด ๋ฐฐํฌ์ ์ต์ ํ๋ ์ํ๋ฅผ ์ ๊ณตํ๋ค.
โ๏ธ ๋ฒ๋ค๋ง : ํ์ผ์ ๋ฌถ๋ ์์ ๊ทธ ์์ฒด(๋ชจ๋ ๊ฐ์ ์์กด์ฑ ๊ด๊ณ๋ฅผ ์ฐจ์ ํด ๊ทธ๋ฃนํ ํ๋ ์์ )
โฐ ํ์ผ : ์์กด์ ๊ด๊ณ์ ์๋ ํ์ผ๋ค(import, export) ๊ทธ ์์ฒด ํน์ ๋ด๋ถ์ ์ผ๋ก ํฌํจ ๋์ด ์๋ ๋ชจ๋์ ์๋ฏธ
๐ฑ. Webpack์ ํ์์ฑ
1๏ธโฃ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅธ ๋ก๋ฉ ์๋์ ๋์ ์ฑ๋ฅ์ ์ํด์ ํ์ํ๋ค.
โฐ ๊ตฌ์ฑํ๋ ์ฝ๋์ ์์ด ๋ง๋ค -> ๋ฌด๊ฒ๋ค -> ๋ฌด๊ฑฐ์ธ์๋ก ๋ก๋ฉ ์๋์ ์ฑ๋ฅ์ด ์ ํ๋๋ค.
2๏ธโฃ Webpack์ด ์๋ค๋ฉด ๊ฐ์ ํ์ ์ ํ์ผ๋ค์ ๋ฌถ์ด์ ์์ฒญ ๋ฐ ์๋ต์ ๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ ๋น์ฉ์ด ์ค์ด๋ ๋ค.
3๏ธโฃ Webpack loader๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๋ถ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ์ง ์๋ JS ES6์ ๋ฌธ๋ฒ๋ค์ ES5๋ก ๋ณํํด์ฃผ๋ babel-loader๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
4๏ธโฃ Webpack4 ๋ฒ์ ์ด์๋ถํฐ๋ Development, Production ๋ ๊ฐ์ง ๋ชจ๋๋ฅผ ์ง์ํ๋ฉด์, Production ๋ชจ๋๋ก ๋ฒ๋ค๋ง์ ์งํํ ๊ฒฝ์ฐ, ์ฝ๋ ๋๋ ํ, ์์ถ, ์ต์ ํ ์์ ์ ์ง์ํ๊ธฐ๋ ํ๋ค.
๐ฃ ์นํฉ์ ํต์ฌ ๊ฐ๋
// webpack์ config ํ์ผ'
module.exports = {
target: ["web", "es5"],
// ์์ฑ๋ ์ฝ๋๋ฅผ es5 ๋ฒ์ ์ผ๋ก ์ปดํ์ผ ํ๊ฒ ๋ค.
entry: "./src/script.js",
output: {
path: path.resolve(__dirname, "docs"),
filename: "app.bundle.js",
clean: true
},
module: {
rules: [
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"],
exclude: /node_modules/,
},
],
},
plugins: [
new HtmlWebpackPlugin({
// ์์ฑ๋ ๋ชจ๋ ๋ฒ๋ค์ ์๋์ผ๋ก ์ฝ์
ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ฉ HTML ํ์ผ์ ์์ฑํด์ค๋ค.
template: path.resolve(__dirname, "src", "index.html"),
}),
new MiniCssExtractPlugin(),
// CSS๋ฅผ ๋ณ๋์ ํ์ผ๋ก ์ถ์ถํด CSS๋ฅผ ํฌํจํ๋ JS ํ์ผ ๋น CSSํ์ผ์ ์์ฑํด์ฃผ๊ฒ๋ ์ง์ํ๋ค.
],
optimization: {
minimizer: [
new CssMinimizerPlugin(),
// mini-css-extract-plugin์ ๊ด๋ จ๋ ๋ฒ๋ค์ ์ต์ํํ๋๋ก ์ง์ํ๋ค.
]
}
};
1๏ธโฃ Target : Webpack์ด ์ปดํ์ผ ํ ์์
โฐ ๊ธฐ๋ณธ ๊ฐ์ web์ผ๋ก ์ ์ฉํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ ์ฉ๋๋ค.
2๏ธโฃ Entry : ์ฝ๋์ ์์์
โฐ Webpack์ ์ด Entry point๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ง๊ฐ์ ์ ์ผ๋ก ์์กดํ๋ ๋ค๋ฅธ ๋ชจ๋๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์๋ผ ์ ์๋ค.
โฐ ๊ธฐ๋ณธ ๊ฐ์ ./src/index.js
3๏ธโฃ Output : ์์ฑ๋ ๋ฒ๋ค์ ๋ด๋ณด๋ผ ์์น์ ์ด ํ์ผ์ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ webpack์๊ฒ ์๋ ค์ฃผ๋ ์ญํ
โฐ ๊ธฐ๋ณธ ์ถ๋ ฅ ํ์ผ์ ๊ฒฝ์ฐ์๋ ./dist/main.js๋ก, ์์ฑ๋ ๊ธฐํ ํ์ผ์ ๊ฒฝ์ฐ์๋ ./dist ํด๋๋ก ์ค์ ๋๋ค.
4๏ธโฃ Loader : Webpack์ด ๋ค๋ฅธ ์ ํ์ ํ์ผ์ ์ฒ๋ฆฌํ๊ฑฐ๋, ๊ทธ๋ค์ ์ ํจํ ๋ชจ๋๋ก ๋ณํํด ์ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ํ๋์ ๊ทธ๋ํ์ ์ถ๊ฐํ ์ ์๋ค.
โฐ ๋ํ๋์ ๊ทธ๋ํ : ๋ชจ๋ ๊ฐ์ ์์กด ๊ด๊ณ๋ก ์๊ธฐ๋ ๊ตฌ์กฐ
โฐ test : ๋ณํ์ด ํ์ํ ํ์ผ๋ค์ ์๋ณํ๊ธฐ ์ํ ์์ฑ
โฐ use : ๋ณํ์ ์ํํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ก๋๋ฅผ ๊ฐ๋ฆฌํค๋ ์์ฑ
โฐ exclude : ๋ฐ๋ฒจ๋ก ์ปดํ์ผํ์ง ์์ ํ์ผ์ด๋ ํด๋๋ฅผ ์ง์ . (๋ฐ๋๋ก include ์์ฑ์ ์ด์ฉํด ๋ฐ๋์ ์ปดํ์ผํด์ผ ํ ํ์ผ์ด๋ ํด๋ ์ง์ ๊ฐ๋ฅ)
โฐ test์ use ์์ฑ์ ํ์ ์์ฑ
โฐrules๊ฐ ์๋ module.rules ์๋์ ์ ์ํด์ผ ํ๋ค.
5๏ธโฃ Plugins : ๋ฒ๋ค์ ์ต์ ํํ๊ฑฐ๋ ์์ ์ ๊ด๋ฆฌํ๊ณ , ํ๊ฒฝ๋ณ์ ์ฃผ์ ๋ฑ์ ๊ด๋ฒ์ํ ์์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
โฐ require()์ ํตํด ํ๋ฌ๊ทธ์ธ์ ์์ฒญํ๊ณ , plugins ๋ฐฐ์ด์ ์ฌ์ฉํ๊ณ ์ ํ๋ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ๋ค.
6๏ธโฃ Optimization : Webpack 4 ๋ฒ์ ๋ถํฐ ์ ํํ ํญ๋ชฉ์ ๋ฐ๋ผ ์ต์ ํ๋ฅผ ์คํํ๋ค.
โฐ minimize : TerserPlugin ๋๋ optimization.minimize์ ๋ช ์๋ plugins๋ก bundle ํ์ผ์ ์ต์ํ(=์์ถ)์ํค๋ ์์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์
โฐ minimizer : defualt minimizer์ ์ปค์คํ ๋ TerserPlugin ์ธ์คํด์ค๋ฅผ ์ ๊ณตํด์ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
๐ฃ ์นํฉ๊ณผ ๋ฆฌ์กํธ
๐ญ. ๋ฆฌ์กํธ๊ฐ ๋ฒ๋ค๋ง์ด ํ์ํ ์ด์
โ๏ธ ์์ ๋๊ฐ ๋์ ๋ฐ๋ฉด ์์์ผํ๋ ์ ์ด ๋ง์์ง๋ ์ด๋ฅผ ํ๋ฒ์ ํด๊ฒฐํ ์ ์๋ create-react-app ์ด๋ผ๋ ํด ์ฒด์ธ์ ๊ฐ๋ฐํ๋ค -> ์ด ํด ๋ชฉ๋ก์ ์ด๋ง์ด๋งํ๊ณ , ์ด ๊ฑฐ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชฉ๋ก์ ์ค์ด๊ณ ์ ์ง์ ์นํฉ์ ์ค์นํ์ฌ ํ๋์ฉ ๋ฆฌ์กํธ์ ๊ทธ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ์ ํ๊ธฐ ์์ํ๋ค -> ์๊ฐ์ด ์ง๋๋ฉด์ ๊ฐ๋ฐ์์ ๋ค์ํ ๋์ฆ๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด ๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์์ ์ผ๋ก ์ฌ์ฉํด์ผ๋ง ํ๊ณ , ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณจ๋ผ์ ๋ฒ๋ค๋ง ํ ์ ์๋ ์นํฉ์ด ํ์ํ๊ฒ ๋์๋ค.
๐ฎ. ๋ฆฌ์กํธ ๊ฐ๋ฐ์ ๊ผญ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
1๏ธโฃ react, react-dom
โ๏ธ react : ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ Hooks, ๋ผ์ดํ ์ฌ์ดํด์ ๋ํ ์ ๋ณด๊ฐ ๋ชจ๋ ๋ค์ด์๋ค.
โ๏ธ react-dom : ์ด ๋ฆฌ์กํธ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ฌ์ค ์ ์๋ค.
2๏ธโฃ babel
โ๏ธ jsx๋ฅผ js๋ก ๋ณ๊ฒฝํด์ ๋ฒ๋ค๋งํด์ฃผ๋ ๋ก๋์ ์ผ์ข
3๏ธโฃ css-loader
โ๏ธ import 'aaa.css' ์ ๊ฐ์ด ์ ๋ ฅํด๋ css๊ฐ ์ ์ฉ๋ ์ ์๊ฒ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๐ฏ. ๋ฆฌ์กํธ ๊ฐ๋ฐ์ ๋์์ด ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
1๏ธโฃ react-hot-loader
โ๏ธ webpack-dev-server์ฒ๋ผ ์ ์ฅํ ๋ ๋ง๋ค ๋ณ๊ฒฝ์ฌํญ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ์ฉํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โฐ react-hot-loader๋ ๋ฆฌ์กํธ ์ํ๋ฅผ ์ ์ง์์ผ์ค๋ค.
2๏ธโฃ eslint
โ๏ธ JavaScript๋ก ๊ฐ๋ฐ ์ ์์ฃผ ์ ํ๋ ์๋ฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ฆฐํฐ
3๏ธโฃ prettier
โ๏ธ JavaScript๋ก ๊ฐ๋ฐ ์ ํต์ผ์ฑ ์๊ฒ ์ฝ๋ ํ์์ ๋ง์ถ ์ ์๊ฒ ๋์์ฃผ๋ ํด
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S4) Unit 4. [React] React Hooks (0) | 2023.03.23 |
---|---|
S4) Unit 4. [React] Virtual DOM (0) | 2023.03.22 |
S4) Unit 2. [HTML/CSS] CSS ์ ๋๋ฉ์ด์ & Canvas (0) | 2023.03.17 |
S4) Unit 2. [HTML/CSS] ๋ฐ์ํ ์น (0) | 2023.03.16 |
S4) Unit 2. [HTML/CSS] ๋ธ๋ผ์ฐ์ &๋ ๋๋ง (0) | 2023.03.16 |