Next.js 기초 입문 5주차: CSS 스타일링 기초 (CSS Modules, Tailwind CSS)

📚
제5주차 학습 목표

CSS 스타일링 기초

Next.js에서 CSS 모듈, Tailwind CSS 등 기본적인 스타일링 방법을 배웁니다.

📌 이번 회차 학습 목표

  • Next.js 프로젝트에 CSS Modules를 적용하여 컴포넌트 스코프 스타일을 구현할 수 있습니다.
  • Tailwind CSS를 Next.js 프로젝트에 설치하고 유틸리티 클래스를 활용하여 스타일링할 수 있습니다.
  • 전역 CSS와 컴포넌트별 CSS의 적용 방식을 이해하고 적절히 활용할 수 있습니다.
  • 다양한 CSS 스타일링 방법 중 프로젝트 특성에 맞는 방법을 선택할 수 있는 기초를 마련합니다.

📝 개념 설명

Next.js에서의 CSS 스타일링 개요

Next.js는 React 기반의 프레임워크로서, 웹 애플리케이션의 사용자 인터페이스를 구축하는 데 사용됩니다. UI를 시각적으로 매력적이고 기능적으로 만들기 위해서는 CSS(Cascading Style Sheets)를 통한 스타일링이 필수적입니다. Next.js는 다양한 CSS 스타일링 방법을 지원하며, 그중에서도 CSS ModulesTailwind CSS는 현대 웹 개발에서 널리 사용되는 효율적인 방법론으로 손꼽힙니다.

CSS Modules

CSS Modules는 CSS 파일을 모듈처럼 불러와서 사용하는 방식입니다. 이 방식의 가장 큰 특징은 로컬 스코프(Local Scope)를 자동으로 생성하여 CSS 클래스 이름 충돌을 방지한다는 점입니다. 즉, 특정 컴포넌트에서 정의된 스타일은 해당 컴포넌트에만 적용되며, 다른 컴포넌트에 영향을 주지 않습니다. 이는 대규모 애플리케이션에서 CSS를 관리할 때 매우 유용합니다.

  • 장점: 클래스 이름 충돌 방지, 컴포넌트 기반 스타일링, 유지보수 용이성.
  • 단점: 각 컴포넌트마다 별도의 CSS 파일을 관리해야 할 수 있음.

Tailwind CSS

Tailwind CSS는 유틸리티 우선(Utility-First) CSS 프레임워크입니다. 미리 정의된 수많은 유틸리티 클래스(예: text-blue-500, p-4, flex)를 HTML 마크업에 직접 적용하여 스타일을 구성합니다. 별도의 CSS 파일을 작성할 필요 없이 마크업 내에서 빠르게 스타일을 적용하고 수정할 수 있다는 점이 큰 장점입니다.

  • 장점: 빠른 개발 속도, 일관된 디자인 시스템 구축 용이, 반응형 디자인 구현 용이.
  • 단점: 마크업이 길어질 수 있음, 초기 학습 곡선 존재.
⚖️ 비교
항목CSS ModulesTailwind CSS
접근 방식컴포넌트 스코프 CSS 파일유틸리티 우선 CSS 프레임워크
클래스 충돌자동으로 방지 (로컬 스코프)유틸리티 클래스로 충돌 없음
개발 속도CSS 파일 작성 필요, 중상클래스 조합으로 빠름, 상
유지보수컴포넌트별 분리, 용이마크업 내에서 관리, 용이
학습 곡선낮음 (기존 CSS와 유사)중간 (유틸리티 클래스 암기)

💡 예제 & 실습

1. CSS Modules 적용하기

먼저, Next.js 프로젝트를 생성합니다. (이전 회차에서 생성한 프로젝트를 사용해도 무방합니다.)

npx create-next-app my-app --ts
cd my-app

다음으로, components 폴더를 생성하고 그 안에 Button.tsx 컴포넌트와 Button.module.css 파일을 만듭니다.

 

components/Button.tsx

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

interface ButtonProps {
children: React.ReactNode;
onClick?: () => void;
}

export default function Button({ children, onClick }: ButtonProps) {
return (
<button className={styles.button} onClick={onClick}>
{children}
</button>
);
}

components/Button.module.css

.button {
background-color: #0070f3;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
}

.button:hover {
background-color: #0056b3;
}

이제 pages/index.tsx 파일에서 이 버튼 컴포넌트를 사용해봅니다.

 

pages/index.tsx

import Button from '../components/Button';
import styles from '../styles/Home.module.css'; // 전역 스타일 예시

export default function HomePage() {
const handleClick = () => {
alert('버튼이 클릭되었습니다!');
};

return (
<div className={styles.container}>
<h1>Next.js CSS 스타일링 기초</h1>
<p>CSS Modules 예제:</p>
<Button onClick={handleClick}>클릭하세요</Button>
<p>전역 스타일 예제:</p>
<div className='global-text'>이 텍스트는 전역 스타일이 적용됩니다.</div>
</div>
);
}

styles/Home.module.css (기존 파일 활용)

.container {
min-height: 100vh;
padding: 0 0.5rem;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}

.title {
margin: 0;
line-height: 1.15;
font-size: 4rem;
text-align: center;
}

styles/globals.css (전역 스타일 추가)

html, body {
padding: 0;
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
}

a {
color: inherit;
text-decoration: none;
}

* {
box-sizing: border-box;
}

.global-text {
color: green;
font-weight: bold;
margin-top: 20px;
}

프로젝트를 실행하고 결과를 확인합니다.

npm run dev

버튼에는 Button.module.css의 스타일이 적용되고, ‘이 텍스트는 전역 스타일이 적용됩니다.’ 텍스트에는 globals.cssglobal-text 스타일이 적용되는 것을 확인할 수 있습니다.

