나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2025-02-25 22:22:27

SWC


파일:다른 뜻 아이콘.svg  
#!if 넘어옴1 != null
'''SWC'''{{{#!if 넘어옴2 != null
, ''''''}}}{{{#!if 넘어옴3 != null
, ''''''}}}{{{#!if 넘어옴4 != null
, ''''''}}}{{{#!if 넘어옴5 != null
, ''''''}}}{{{#!if 넘어옴6 != null
, ''''''}}}{{{#!if 넘어옴7 != null
, ''''''}}}{{{#!if 넘어옴8 != null
, ''''''}}}{{{#!if 넘어옴9 != null
, ''''''}}}{{{#!if 넘어옴10 != null
, ''''''}}}은(는) 여기로 연결됩니다. 
#!if 설명 == null && 리스트 == null
{{{#!if 설명1 == null
다른 뜻에 대한 내용은 아래 문서를}}}{{{#!if 설명1 != null
{{{#!html 대한민국 육군의 Special Warfare Command}}}에 대한 내용은 [[특수전사령부]] 문서{{{#!if (문단1 == null) == (앵커1 == null)
를}}}{{{#!if 문단1 != null & 앵커1 == null
의 [[특수전사령부#s-|]]번 문단을}}}{{{#!if 문단1 == null & 앵커1 != null
의 [[특수전사령부#|]] 부분을}}}}}}{{{#!if 설명2 != null
, {{{#!html 시계 기업}}}에 대한 내용은 [[SWC(기업)]] 문서{{{#!if (문단2 == null) == (앵커2 == null)
를}}}{{{#!if 문단2 != null & 앵커2 == null
의 [[SWC(기업)#s-|]]번 문단을}}}{{{#!if 문단2 == null & 앵커2 != null
의 [[SWC(기업)#|]] 부분을}}}}}}{{{#!if 설명3 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단3 == null) == (앵커3 == null)
를}}}{{{#!if 문단3 != null & 앵커3 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단3 == null & 앵커3 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명4 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단4 == null) == (앵커4 == null)
를}}}{{{#!if 문단4 != null & 앵커4 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단4 == null & 앵커4 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명5 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단5 == null) == (앵커5 == null)
를}}}{{{#!if 문단5 != null & 앵커5 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단5 == null & 앵커5 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명6 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단6 == null) == (앵커6 == null)
를}}}{{{#!if 문단6 != null & 앵커6 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단6 == null & 앵커6 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명7 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단7 == null) == (앵커7 == null)
를}}}{{{#!if 문단7 != null & 앵커7 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단7 == null & 앵커7 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명8 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단8 == null) == (앵커8 == null)
를}}}{{{#!if 문단8 != null & 앵커8 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단8 == null & 앵커8 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명9 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단9 == null) == (앵커9 == null)
를}}}{{{#!if 문단9 != null & 앵커9 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단9 == null & 앵커9 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명10 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단10 == null) == (앵커10 == null)
를}}}{{{#!if 문단10 != null & 앵커10 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단10 == null & 앵커10 != null
의 [[#|]] 부분을}}}}}}
#!if 설명 == null
{{{#!if 리스트 != null
다른 뜻에 대한 내용은 아래 문서를}}} 참고하십시오.

#!if 리스트 != null
{{{#!if 문서명1 != null
 * {{{#!if 설명1 != null
대한민국 육군의 Special Warfare Command: }}}[[특수전사령부]] {{{#!if 문단1 != null & 앵커1 == null
문서의 [[특수전사령부#s-|]]번 문단}}}{{{#!if 문단1 == null & 앵커1 != null
문서의 [[특수전사령부#|]] 부분}}}}}}{{{#!if 문서명2 != null
 * {{{#!if 설명2 != null
시계 기업: }}}[[SWC(기업)]] {{{#!if 문단2 != null & 앵커2 == null
문서의 [[SWC(기업)#s-|]]번 문단}}}{{{#!if 문단2 == null & 앵커2 != null
문서의 [[SWC(기업)#|]] 부분}}}}}}{{{#!if 문서명3 != null
 * {{{#!if 설명3 != null
: }}}[[]] {{{#!if 문단3 != null & 앵커3 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단3 == null & 앵커3 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명4 != null
 * {{{#!if 설명4 != null
: }}}[[]] {{{#!if 문단4 != null & 앵커4 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단4 == null & 앵커4 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명5 != null
 * {{{#!if 설명5 != null
: }}}[[]] {{{#!if 문단5 != null & 앵커5 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단5 == null & 앵커5 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명6 != null
 * {{{#!if 설명6 != null
: }}}[[]] {{{#!if 문단6 != null & 앵커6 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단6 == null & 앵커6 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명7 != null
 * {{{#!if 설명7 != null
: }}}[[]] {{{#!if 문단7 != null & 앵커7 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단7 == null & 앵커7 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명8 != null
 * {{{#!if 설명8 != null
: }}}[[]] {{{#!if 문단8 != null & 앵커8 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단8 == null & 앵커8 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명9 != null
 * {{{#!if 설명9 != null
: }}}[[]] {{{#!if 문단9 != null & 앵커9 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단9 == null & 앵커9 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명10 != null
 * {{{#!if 설명10 != null
: }}}[[]] {{{#!if 문단10 != null & 앵커10 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단10 == null & 앵커10 != null
문서의 [[#|]] 부분}}}}}}

<colbgcolor=#fff,#1f2023><colcolor=#F0AC3A> SWC
파일:swc.svg
종류 컴파일러
라이선스 Apache License
개발 강동윤
언어 Rust
버전 v1.11.1
파일:홈페이지 아이콘.svg | 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg | 파일:npm, lnc. n-logo.png | 파일:cargo.rs.png
1. 개요2. 성능3. 기능
3.1. 트랜스파일링
3.1.1. TypeScript 컴파일
3.2. Minification3.3. 번들링(swcpack)
4. STC5. swc를 사용하는 기업 또는 소프트웨어6. 기타

1. 개요

FEconf 2021에 올라온 개발자의 SWC소개 세션

Rust로 짜여진 컴파일러로, 현재는 JavaScript/TypeScript 트랜스파일링을 주로 담당하고 있다.[1]

속도와 성능 개선에 초점을 맞추고 있으며[2], 기존의 Babel 등의 트랜스파일러를 압도적으로 뛰어넘는 성능을 보여준다.

Turbopack에서 이 기술을 기반하여, 현재 담당 중인 파싱, 트랜스파일링, 미니파일링 기능에 집중하고, 번들링 등의 남은 주요 기능은 Turbopack에 이관한다.

2. 성능

기존의 Babel 등 JS로 작성된 툴링 대비 압도적으로 빠르며, 성능을 목적으로 하고 있는 또 다른 번들러인 ESBuild[3]와 비슷하거나 뛰어넘는 성능을 보여준다.

자세한 내용은 벤치마크 문서 참고.

3. 기능

기존 js생태계의 여러 툴을 swc 파서를 사용해 개선하는 것을 주 목표로 하고 있지만, 현재까지는 아직 불안정한 기능이 많다.

3.1. 트랜스파일링

기존의 Babel의 역할을 대체한다. 트랜스파일러는 최신 js 문법으로 작성된 코드를 파싱해 적절한 폴리필(polyfill)과 기존 코드를 섞어 하위 호환성을 달성한다. 기존에 이를 목표로 js생태계에 Babel이 나왔지만 순수 js로 만들어진 성능상 한계를 극복하는 것이 swc의 목표로 보인다. 단순히 ES버전만 변경하는 게 아니라 tsc처럼 타겟 모듈 시스템(AMD, CommonJS, ESM 등)도 재지정할 수 있다.

3.1.1. TypeScript 컴파일

트랜스파일링과 동시에 TypeScript컴파일 또한 지원하며, 타입 체킹을 수행하지 않기 때문에 엄밀히 말하면 tsc를 완전히 대체하지는 않는다.

cli를 사용한다면 다음 명령어는 아래와 같다.
#!syntax sh
npx tsc source.ts --outfile dest.js
SWC로는 다음과 같다.
#!syntax sh
npx swc source.ts --out-file dest.js
폴더 전체를 컴파일하려면 다음과 같이 할 수 있다.
#!syntax sh
npx swc ./src -d ./dest
또한 .swcrc파일이 없다면 tsconfig.json설정을 부분적으로 읽는다.

3.2. Minification

1.2.67버전부터 소스 압축(minification) 및 죽은 코드 제거(dead code elimination) 기능을 지원한다. terser 대체를 목표로 하고 있으며 벤치마크 또한 terser 기준으로 되어 있다.

3.3. 번들링(swcpack[4])

esbuild나 webpack과 같이 코드베이스를 번들링 할 수 있다. 또한 기존의 컴파일 옵션 파일과는 별도의 s(wc)pack.config.js를 사용하며, 아직 안정화되지 않았다.

번들링 기능을 Turbopack에 역량을 집중하고 있기 때문에 해당 기능은 Turbopack 을 통해 사용할 가능성이 생겼다.

4. STC

SWC에는 타입 체커 기능이 존재하지 않기 때문에 TypeScript 파일을 넣으면 단지 JavaScript로 컴파일만 할 뿐 타입 체킹은 수행하지 못한다. 따라서 SWC로는 컴파일만 담당하고 tsc CLI를 실행시켜(tsc --watch --noEmit) 타입체킹을 별도로 수행해야 했다.

이를 보완하기 위해 타입 체커로 비공개 프로젝트로 STC를 개발한다고 밝혔으며, 완성된다면 오픈소스가 아닌 상용 소프트웨어로 출시될 예정이었다. # 당시 구 버전 사이트

2022년 1월 26일 Rust가 아닌 Go를 사용해 tsc를 포팅할 계획임을 밝혔다.# 또한 개발이 끝나면 오픈소스로 전환할 예정이라고 한다.

추후 다시 러스트 버전의 타입체커로 돌아갈 가능성이 생겼다. #

2022년 10월 27일 러스트 버전이 오픈 소스로 공개되었다. # GitHub GeekNews 공개 후 6시간도 채 되지 않아 500스타를 받았다.

개발이 중단되었다. #

5. swc를 사용하는 기업 또는 소프트웨어

6. 기타


[1] CSS 처리 등 다양한 기능이 계획되어 있거나 개발이 진행되고 있다.[2] 단, 정의된 스펙대로 구현하는 것과 재사용될 수 있는 공용 패키지를 만드는 것을 중요시하며, 따라서 ESBuild나 Bun 등과는 달리 속도 향상을 위한 꼼수를 부리지 않는다.[3] ESBuild는 번들러 기능이 메인이기 때문에 swc와 제대로 된 비교를 하기는 힘들다. swc 측에서도 swcpack이라는 번들러가 존재하나, 아직은 기능이나 안정성 측면에서 많이 부실하다. 이외에도 ESBuild는 ES5 이하 버전으로의 트랜스파일링을 지원하지 않는 등, 일대일로 비교해볼 수 있는 대상은 아니다.[4] 현재는 spack이라는 이름을 사용 중이지만 2버전 이후로는 swcpack으로 불릴 예정이다.[5] 프로젝트 리드 개발자와 몇몇 주요 컨트리뷰터가 소속되어 있는 회사이기도 하다.[6] 그 동안은 Docusaurus 기반이었다.

분류