2026-02-15
프론트엔드 스타일링 방식
스타일링 종류
- 전통적인 CSS 방식
- 일반 CSS (인라인/내부/외부)
- Sass / SCSS (전처리기)
- Less
- 모듈화된 CSS 방식
- CSS Modules
- BEM 방식
- CSS-in-JS
- styled-components
- Emotion
- JSS
- CSS 프레임워크
- Tailwind CSS (유틸리티 퍼스트 프레임워크)
- Bootstrap
- Material UI
- Ant Design
- 전체 비교
- CSS → 가장 기본
- Sass → CSS를 더 잘 쓰기 위한 확장
- CSS Modules → CSS를 안전하게 쓰기 위한 방식
- CSS-in-JS → 컴포넌트 중심 스타일링
- Tailwind → 빠르고 일관된 UI 제작 | 구분 | 일반 CSS | Sass (SCSS) | CSS Modules | CSS-in-JS | Tailwind | | ————– | ——————— | ———————— | ———————– | ———————– | ——————– | | 기본 개념 | 순수 CSS 작성 | CSS 확장 문법 (전처리기) | 클래스 스코프 자동 분리 | JS 내부에서 스타일 정의 | 유틸리티 클래스 조합 | | 동작 시점 | 런타임 | 빌드 타임 | 빌드 타임 | 런타임 | 빌드 타임 | | 스코프 관리 | 전역 | 전역 | 자동 로컬 | 컴포넌트 단위 | 전역 유틸리티 | | 동적 스타일 | 제한적 | 제한적 | 제한적 | 매우 강함 | 제한적 | | 재사용성 | 낮음 | 높음 | 보통 | 높음 | 높음 | | 유지보수 | 구조 설계에 따라 다름 | 구조화 쉬움 | 충돌 적음 | 컴포넌트 중심 | 클래스 관리 필요 | | React 친화성 | 보통 | 보통 | 좋음 | 매우 좋음 | 좋음 | | 대표 사용 사례 | 작은 프로젝트 | 대규모 웹 | React 프로젝트 | SPA, 디자인 시스템 | 빠른 MVP 개발 |
Sass (CSS 전처리기)
Sass는 CSS 전처리기(Preprocessor) SCSS 문법으로 작성한 코드를 빌드 시점에 CSS로 변환 (런타임X)
기존 CSS 한계
- 변수 없음
- 반복 코드 많음
- 중첩 구조 표현 불가
- 재사용 어려움
- 유지보수 어려움
특징
- 빌드 타임 컴파일
- 변수 사용 가능
$primary-color: blue; button { color: $primary-color; } - 중첩(Nesting)
nav { ul { li { color: red; } } } - 믹스인(Mixin)
@mixin flex-center { display: flex; justify-content: center; align-items: center; } .box { @include flex-center; } - 상속
%button-style { padding: 10px; border-radius: 5px; } .btn { @extend %button-style; } - 연산 가능
$base: 10px; div { width: $base * 2; }
장점
- 대규모 프로젝트에서 구조화 용이
- 재사용성 높음
- 유지보수 좋음
- CSS 기반이라 러닝커브 낮음
단점
- 런타임 동적 스타일 처리 어려움
- 컴포넌트 단위 캡슐화는 직접 관리해야 함
CSS-in-JS
자바스크립트 파일 안에서 CSS를 작성하는 방식
- styled-components
- Emotion
- JSS
const Button = styled.button`
color: red;
`;
특징
- JS 로직과 스타일을 같은 파일에서 관리
- props 기반 동적 스타일링
- 런타임 스타일 생성
장점
- 컴포넌트 단위 캡슐화
- 조건부 스타일링 매우 쉬움
- 테마 관리 편리
- React와 궁합 좋음
단점
- 런타임 성능 오버헤드 가능성
- 번들 크기 증가
- 빌드 최적화 고려 필요
Tailwind CSS
유틸리티 퍼스트(Utility-first) CSS 프레임워크
<button class="bg-blue-500 text-white px-4 py-2 rounded"></button>
CSS를 직접 작성하지 않고 미리 정의된 클래스 조합으로 스타일 구성
특징
- CSS 파일 거의 안 만듦
- 클래스 조합 중심
- 디자인 토큰 기반
장점
- 빠른 개발 속도
- 일관된 디자인
- 유지보수 쉬움
- 번들 크기 최적화 가능 (Purge)
단점
- 클래스가 길어짐
- HTML 가독성 떨어질 수 있음
- 추상화 레벨 낮음
참고자료
- https://velog.io/@ziny02/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%EC%8A%A4%ED%84%B0%EB%94%94-React-%EC%8A%A4%ED%83%80%EC%9D%BC%EB%A7%81
- https://inpa.tistory.com/entry/SCSS-%F0%9F%92%8E-SassSCSS-%EB%9E%80-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%BB%B4%ED%8C%8C%EC%9D%BC
- https://voyage-dev.tistory.com/59
- https://uracle.blog/2025/05/02/css-vs-scss-%EC%99%9C-scss%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C/