노션 블로그를 작업하던 중 빌드를 하면서 문득 콘솔에 보이는 메시지에 대해 눈이 가서 검색을 해봤다.
번역을 해보니 .babelrc 파일로 인해 swc 를 사용하지 않고 babel 을 통해 트랜트파일링을 한다는 의미였다.
여기서 swc 가 어떤 것인지에 대해 궁금증이 생겼고 기본적인 개념과 실제로 블로그 프로젝트에 적용한 결과를 정리해보려고 한다.
특징
- SWC (Speedy Web Compiler)
- Rust 기반으로 작성되었다.
- next.js 환경에서 기본적으로 제공된다.
- 추후 spack 라는 이름의 번들러를 제공할 예정이다.
- 단일 스레드에서 babel 보다 약 20배 빠르다. (공식 문서 참고)
적용
해당 과정은 babel 을 사용하는 next.js 프로젝트를 기준으로 작성되었습니다.
- 기존에 존재하던 .babelrc 파일을 제거해준다.
- 기존에 babel 을 통해 적용했던 플러그인을 next.config.js 에 적용해준다.
styled components 처럼 next.config.js 에 적용할 수 있는 플러그인은 해당 링크에서 확인할 수 있다.
이런 식으로 swc 를 적용하고 빌드를 하면 babel 이 아닌 swc 가 적용되었기 때문에 맨 처음에 콘솔에 보였던 메시지가 제거된 것을 확인할 수 있다.
빌드 타임 비교
실제로 운영 중인 블로그 프로젝트에서 babel 과 swc 의 빌드 시간을 측정해봤다.
ㅤ | babel | swc |
1차 | 36.98s | 27.55s |
2차 | 34.75s | 28.80s |
3차 | 39.00s | 30.77s |
4차 | 37.91s | 34.06s |
5차 | 33.74s | 30.57s |
큰 프로젝트가 아니다 보니 엄청난 차이는 느끼지 못했지만, 평균적으로 5초 이상 단축된 것을 확인할 수 있었다.
지금까지 트랜스파일러라고 하면 babel 만 생각해서 프로젝트에 적용했었는데 개발 중인 프로젝트에 swc 와 호환이 가능하다면 도입해보는 것도 좋은 방법이라고 생각한다. 그래서 나는 운영 중인 블로그에 swc 를 적용하였고 빨라진 빌드 속도에 만족하고 있다.
참고