Programming/Html n CSS

[CSS] CSS 방법론들의 특징, 장단점 (feat. Styled-Component)

감귤밭호지차 2023. 4. 18. 10:37

CDD 

Component Driven Development 의 약자로 부품 단위로 UI 컴포넌트를 만들어 나가는 개발 방법을 의미합니다. 

재사용할 수 있는 UI 컴포넌트를 여러 팀들이 공유를 하면 불필요한 업무 충돌 및 작업이 줄어들 수 있겠죠. 페이지 단위로 UI 개발이 이루어지는 것의 반대라고 할 수 있습니다. 

 

  • 디자인 체계화 & 디자이너와 효율적인 협업 ( Storybook을 통한 체계적인 관리 및 소통 )
  • 평행화 개발 (Parallelize development) : 다른 프로젝트에서도 쉽게 쓰고 공유 가능 
  • Decoupling : CSS, JS , I18n, UI 단위 테스트 등

 

Aribnb의  UI Storybook

참고 블로그 : [Methodology] CDD(Component Driven Development) - 계획(1/2)

 

 

CSS 방법론들의 특징 / 장단점

프로젝트의 규모와 복잡도가 점점 커져가며 함께 협업하는 팀원 수도 많아지면서 일관된 패턴이 없는 CSS 작성은 큰 문제가 되었습니다. 더불어 다양한 디바이스들의 등장으로 CSS  점점 복잡해지게 되었습니다. 이러한 문제점들을 해결하기 위해 등장한 것이 CSS 전처리기 입니다. 

 

CSS가 구조적으로 작성될 수 있게 도움을 주는 도구인 CSS 전처리기이지만 이 자체만으로는 웹 서버가 인지하지 못하기 때문에 각 CSS 전처리기에 맞는 Compiler을 사용해야 하며 컴파일을 통해 우리가 사용하는 CSS 문서로 변환하게 됩니다. 

 

문제는, 

CSS 전처리기를 이용해서 이전의 문제점들을 해결하기 위해 단순히 계층 구조를 만들어 내는 것에 의지하게 되었고 이는 CSS 파일의 용량을 과대하게 키우게 되었습니다. 

 

위의 CSS 전처리기 문제를 보완하기 위해 BEM / OOCSS / SMACSS 같은 CSS 방법론이 등장하였으나 이 세 방법론 모두 동일한 지향점을 가지고 있습니다. 

 

  • 코드의 재사용
  • 코드의 간결화(유지 보수 용이)
  • 코드의 확장성
  • 코드의 예측성(클래스 명으로 의미 예측)

 

하지만, 위 방법론도 해결하지 못한 캡슐화 불가로 인한 장황한 class 명의 문제를 보완하기 위해 CSS 도 컴포넌트 영역으로 불러오기 위한 CSS-In-JS 가 등장하였습니다. 대표적으로 Styled-Component가 있으며 기능적 / 상태를 가진 컴포넌트들로부터 UI 를 완전히 분리해 사용할 수 있는 아주 단순한 패턴을 제공합니다. 

 

※ 각종 CSS 방법론의 특징과 장단점

  특징 장점 딘잠
CSS 기본 스타일링 방법 - 일괄된 패턴을 갖기 어령움,
!important의 남용
SASS
(preprocessor)
프로그래밍 방법론을 도입하여, 
컴파일된 CSS 를 만들어내는 전처리기
변수/함수/상속 개념을 활용하여 
재사용 가능 
CSS의 구조화
전처리 과정이 필요.
디버깅의 어려움이 있음.
컴파일한 CSS 파일이 거대해짐
BEM CSS 클래스명 작성에 
일괄된 패턴을 강제하는 방법론
네이밍으로 문제 해결, 
전처리 과정 불필요
선택자의 이름이 장황하고,
클래스 목록이 너무 많아짐
Styled-Component
(Css - in -JS)
컴포넌트 기반으로 CSS 를 작성할 수 있게 도와주는 라이브러리 CSS를 컴포넌트 안으로 캡슐화, 
네이밍이나 최적화를 신경 쓸 필요가 없음
빠른 페이지 로드에 불리함

 

 

 

Styled Components 

위에서 나온 CSS-In-JS 의 대표적인 Styled Components에 대해 좀더 자세히 알아보도록 합시다. 

 

 

준비 사항 

# 터미널
npm install --save styled-components
#json 추가
{
   "resolutions" : {
        "styled-components" : " ^5 "
   }
}
# 파일
import styled from "styled-components"

 

 

전역 스타일 설정하기

전역에 미리 스타일을 설정하고 싶을 땐 Styled-Components의 createGlobalStyle 함수를 사용할 수 있습니다. 

 

# 전역 스타일 설정을 위해 styled-components 에서 createGlobalStyle 함수 불러오기
import
{ createGlobalStyle } from 'styled-components'

 

 

전역 스타일  <GlobalStyle> 컴포넌트를 최상위 컴포넌트에서 사용해주면 전역에 적용됩니다. 
//GlobalStyle.js

const GlobalStyle = createGlobalStyle `
  button {
      padding: 5px;
      margin: 2px;
      border-radius: 5px;
      }
`;​

 

이 파일을 App.js 파일의 return( ) 부분의 최상위 컴포넌트로 선언을 해주면 된다는 의미입니다. 

 

function App (){
  return (
    <>
      <GlobalStyle/>
      <Button> Button </Button>
    </>
  )
}