ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐ŸŽจ Next.js App Router์—์„œ CSS ์Šคํƒ€์ผ๋ง ์™„์ „ ์ •๋ณต

Next.js App Router ํ”„๋กœ์ ํŠธ์—์„œ CSS๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์–‘ํ•˜๋ฉฐ, ๊ฐ ๋ฐฉ์‹์€ ์‚ฌ์šฉ ๋ชฉ์ ์— ๋”ฐ๋ผ ์ ์ ˆํ•˜๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ CSS ์ ์šฉ ๋ฐฉ์‹๋ถ€ํ„ฐ, Tailwind, Sass, CSS-in-JS๊นŒ์ง€ App Router ๊ธฐ๋ฐ˜์—์„œ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€ ์ฝ”๋“œ ์˜ˆ์ œ ์ค‘์‹ฌ์œผ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


๐Ÿงฉ CSS Modules

CSS Modules๋Š” ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๊ณ , ํด๋ž˜์Šค ์ด๋ฆ„ ์ถฉ๋Œ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•

/* app/page.module.css */
.title {
  color: royalblue;
  font-size: 2rem;
}
// app/page.tsx
import styles from './page.module.css';

export default function Page() {
  return <h1 className={styles.title}>CSS Module ์Šคํƒ€์ผ</h1>;
}

๐ŸŒ ๊ธ€๋กœ๋ฒŒ CSS

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉํ•  ์Šคํƒ€์ผ์€ globals.css๋ฅผ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•

๋ฐ˜์‘ํ˜•
/* app/globals.css */
body {
  margin: 0;
  font-family: 'Pretendard', sans-serif;
  background-color: #f9fafb;
}
// app/layout.tsx
import './globals.css';

export default function RootLayout({ children }) {
  return (
    <html lang="ko">
      <body>{children}</body>
    </html>
  );
}

โšก Tailwind CSS

Tailwind๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์Šคํƒ€์ผ๋ง์œผ๋กœ ๋น ๋ฅธ UI ๊ตฌํ˜„์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜

npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p

์„ค์ •

// tailwind.config.js
module.exports = {
  content: ['./app/**/*.{ts,tsx}'],
  theme: {
    extend: {},
  },
  plugins: [],
};
/* app/globals.css */
@tailwind base;
@tailwind components;
@tailwind utilities;

์‚ฌ์šฉ

export default function Page() {
  return <h1 className="text-3xl font-bold text-blue-600">Tailwind ์ ์šฉ!</h1>;
}

๐Ÿ’… Sass (SCSS)

Sass๋Š” CSS์— ๊ตฌ์กฐํ™”์™€ ๋ณ€์ˆ˜/๋ฏน์Šค์ธ์„ ๋”ํ•ด์ฃผ๋Š” ์Šคํƒ€์ผ ์ „์ฒ˜๋ฆฌ๊ธฐ์ž…๋‹ˆ๋‹ค.

์„ค์น˜

npm install -D sass

์‚ฌ์šฉ๋ฒ•

/* app/styles.scss */
$primary-color: #1e40af;

h1 {
  color: $primary-color;
}
// app/layout.tsx
import './styles.scss';

๐ŸŽจ CSS-in-JS (Styled Components)

์ปดํฌ๋„ŒํŠธ์™€ ์Šคํƒ€์ผ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ํ•จ๊ป˜ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” CSS-in-JS ๋ฐฉ์‹๋„ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์„ค์น˜

npm install styled-components
npm install -D @types/styled-components

์‚ฌ์šฉ๋ฒ•

'use client';
import styled from 'styled-components';

const Title = styled.h1`
  font-size: 2rem;
  color: tomato;
`;

export default function Page() {
  return <Title>Styled Components ์ ์šฉ!</Title>;
}

๐Ÿ“ฆ ์™ธ๋ถ€ CSS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ (์˜ˆ: Bootstrap)

์™ธ๋ถ€ CSS ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด layout.tsx ๋˜๋Š” _app.tsx์—์„œ ์ง์ ‘ import ํ•ฉ๋‹ˆ๋‹ค.

npm install bootstrap
// app/layout.tsx
import 'bootstrap/dist/css/bootstrap.min.css';

export default function RootLayout({ children }) {
  return <html><body>{children}</body></html>;
}

โœ… ์ •๋ฆฌ

๋ฐฉ์‹ ํŠน์ง• ์ถ”์ฒœ ์ƒํ™ฉ

CSS Modules ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„, ํด๋ž˜์Šค ์ด๋ฆ„ ์ถฉ๋Œ ๋ฐฉ์ง€ ์ปดํฌ๋„ŒํŠธ๋ณ„ ์Šคํƒ€์ผ ๊ด€๋ฆฌ
๊ธ€๋กœ๋ฒŒ CSS ์ „์—ญ ์Šคํƒ€์ผ ์„ค์ • ๋ฆฌ์…‹, ํฐํŠธ, ๋ฐฐ๊ฒฝ
Tailwind CSS ๋น ๋ฅธ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์Šคํƒ€์ผ๋ง UI ์†๋„ ์ค‘์‹ฌ ๊ฐœ๋ฐœ
Sass (SCSS) ๋ณ€์ˆ˜, ๋ฏน์Šค์ธ ๋“ฑ ๊ณ ๊ธ‰ ๋ฌธ๋ฒ• ๋ณต์žกํ•œ ๋””์ž์ธ ์‹œ์Šคํ…œ
CSS-in-JS ์ปดํฌ๋„ŒํŠธ์™€ ์Šคํƒ€์ผ ํ†ตํ•ฉ ๋†’์€ ๋ชจ๋“ˆํ™”, ์ƒํƒœ ๊ธฐ๋ฐ˜ ์Šคํƒ€์ผ
์™ธ๋ถ€ CSS ๊ธฐ์กด ํ”„๋ ˆ์ž„์›Œํฌ ํ™œ์šฉ Bootstrap ๋“ฑ ์ฆ‰์‹œ UI ๊ตฌ์ถ•

 

Next.js, CSS Modules, ๊ธ€๋กœ๋ฒŒ CSS, Tailwind CSS, Sass, SCSS, CSS-in-JS, Styled Components, App Router, ์›น ์Šคํƒ€์ผ๋ง, ํ”„๋ก ํŠธ์—”๋“œ

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•