SWC
Speedy Web Compiler
Rust 기반 JS/TS 컴파일러. Babel 대비 20배 이상 빠름.
Speedy Web Compiler
Rust 기반 JS/TS 컴파일러. Babel 대비 20배 이상 빠름.
SWC(Speedy Web Compiler)는 Rust로 작성된 초고속 JavaScript/TypeScript 컴파일러입니다. Babel과 동일한 기능(트랜스파일링, 압축, 번들링)을 제공하면서도 싱글 스레드에서 20배, 멀티코어에서 70배 이상 빠른 성능을 자랑합니다.
SWC는 Next.js 12부터 기본 컴파일러로 채택되었으며, Vite, Parcel 등 주요 빌드 도구에서도 지원됩니다. Rust의 저수준 최적화와 효율적인 메모리 관리 덕분에 대규모 프로젝트에서도 빠른 빌드 시간을 유지합니다.
SWC의 핵심 기능으로는 ES6+ 트랜스파일링, TypeScript/JSX 변환, 코드 압축(minification), 그리고 플러그인 시스템이 있습니다. Babel 플러그인을 대체하는 SWC 플러그인은 Wasm으로 작성하여 크로스 플랫폼 호환성을 제공합니다.
Turbopack은 SWC를 기반으로 한 차세대 번들러로, Webpack 대비 700배 빠른 업데이트 속도를 목표로 합니다. 대규모 코드베이스에서 개발 서버 시작 시간과 HMR 속도를 획기적으로 개선합니다.
// .swcrc 설정 파일
{
"$schema": "https://json.schemastore.org/swcrc",
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": true,
"decorators": true,
"dynamicImport": true
},
"transform": {
"react": {
"runtime": "automatic",
"importSource": "@emotion/react"
},
"legacyDecorator": true,
"decoratorMetadata": true
},
"target": "es2020",
"loose": false,
"minify": {
"compress": {
"unused": true,
"dead_code": true
},
"mangle": true
}
},
"module": {
"type": "es6",
"strict": true
},
"minify": true,
"sourceMaps": true
}
// next.config.js - SWC 커스텀 설정
/** @type {import('next').NextConfig} */
const nextConfig = {
compiler: {
// Emotion 지원
emotion: true,
// Styled Components 지원
styledComponents: true,
// 프로덕션에서 React DevTools 제거
reactRemoveProperties: process.env.NODE_ENV === 'production',
// console.log 제거
removeConsole: process.env.NODE_ENV === 'production'
? { exclude: ['error', 'warn'] }
: false,
},
experimental: {
// Turbopack 사용 (dev 모드)
turbo: {
rules: {
'*.svg': {
loaders: ['@svgr/webpack'],
as: '*.js',
},
},
},
},
};
module.exports = nextConfig;
// 명령줄에서 SWC 직접 사용
// npx swc src -d dist --source-maps --minify
기술 미팅에서:
"CI 빌드 시간이 8분이나 걸리는데, Babel에서 SWC로 바꾸면 2분 안에 끝날 거예요. Next.js 12로 업그레이드하면 자동으로 SWC 쓰게 됩니다."
기술 면접에서:
"SWC가 Babel보다 빠른 이유는요?" - "Rust로 작성되어 네이티브 바이너리로 실행되기 때문입니다. JavaScript 런타임 오버헤드가 없고, Rust의 zero-cost abstraction으로 최적화됩니다."
코드 리뷰에서:
"이 Babel 플러그인 SWC에서 지원 안 되면 어떡하죠?" - ".swcrc에서 못 하면 next.config.js의 webpack 설정으로 Babel loader 추가할 수 있어요. 근데 대부분 SWC 빌트인으로 대체 가능합니다."