오늘은
Tailwind CSS
를 알아보다가 궁금해진PostCSS
가 무엇인지에 대해 알아보는 시간을 가져보도록 하겠다 :)
CSS
는 브라우저 호환성, 벤더 접두사 등의 문제로 어려움을 겪어왔다.
이를 극복하기 위해 루비언어로 만든Sass/SCSS
라는 스타일 언어가 탄생했고 많은 개발자들이 사용하기 시작했다.
그래서 대부분의CSS
프레임워크는Sass/SCSS
로 만들어져왔다.
그러던 2013년,Sass/SCSS
를 이용하지 않는"모듈화 된 CSS"
라는 슬로건을 내세운PostCSS
가 탄생했다.
javascript
기반의 플러그인
을 이용해 CSS
를 변환시키는 툴
다양한 플러그인
과, 플러그인
을 추가할 수 있는 환경을 제공
마치 javascript
의 babel
같은 느낌
자세히 말하자면 CSS
파일을 AST(Abstract Syntax Tree)
로 변환하여 각 플러그인
들에게 제공
PostCSS
는 CSS
전처리기 중 하나로 알려져 있는데, 정확히는 동작 순서에 따라 CSS
후처리기가 맞음
그래서, Scss
, Stylus
, Less
같은 전처리기와 함께 사용할 수 있음
Webpack
이 1차로 만든 CSS
를 가공하여 최종 CSS
를 생성
: CSS
파일 작성 → 렌더링 → 플러그인
을 사용하여 변경
🧐 그렇다면
PostCSS
의 장점이 뭘까 한번 알아보자!
위에서 말했듯이 필요한 플러그인을 선택하여 프로젝트에 추가할 수 있음
따라서 개발자들이 프로젝트의 요구 사항에 맞게 플러그인을 선택하여 CSS
처리를 쉽게 구현할 수 있음
PostCSS
는 빌드 도구 (ex. Webpack
, Gulp
)와 통합하여 사용 가능함
따라서 개발자들은 프로젝트의 빌드 과정에 PostCSS
를 통합하여 자동으로 CSS
변환을 수행할 수 있음
BEM
이란?
: CSS
클래스 이름을 위한 명명 규칙 표준
ex) photo
라는 클래스의 하위 클래스는 photo__img
, photo__caption
BEM
단점
: 클래스명이 복잡해지고 길어짐
❗️ But ❗️
PostCSS
를 사용하면 같은 이름의 클래스명을 사용해도 자동으로 PostCSS
가 BEM
명명 규칙을 만들어 구분해줌CSS
에서는 할 수 없었던 컬러와 사이즈를 변수화 시켜 사용할 수 있어 유지 보수에 용이미래의 문법을 지원하는 플러그인을 통해 브라우저의 지원을 기다리지 않아도 됨
예를 들어, CSS Next
를 통해 아직 표준으로 승인되지 않은 CSS
문법을 사용할 수 있으며, PostCSS
가 해당 문법을 현재 브라우저에 지원하는 문법으로 변환해줌
CSS
파일 크기를 축소, 자동으로 벤더 접두사 추가 등의 작업을 수행해 성능을 향상시킬 수 있음하지만 모든 것에는 장점이 있으면 단점이 있듯이
PostCSS
에도 단점은 있었다.
아래를 보자!
PostCSS
는 초기 설정 및 플러그인 관리 등이 필요하기 때문에 복잡하다는 생각에 진입 장벽이 높은 편postcss.config.js
파일에 플러그인들을 하나씩 기재하며 적용해야 하는데, 이 때 플러그인의 순서가 매우 중요함 (위 → 아래)
순서를 잘못 설정하면 일부 기능이 동작하지 않을 수도 있음
대부분의 경우 Readme.md
에 순서가 나와있으니 참고할 것
이렇게
PostCSS
에 대해 알아보고 나니PostCSS
를 쓴다는 말은 각플러그인
을 사용한다는 말과 같은 의미란 걸 알 수 있었다 😀
현재 수백개의PostCSS 플러그인
들이 존재하는데 이 중에서 많이 사용되고, 유용한플러그인
몇 개를 소개해 보겠다 :)
PostCSS
의 가장 유명한 플러그인
벤더 접두사(Vendor Prefix)
(ex. -webkit-
, -moz-
, -ms-
, -o-
)를 자동으로 추가
다양한 브라우저
에 호환되는 CSS
작성 가능
예
// Autoprefixer 적용 전
a {
display: flex;
}
// Autoprefixer 적용 후
a {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex
}
위 예처럼 개발자는
Autoprefixer 적용 전
의 코드를 입력하기만 해도Autoprefixer
를 적용하면벤더 접두사
가 붙어있는Autoprefixer 적용 후
의 코드로 만들어준다!
미래의 CSS
문법을 사용할 수 있게 해주는 플러그인
최신 CSS
기능(ex. 변수
, 그리드 레이아웃
등)을 사용할 때 브라우저
의 지원을 기다릴 필요 없게 현재 지원하는 문법으로 변환해 줌
@import
구문으로 CSS
파일 내에서 다른 CSS
파일을 포함할 수 있게 해주는 플러그인
이를 통해 CSS
파일을 모듈화할 수 있음
CSS
파일을 최적화 해주는 플러그인Tailwind CSS
를 공부하던 중 Tailwind CSS
를 설치할 때 PostCSS
가 등장하길래 엥? PostCSS
는 뭐지? 하는 생각이 들었다.
그래서 간단하게나마 뭔지는 알고 넘어가자라는 생각에 검색을 해보기 시작했다.
하지만 여태껏 포스팅했던 다른 주제들과는 다르게 정확한 개념을 알기가 어려웠다.
검색하는 내내 온통 의문 투성이였다. 또 어디서는 CSS
전처리기라고 하고 어디서는 후처리기라고 하기까지.. 혼란스러웠다.
며칠을 검색해 보고 나서야 완벽하게는 아니지만 "아, PostCSS
가 이런 거구나!" 알 수 있게 되었다.
왜 Tailwind CSS
를 사용할 때 PostCSS
도 함께 설치해서 쓰면 좋다고 했는지 알 수 있게 되어 좋았다.