ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฆฌ์กํธ ๋น ์บ๋ฆฐ๋(RBC)๋ฅผ ํ๋ก์ ํธ์ ์ ์ฉํ๊ธฐ ์ , ํ์ ๊ฒธ ์ฐ์ต์ผ๋ก ๊ฐ์ธ ํ์ผ์ ์์ฑํ๋ค.
์ด๊ธฐ ์ธํ ๋ถํฐ ๋๊ด์ด ์์๋๋๋ฐ...
ํ์ ์ ์ ์ฉํ๊ธฐ ์ํด ๊ธฐ๋กํด๋ณธ๋ค.
์งํ ์ํฉ
- ๋ฆฌ์กํธ ๋น ์บ๋ฆฐ๋ ์ค์น
- pnpm dev
- ์ค๋ฅ : You forgot to add 'mini-css-extract-plugin' plugin

- 'please read' ๋งํฌ๋ก ๋ค์ด๊ฐ๋ณด๋ 'CSS ์ฝ๋๊ฐ ํฌํจ๋ JS ํ์ผ ๋ณ๋ก CSS ํ์ผ์ ์์ฑ' ๋ฌด์จ ๋ง??
- Webpack์ ๋ชจ๋ ์ฝ๋(JS, CSS ๋ฑ)๋ฅผ ๋ฒ๋ค๋งํด์ ํ๋์ JavaScript ํ์ผ๋ก ๋ง๋ฌ
- ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด CSS๊ฐ JS ๋ฒ๋ค์ ํฌํจ๋์ด ๋ธ๋ผ์ฐ์ ์์ ๋ก๋ฉํ ๋ ์ต์ ํ๋์ง ์์ ์ ์์
mini-css-extrant-plugin ์ ์ฉ
[๋ฆฌ์กํธ ํ๊ฒฝ]
์๋๋ ๋ฆฌ์กํธ ํ๊ฒฝ์์ mini-css-extrant-plugin์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๐์๋ ๋ฐฉ์
- CSS ์ฝ๋ ์ถ์ถ: Webpack์ด JS ํ์ผ์ ์ฒ๋ฆฌํ ๋ import "./style.css" ๊ฐ์ ์ฝ๋๊ฐ ์์ผ๋ฉด
์๋๋ ์ด CSS๊ฐ JS ๋ด๋ถ์ ํฌํจ๋์ง๋ง, mini-css-extract-plugin์ ์ฌ์ฉํ๋ฉด CSS๋ฅผ ๋ณ๋์ .css ํ์ผ๋ก ๋ถ๋ฆฌ - CSS ํ์ผ ์์ฑ: ๋ฒ๋ค๋ง์ด ์๋ฃ๋๋ฉด JS ๋ฒ๋ค๊ณผ ๋ณ๊ฐ๋ก .css ํ์ผ์ด ์์ฑ๋จ
- CSS ๋ก๋ ์ต์ ํ: ์ด๋ ๊ฒ ํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ CSS๋ฅผ ๋ณ๋๋ก ๋ก๋ํ ์ ์์ด JS + CSS๋ฅผ ํ ๋ฒ์ ๋ก๋ํ๋ ๊ฒ๋ณด๋ค ๋ ํจ์จ์
๐์ ์ฉ ๋ฐฉ๋ฒ (React ํ๋ก์ ํธ์์ ์ ์ฉ)
- ์ค์น
npm install mini-css-extract-plugin --save-dev
- Webpack ์ค์ ๋ณ๊ฒฝ (webpack.config.js)
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, "css-loader"],
},
],
},
plugins: [new MiniCssExtractPlugin()], // ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ
};
๐react-big-calendar์์ ์ ํ์ํ ๊น?
react-big-calendar๋ ๋ด๋ถ์ ์ผ๋ก CSS๋ฅผ ์ฌ์ฉํ๋ค.
ํ์ง๋ง Webpack์ด CSS๋ฅผ ์ฒ๋ฆฌํ ๋, mini-css-extract-plugin์ด ์์ผ๋ฉด CSS๊ฐ JS ๋ฒ๋ค ๋ด๋ถ์ ํฌํจ๋๋ ค๊ณ ํด์ ์ถฉ๋์ด ๋ฐ์ํ๋ค.
๋ฐ๋ผ์ ํด๋น ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ๋ฉด RBC ๋ด๋ถ CSS๋ฅผ ๋ณ๋์ .css ํ์ผ๋ก ์์ฑํ๊ฒ ๋๊ณ , JS ๋ฒ๋ค๊ณผ ๋ถ๋ฆฌ๋์ด ์บ๋ฆฐ๋๋ง์ CSS๊ฐ ์ ์ฉ๋๋ค.
๊ทธ๋ก ์ธํ ํจ๊ณผ๋
1. ๋ฒ๋ค ํฌ๊ธฐ ์ต์ ํ
- JS ๋ก๋ฉ๊ณผ CSS ๋ก๋ฉ์ด ๋์์ ์งํํ ์ ์์ด ์ฑ๋ฅ์ด ์ข์์ง๋ค.
- JS ๋ก๋ ์ดํ์ CSS ์ ์ฉ์ด ์๋, ์คํ์ผ์ด ๋จผ์ ๋ก๋๋ ์ ์์.
๐คJS๊ฐ ๋ก๋๋๊ธฐ๋ ์ ์ ์คํ์ผ์ด ๋จผ์ ๋ก๋๋๋ฉด CSS๊ฐ ์ ์ฉ ์ ๋๋ ๊ฑฐ ์๋์ผ?
์คํ๋ ค ๋ ๋น ๋ฅด๊ฒ ๋ณด์ด๊ฒ ๋๋ค!
JS์ CSS๊ฐ ํฌํจ๋์ด ์์ ๋๋ 'JS ๋ก๋ -> CSS ์ ์ฉ' ์์์ด๊ธฐ ๋๋ฌธ์
์คํ์ผ์ด ์ ์ฉ๋์ง ์์ HTML ์์๊ฐ ๋จผ์ ๋ณด์ด๋ฉฐ, ๊น๋นก์ด๋ ํ์์ด ๋ฐ์ํ ์ ์๋ค.
๋ฐ๋ฉด ์คํ์ผ์ด ๋จผ์ ์ ์ฉ๋๋ฉด ์ง์ฐ ์์ด ํ๋ฉด ๊ตฌ์ฑ์ด ์ด๋ฃจ์ด์ง๋ค.
2. ์บ์ฑ ์ต์ ํ
- ์คํ์ผ์ด ๋ณ๊ฒฝ๋์ง ์๋ ํ CSS๋ ๋ธ๋ผ์ฐ์ ์์ ์บ์ฑ๋๊ณ , JS ํ์ผ๋ง ์๋ก ๋ฐ๋๋ก ํ ์ ์๋ค.
3. ์คํ์ผ ์ถฉ๋ ๋ฐฉ์ง
- RBC ๋ด๋ถ์์ ์ฌ์ฉํ๋ CSS์ ํ๋ก์ ํธ์์ ์ง์ ์ ์ํ CSS๊ฐ ์ถฉ๋ํ ๊ฐ๋ฅ์ฑ์ด ์๋๋ฐ,
RBC์ CSS๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ง ๊ฐ๋ฅํ๋ค.
[Next.js ํ๊ฒฝ]
๋ฐ๋ฉด ๋์ ๊ฐ์ด Next.js๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ฒฝ์ฐ์๋ ํ ์ค๋ง ์ถ๊ฐํ๋ฉด ๋๋ค.
import "react-big-calendar/lib/css/react-big-calendar.css";
์๋ํ๋ฉด Next.js๋ Webpack ์ค์ ์ ์๋ ๊ด๋ฆฌํ๊ณ CSS ๋ก๋๊ฐ ๊ธฐ๋ณธ์ผ๋ก ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ
- Next.js๋ next.config.js ๋ด๋ถ์์ Webpack์ ์๋์ผ๋ก ์ค์ ํ๊ธฐ ๋๋ฌธ์, ๊ธฐ๋ณธ์ ์ธ CSS ์ฒ๋ฆฌ๋ ์ถ๊ฐ ์ค์ ์์ด ๋์ํ๋ค.
- Next.js๋ .css ํ์ผ์ importํ๋ ๊ฒ์ ์ง์ํ๋ฏ๋ก, mini-css-extract-plugin์ ์ง์ ์ค์ ํ ํ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด import๋ฅผ ์ด๋์ ํ๋๋??
๋ณดํต ์ฌ๋ฌ ํ์ด์ง์์ ์บ๋ฆฐ๋ CSS๋ฅผ ์ ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ, RootLayout์ ์ ์ฉํ์ฌ ์ ์ญ ์คํ์ผ๋ก ์ง์ ํ๋ค.
ํ์ง๋ง ์ด๋ฒ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ '์บ๋ฆฐ๋ ํ์ด์ง'์์๋ง ๋ฆฌ์กํธ ๋น ์บ๋ฆฐ๋๋ฅผ ์ฌ์ฉํ๋ค.
๐ค๋ง์ฝ, ์ด๋ฐ ๊ฒฝ์ฐ์ RootLayout์ import๋ฅผ ํ๊ฒ ๋๋ค๋ฉด?
์บ๋ฆฐ๋๋ฅผ ์ฌ์ฉํ์ง ์๋ ํ์ด์ง์ CSS์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
๋ฐ๋ผ์ ์บ๋ฆฐ๋ ์ปดํฌ๋ํธ๊ฐ ํฌํจ๋ ํด๋น ํ์ด์ง์ import๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.

์ ์ ์๋ ํ์ธ!
'Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์ฌ๋๋ณ_Day4] RBC ํํค์น๊ธฐ 3 - ์บ๋ฆฐ๋๋ ์ CSR? (0) | 2025.04.02 |
|---|---|
| [์ฌ๋๋ณ_Day4] RBC ํํค์น๊ธฐ 2 - date-fns (0) | 2025.04.02 |
| [์ฌ๋๋ณ_Day3] ์บ๋ฆฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋น๊ต๐ (0) | 2025.04.01 |
| [์ฌ๋๋ณ_Day2] ํต์ฌ ๊ธฐ๋ฅ ๋ถ์ (0) | 2025.04.01 |
| [NEXTFLIX_Day3] ํ์ด์ง๋ค์ด์ (2) - ๋์ ๋ผ์ฐํ ์๋ ๋ฐฉ์ (0) | 2025.03.24 |