2. Tailwind CSS 적용하기

새로운 Next.js 프로젝트를 생성하거나 기존 프로젝트에 Tailwind CSS를 설치합니다.

npx create-next-app my-tailwind-app --ts
cd my-tailwind-app

Tailwind CSS와 PostCSS, Autoprefixer를 설치합니다.

npm install -D tailwindcss postcss autoprefixer

Tailwind CSS 설정 파일을 초기화합니다.

npx tailwindcss init -p

이 명령은 tailwind.config.jspostcss.config.js 파일을 생성합니다.

 

tailwind.config.js 파일을 다음과 같이 수정하여 Tailwind가 JSX/TSX 파일을 스캔하도록 설정합니다.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
'./pages/**/*.{js,ts,jsx,tsx}',
'./components/**/*.{js,ts,jsx,tsx}',
],
theme: {
extend: {},
},
plugins: [],
}

styles/globals.css 파일에 Tailwind의 기본 지시문을 추가합니다. 기존 내용은 모두 지우고 다음 내용을 추가합니다.

/* styles/globals.css */
@tailwind base;
@tailwind components;
@tailwind utilities;

이제 pages/index.tsx 파일에서 Tailwind CSS 유틸리티 클래스를 사용하여 스타일을 적용합니다.

 

pages/index.tsx

export default function HomePage() {
return (
<div className='min-h-screen flex flex-col items-center justify-center bg-gray-100'>
<h1 className='text-5xl font-bold text-blue-600 mb-4'>
Tailwind CSS 예제
</h1>
<p className='text-lg text-gray-700 mb-8'>
이 텍스트는 Tailwind CSS로 스타일링되었습니다.
</p>
<button className='bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 rounded'>
Tailwind 버튼
</button>
</div>
);
}

프로젝트를 실행하고 결과를 확인합니다.

npm run dev

Tailwind CSS 유틸리티 클래스가 적용되어 스타일이 나타나는 것을 볼 수 있습니다.

📌 핵심 포인트
🔑
CSS Modules
컴포넌트별로 고유한 클래스 이름을 생성하여 스타일 충돌을 방지합니다. .module.css 확장자를 사용합니다.
🔑
Tailwind CSS
미리 정의된 유틸리티 클래스를 HTML에 직접 적용하여 빠르게 스타일링합니다. 설정 파일과 globals.css에 지시문 추가가 필요합니다.
🔑
전역 CSS
_app.tsx 파일에서 globals.css를 임포트하여 전체 애플리케이션에 적용되는 기본 스타일을 정의합니다.

⚠️ 자주 틀리는 것 / 주의사항

  • CSS Modules 파일명 오타: CSS Modules는 파일명이 반드시 [name].module.css 형식이어야 합니다. .module을 누락하면 일반 CSS 파일로 인식되어 전역 스코프에 적용될 수 있습니다.
  • Tailwind CSS 설정 누락: tailwind.config.jscontent 설정에서 스타일을 적용할 파일 경로를 정확히 지정하지 않으면 Tailwind 클래스가 빌드 시 제거되어 스타일이 적용되지 않을 수 있습니다.
  • 전역 CSS와 컴포넌트 CSS의 혼동: globals.css는 전역적으로 적용되므로, 특정 컴포넌트에만 영향을 주어야 하는 스타일은 CSS Modules나 Tailwind CSS와 같은 컴포넌트 스코프 방식 사용을 고려해야 합니다.
  • 스타일 우선순위: 여러 스타일링 방식이 혼합될 때 CSS의 우선순위 규칙을 이해하는 것이 중요합니다. 일반적으로 인라인 스타일 > ID 선택자 > 클래스 선택자 순으로 우선순위를 가집니다. Tailwind CSS는 유틸리티 클래스를 통해 높은 우선순위를 가지는 경우가 많습니다.

🔗 다음 회차 예고

이번 회차에서는 Next.js에서 CSS Modules와 Tailwind CSS를 활용한 기본적인 스타일링 방법을 학습했습니다. 다음 6회차에서는 ‘데이터 페칭 기초’를 주제로 Next.js의 핵심 기능 중 하나인 데이터 가져오기(Data Fetching) 방법에 대해 심도 있게 다룰 예정입니다. getServerSideProps, getStaticProps, getStaticPaths와 같은 함수들을 통해 서버 사이드 렌더링(SSR) 및 정적 사이트 생성(SSG) 환경에서 데이터를 효율적으로 가져오는 방법을 학습할 것입니다. 이번 회차에서 배운 스타일링 지식을 바탕으로 다음 회차에서는 데이터를 시각적으로 표현하는 방법을 함께 익혀봅시다.

✅ 이번 회차 핵심 정리
  • Next.js는 CSS Modules, Tailwind CSS 등 다양한 스타일링 방법을 지원합니다.
  • CSS Modules는 .module.css 파일을 통해 컴포넌트 스코프 스타일을 제공하여 클래스 충돌을 방지합니다.
  • Tailwind CSS는 유틸리티 클래스를 마크업에 직접 적용하여 빠르고 일관된 스타일링을 가능하게 합니다.
  • 전역 스타일은 styles/globals.css에 정의하며, _app.tsx에서 임포트하여 전체 애플리케이션에 적용됩니다.
  • 각 스타일링 방법의 장단점을 이해하고 프로젝트의 요구사항에 맞춰 적절한 방법을 선택하는 것이 중요합니다.

댓글 남기기

Wordpress Social Share Plugin powered by Ultimatelysocial
Copy link
URL has been copied successfully!
THREADS
RSS
error: 저작권 콘텐츠보호를 부탁드립니다.