대표적인 리액트 컴포넌트 스타일링 방법들에 대해서 자세히 알아봅시다~
리액트에서 컴포넌트를 스타일링하는 다양한 방법들이 있으며, 각각은 특정한 사용 사례와 개발 스타일에 적합합니다.
저도 원래는 가장 기초적인 방법인 CSS 파일 사용, 그리고 Sass 정도만 알고 있었는데 생각보다 많은 방법이 있더라고요! 오늘은 그 중에서 가장 유명한 방법 2가지 Styled-components와 CSS Module을 알아보는 시간을 가지겠습니다~

Styled-components는 React 애플리케이션에 스타일을 적용하기 위한 CSS-in-JS 라이브러리입니다. CSS-in-JS는 스타일을 자바스크립트 파일 내에 작성하고 컴포넌트와 결합하는 방식을 말합니다. Styled-components는 이 패러다임을 활용하여 컴포넌트의 스타일을 자바스크립트와 함께 선언적으로 작성하고, 각 컴포넌트에 고유한 클래스 이름을 부여함으로써 스타일의 격리를 달성합니다.
ES6의 태그된 템플릿 리터럴을 사용하여 스타일을 적용합니다.import styled from 'styled-components';
// Styled-component를 사용하여 스타일링된 버튼 컴포넌트
const StyledButton = styled.button`
background-color: ${props => props.primary ? 'navy' : 'white'};
color: ${props => props.primary ? 'white' : 'navy'};
padding: 10px 20px;
border: none;
border-radius: 5px;
margin: 5px;
cursor: pointer;
&:hover {
background-color: ${props => props.primary ? 'blue' : 'lightgray'};
}
`;
export default function Button({ primary, label }) {
return <StyledButton primary={primary}>{label}</StyledButton>;
}
Styled-components를 사용하면 위 예시 코드처럼 컴포넌트와 스타일이 한 파일 안에서 관리됩니다. 이처럼 JS 파일 안에 CSS 코드가 있는 형식을 CSS-in-JS라고 부릅니다.
또한, props를 이용하여 동적으로 스타일을 변경할 수 있습니다.
그리고 또 한가지 특이점이라면 백틱(``)을 사용한 템플릿 리터럴 방식으로 CSS를 작성한다는 특징이 있습니다.

CSS Module은 전통적인 CSS 파일을 사용하지만, 빌드 시 고유한 이름을 가진 클래스를 생성하여 스타일의 격리를 제공하는 방식입니다. React 프로젝트를 생성할 때 일반적으로 사용되는 create-react-app은 기본적으로 CSS Module을 지원합니다.
CSS Module을 사용하면, 스타일 시트의 클래스 이름이 로컬 스코프로 제한되어, 다른 컴포넌트의 같은 이름의 클래스와 충돌하지 않습니다.
.module.css 확장자를 가진 파일로 작성합니다.import하여 사용하고, 각 클래스를 객체의 프로퍼티처럼 참조합니다./* Button.module.css */
.button {
background-color: blue;
color: white;
}
// Button.js
import React from 'react';
import styles from './Button.module.css';
const Button = () => <button className={styles.button}>Click me</button>;
export default Button;
CSS 모듈을 사용하려면, 다음과 같은 방법으로 CSS 파일을 작성하고 컴포넌트에서 import하면 됩니다.
CSS 모듈 파일 생성
[name].module.css 형식으로 지정합니다.CSS 클래스 정의
리액트 컴포넌트에서 사용
Styled-components는 JS 파일 내부에 스타일을 포함하지만, CSS Module은 별도의 CSS 파일을 사용합니다.Styled-components는 컴포넌트를 생성하여 스타일을 적용하는 반면, CSS Module은 기존의 클래스 기반 방식을 따릅니다.CSS Module은 모듈 번들러가 필요하지만, Styled-components는 라이브러리 자체에서 필요한 기능을 제공합니다.Styled-components는 JS의 강력한 기능을 활용하여 보다 동적인 스타일링이 가능합니다.