개발스토리

CSS-in-JS가 더 좋을까? 전통적인 CSS와 비교해보자!

[개발팀] 설화 매니저

웹 개발에서 스타일링을 적용하는 방법은 다양합니다. 특히, CSS-in-JS와 전통적인 CSS 방식 중 어떤 것을 선택해야 할지 고민되시나요? 각 방식의 장단점을 비교해보고, 상황에 맞는 최적의 선택을 찾아보세요!

안녕하세요! 이더블케이 설화 매니저입니다👋

 

프론트엔드 개발을 하다 보면 웹사이트의 디자인을 적용하는 방법이 여러 가지라는 것을 알게 됩니다. 

그중에서도 "CSS-in-JS"와 "전통적인 CSS" 방식은 많은 개발자들이 선택하는 대표적인 방법인데요. 

각각 어떤 방식인지, 어떤 장점단점이 있는지, 그리고 어떤 상황에서 어떤 방법을 선택하면 좋을지 쉽게 설명해 볼게요.

 

 

 

🤔 CSS-in-JS란?

 

CSS-in-JS는 말 그대로 "JavaScript 안에서 CSS를 작성하는 방식"입니다. 

즉, 스타일을 별도의 CSS 파일이 아니라 JavaScript 코드 안에서 작성하는 것이죠. 

대표적인 CSS-in-JS 라이브러리로는 Styled-Components, Emotion, JSS등이 있습니다.

 

CSS-in-JS의 장점


 컴포넌트와 스타일을 함께 관리할 수 있음


  • 웹페이지의 구성 요소(컴포넌트)와 스타일을 하나의 파일 안에서 함께 작성할 수 있어 유지보수가 쉽습니다.

  • 스타일이 특정 컴포넌트에 종속되므로 다른 곳에서 스타일이 섞이는 일이 줄어듭니다.


 동적으로 스타일을 변경하기 쉬움


  • JavaScript 변수를 활용해 색상, 크기, 여백 등의 값을 변경할 수 있습니다.

  • 예를 들어, 버튼의 색상을 사용자 설정에 맞게 변경하는 것이 가능합니다.


 사용하지 않는 스타일이 자동 정리됨


  • 전통적인 CSS 방식에서는 필요 없는 스타일이 파일에 남아 있는 경우가 많은데, CSS-in-JS는 사용하지 않는 스타일을 자동으로 제거하여 코드 최적화가 가능합니다.



CSS-in-JS의 단점


 초기 로딩 속도가 느릴 수 있음


  • 스타일이 JavaScript 코드 안에서 실행되므로, 브라우저가 화면을 표시하는 데 시간이 조금 더 걸릴 수 있습니다.


 클래스 이름이 직관적이지 않음


  • CSS-in-JS에서는 자동으로 클래스 이름이 생성되는데, 난해한 이름이 될 수 있어 디버깅이 어렵습니다.


 브라우저에서 스타일을 적용하는 데 시간이 더 걸릴 수 있음


  • CSS 파일을 미리 읽어오는 전통적인 방식보다, JavaScript가 실행되면서 스타일이 적용되는 방식이기 때문에 성능에 부담이 될 수 있습니다.






🤔 전통적인 CSS 방식이란?

 

전통적인 CSS 방식은 일반 CSS 파일을 만들어 스타일을 작성하는 방법입니다. 

CSS, SCSS(SASS), LESS, CSS Modules 등 다양한 방식이 있지만, 공통점은 모두 "별도의 CSS 파일을 만들어 적용한다"는 점입니다.

 

전통적인 CSS의 장점


 성능이 더 좋음


  • CSS 파일은 브라우저가 미리 다운로드하고 캐싱할 수 있어 로딩 속도가 빠릅니다.

  • JavaScript와 분리되어 있기 때문에 브라우저가 스타일을 빠르게 적용할 수 있습니다.


 테마 변경이 용이함


  • CSS 변수(--primary-color)를 활용하여 전체적인 스타일을 쉽게 변경할 수 있습니다.

  • 예를 들어, 다크 모드와 라이트 모드를 쉽게 전환할 수 있습니다.


 많은 개발자들에게 익숙함


  • 대부분의 개발자는 CSS를 기본적으로 학습하기 때문에 새로운 개념을 익히지 않아도 됩니다.

  • 기존 프로젝트와의 호환성이 뛰어납니다.



전통적인 CSS의 단점


 전역 네임스페이스 문제


  • 모든 스타일이 하나의 공간에서 관리되기 때문에, 스타일이 충돌할 가능성이 있습니다.

  • 이를 방지하려면 BEM, OOCSS와 같은 네이밍 규칙을 엄격하게 따라야 합니다.


 동적으로 스타일을 변경하는 것이 어려움


  • JavaScript와 연동하려면 별도의 CSS 변수나 클래스를 사용해야 하며, 코드가 복잡해질 수 있습니다.


 대규모 프로젝트에서 유지보수가 어려울 수 있음


  • 스타일이 많아질수록 관리가 어려워지고, 중복된 코드가 생길 가능성이 높아집니다.






🤔 어떤 방식을 선택해야 할까? 


 기준

 CSS-in-JS

 전통적인 CSS

 성능

 Javascript 실행 부담이 있음

 CSS 파일 캐싱으로 성능 우수

 유지보수

 컴포넌트 단위 스타일 관리

 스타일 충돌 가능성 존재

 동적 스타일링

 props 활용 가능

 제한적 적용 가능

 사용 용도

 React, Vue 등의 컴포넌트 기반 프로젝트

 대규모 프로젝트, 정적 사이트

 


💡 추천 사용 사례


 CSS-in-JS가 유리한 경우


  • React, Vue 등 컴포넌트 기반의 UI 개발을 할 때

  • 스타일이 동적으로 변경되는 애플리케이션

  • 전역 스타일 충돌을 방지하고 싶은 경우


 전통적인 CSS가 유리한 경우


  • 정적인 웹사이트나 성능 최적화가 중요한 프로젝트

  • CSS 파일을 별도로 관리해야 하는 대규모 프로젝트

  • 스타일 가이드가 명확한 디자인 시스템 구축 시

 

 

 

 

 

✨ 정리

 

CSS-in-JS와 전통적인 CSS 방식은 각각의 장점과 단점이 있으며, 프로젝트의 특성에 따라 적절한 방법을 선택해야 합니다.

👉 컴포넌트 중심 개발을 한다면? CSS-in-JS가 더 편리할 수 있습니다. 

👉 성능이 중요한 웹사이트를 만든다면? → 전통적인 CSS 방식이 더 적합합니다.

 

어떤 방식을 선택하든, 중요한 것은 코드의 유지보수성성능을 고려하는 것입니다. 

이더블케이는 프로젝트의 특성에 맞춰 최적의 스타일링 방식을 선택하여 적용하고 있습니다.😊