안녕하세요, 모락 프론트엔드팀의 위니입니다 😄
프로젝트를 시작하기 앞서, 모락 프론트엔드팀은 css in js 라이브러리 중 어떤 것을 선택할지 고민에 빠졌습니다.
다양한 라이브러리가 있지만 그중 styled-component
와 emotion
중 어떤 것을 사용할지 오랫동안 고민했고, 결론적으로는 emotion
으로 작업을 하고 있습니다 🥳
그렇다면 styled-component
과 비교했을 때 emotion
이 어떤 차이가 있었고, 결론적으로는 왜 emotion
을 선택했는지 정리해보도록 하겠습니다.
styled-componet
& emotion/style
정확한 비교대상은 styled-component
와 emotion/style
로 설정했습니다. emotion/style
방식은 무엇일까요?
emotion 사용방식은 크게 두가지(emotion/css
, emotion/styled
)로 나누어 볼 수 있습니다. 이 두가지를 비교해보자면 다음과 같습니다.
emotion/css
emotion/styled
styled-component
와 방식이 같습니다. 애초에 emotion
공식문서를 보면 emotion/styled
는 styled-component
의 방식에 큰 영감을 받아 만들어져있다고 되어있습니다.emotion/styled
가 styled-component
보다 npm 다운 수가 더 높네요!)
모락 프론트엔드 팀에서는 이 두가지의 방식 중, 스타일 컴포넌트를 생성하는 emotion/styled
의 이점을 더 크게 봤습니다.
따라서, styled-component
와 비교할 대상은 emotion/styled
로 결정했습니다.
+) 추가적으로 실제 emotion/css
방식으로 코드를 작성했을 때 인라인 방식으로 css를 작성하다보니 코드가 매우 늘어지고 지저분해짐을 느꼈어요 😅 즉, 가독성의 측면에서도 emotion/styled
이 우세하다고 판단했습니다.
라이브러리 번들 사이즈 사이트에서 비교한 결과, 결론은 용량은 매우 비슷합니다. (emotion이 1.1kB 더 작습니다.)
styled-component
(33.5kB)emotion/style
(21.2kB + 11.2kB = 32.4kB)emotion/styled
쓴다고 가정하면, 보통 두가지 라이브러리(emotion/styled
와 emotion-react
를 함께 사용합니다. 따라서 두가지 라이브러리를 더한 용량을 측정합니다. emotion 라이브러리 종류는 여기서 확인하세요!)결론적으로 유의미한 속도 차이가 있지 않습니다.
emotion
이 아주 조금 더 빠릅니다. styled-component
v5에서는 styled-component
가 더 빠르다는 결과가 있습니다. 성능의 용량과 속도 면에서, 유의미한 차이가 없습니다.
styled-component
사용emotion/style
이 styled-components
의 영감을 받아서 만들어진 라이브러리이기 때문에 더 잘 만들지 않았을까라는 살짝의 뇌피셜도 있었습니다. emotion
사용styled-component
보다 더 다양한 기능이 있기 때문에, 확장성에 좋습니다.emotion
은 emotion/style
을 통해 styled-component
방식을 그대로 사용할 수도 있지만 다른 방식을 통해 더 다양하게 사용할 수도 있어서 확장성이 더 뛰어납니다. emotion/styled
를 사용한다!모락 프론트엔드 팀에서는 스타일 라이브러리를 정하기 위한 두근거리는 투표를 진행했습니다.
결론적으로는... emotion의 승리! 🥳 emotion을 선택한 근거는 다음과 같습니다.
emotion/css
방식을 추가 적용할 가능성이 있다고 생각하여, 더 많은 기능을 제공하는 emotion
을 선택했습니다. emotion/style
이 styled-components
의 영감을 받아서 만들어진 라이브러리이기 때문에 더 잘 만들지 않았을까라는 살짝의 뇌피셜도 있었습니다 😄 (선택 당시에는 이런 생각을 했었는데, 사용해보니 별 차이가 없고, 거의 똑같습니다.)지금까지 모락 프론트엔드 팀이 css in js 라이브러리로 emotion
을 사용한 이유를 styled-component
와 비교하여 설명드렸습니다.
프로젝트 과정에서 emotion
을 사용하면서 느끼는 장단점이 있다면, 계속해서 업데이트하도록 하겠습니다. 감사합니다 :)
참고 자료
안녕하세요.
우연히 글 보게되었는데 정리 잘 해주셔서 너무 잘 읽었습니다.
혹시 emotion.js의 styled 방식과 css 방식은 어떠한 상황에서 구별해 사용하는지도 알 수 있을까요?
어떨때는 우아한테크코스 코드를 몇 개 보다보니 어떤 상황에서는 styled로 컴포넌트를 설정해서 사용하고, 어떤 상황에서는 css로 css 속성에 적용하는 모습이 보이더라구요.
혹시 알고계신다면 여쭤봅니다:)