๐ŸŒˆ CSS ํŒŒ์ผ vs CSS Module ์™„๋ฒฝ ์ •๋ฆฌ

HMJยท2025๋…„ 5์›” 21์ผ

๊ฐœ๋…์ •๋ฆฌ

๋ชฉ๋ก ๋ณด๊ธฐ
8/8

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ๋•Œ style.css์ฒ˜๋Ÿผ ์ผ๋ฐ˜ CSS ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ ,
.module.css๋ผ๋Š” ์กฐ๊ธˆ์€ ์ƒ์†Œํ•œ ํ™•์žฅ์ž๋ฅผ ๋งˆ์ฃผ์น˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋‘˜์€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๊ณ , ์–ธ์ œ ๋ฌด์—‡์„ ์จ์•ผ ํ• ๊นŒ์š”?


๐Ÿ” CSS๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

CSS(Cascading Style Sheets)๋Š” HTML ๋ฌธ์„œ์˜ ์‹œ๊ฐ์  ํ‘œํ˜„์„ ๋‹ด๋‹นํ•˜๋Š” ์Šคํƒ€์ผ๋ง ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

/* style.css */
.button {
  background-color: #4caf50;
  color: white;
}
<button className="button">ํด๋ฆญ</button>
  • ์ด ์Šคํƒ€์ผ์€ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ, ๋ชจ๋“  ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฆ‰, ์ „์—ญ(Global) ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงฉ CSS Module์ด๋ž€?

CSS Module์€ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์Šคํƒ€์ผ์„ ์บก์Аํ™”ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
ํŒŒ์ผ ์ด๋ฆ„์ด Something.module.css์ฒ˜๋Ÿผ ๋˜์–ด ์žˆ๊ณ , JS/TS ํŒŒ์ผ์—์„œ ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

/* Button.module.css */
.button {
  background-color: #4caf50;
  color: white;
}
// Button.tsx
import styles from './Button.module.css';

<button className={styles.button}>ํด๋ฆญ</button>

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด button ํด๋ž˜์Šค๋Š” ์˜ค์ง ์ด ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.


โš–๏ธ CSS vs CSS Module โ€” ๋น„๊ต ์ •๋ฆฌ

ํ•ญ๋ชฉ์ผ๋ฐ˜ CSS (.css)CSS Module (.module.css)
์ ์šฉ ๋ฒ”์œ„์ „์—ญ๋กœ์ปฌ (์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„)
ํด๋ž˜์Šค ์ถฉ๋Œ๋ฐœ์ƒ ๊ฐ€๋Šฅ (์ฃผ์˜ ํ•„์š”)์ถฉ๋Œ ์—†์Œ (์ž๋™ ํ•ด์‹œ ์ฒ˜๋ฆฌ)
์Šคํƒ€์ผ ์‚ฌ์šฉ ๋ฐฉ์‹className="..."className={styles.class}
์ฝ”๋“œ ์œ ์ง€๋ณด์Šค๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์–ด๋ ต๋‹ค์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ๊ด€๋ฆฌ ์‰ฌ์›€
์„ ์–ธ ์œ„์น˜์–ด๋””์„œ๋“  ๊ฐ€๋Šฅimportํ•œ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ
๊ถŒ์žฅ ์ƒํ™ฉ์ „์ฒด์ ์ธ ๋ ˆ์ด์•„์›ƒ, ํฐํŠธ, ๊ณตํ†ต ์Šคํƒ€์ผ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ, ์žฌ์‚ฌ์šฉ ์ปดํฌ๋„ŒํŠธ

โœ… ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

๐Ÿ“ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

src/
โ”œโ”€โ”€ components/
โ”‚   โ”œโ”€โ”€ Button.tsx
โ”‚   โ””โ”€โ”€ Button.module.css
โ”œโ”€โ”€ App.tsx
โ””โ”€โ”€ global.css

๐Ÿ“„ Button.module.css

.button {
  background-color: royalblue;
  color: white;
  padding: 0.5rem 1rem;
  border-radius: 4px;
  border: none;
  font-weight: bold;
}

๐Ÿ“„ Button.tsx

import React from 'react';
import styles from './Button.module.css';

const Button: React.FC = () => {
  return <button className={styles.button}>๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”</button>;
};

export default Button;

๐Ÿ“„ App.tsx

import React from 'react';
import './global.css'; // ์ „์—ญ CSS
import Button from './components/Button';

function App() {
  return (
    <div className="app">
      <h1>CSS vs CSS Module</h1>
      <Button />
    </div>
  );
}

export default App;

๐Ÿ’ก ์–ด๋–ค ๊ฑธ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?

์ƒํ™ฉ์ถ”์ฒœ ๋ฐฉ์‹
๋ฆฌ์…‹, ํฐํŠธ, ์ „์—ญ ํ…Œ๋งˆ ์„ค์ •์ผ๋ฐ˜ CSS
๋ฒ„ํŠผ, ์นด๋“œ, ์„น์…˜ ๋“ฑ ๊ฐœ๋ณ„ UI ์ปดํฌ๋„ŒํŠธCSS Module
๋Œ€๊ทœ๋ชจ ํŒ€ ํ”„๋กœ์ ํŠธCSS Module (์ถฉ๋Œ ๋ฐฉ์ง€)

โœ… ํ•œ ์ค„ ์š”์•ฝ

์ „์—ญ ์Šคํƒ€์ผ์€ .css, ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ์€ .module.css๋กœ!


๐Ÿ“š ๋งˆ๋ฌด๋ฆฌ

React์—์„œ CSS๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” ๋‹จ์ˆœํžˆ ๋ณด์ด๋Š” ๊ฒƒ๋งŒ ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ ,
๊ตฌ์กฐ์ ์œผ๋กœ ์Šคํƒ€์ผ์ด ์–ด๋””๊นŒ์ง€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

CSS Module์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์œ ์ง€๋ณด์ˆ˜๋„ ์‰ฌ์›Œ์ง€๊ณ , ํŒ€์› ๊ฐ„ ์ถฉ๋Œ๋„ ์ค„์ผ ์ˆ˜ ์žˆ์–ด์š”.

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