TypeScript
TypeScript 7: 네이티브 시대의 시작
TypeScript 7이 정식 출시되었습니다.
이번 업데이트의 핵심은 새로운 문법보다 컴파일러와 언어 서버의 기반을 JavaScript에서 Go 네이티브 코드로 옮긴 것입니다. 기존 컴파일러의 구조와 동작을 최대한 유지하면서 네이티브 실행 속도, 공유 메모리 기반 멀티스레딩, 병렬 처리를 더해 대규모 프로젝트의 개발 경험을 크게 개선했습니다.
TypeScript 팀이 공개한 주요 오픈소스 프로젝트의 전체 빌드 결과에서는 TypeScript 6 대비 약 7.7배에서 11.9배의 속도 향상이 나타났습니다.
10배 빨라진 네이티브 컴파일러
TypeScript 7은 파싱, 타입 검사, 코드 출력 등 빌드의 여러 단계를 병렬로 처리합니다. Microsoft가 공개한 측정 결과에서 VS Code는 125.7초에서 10.6초, Sentry는 139.8초에서 15.7초로 빌드 시간이 줄었습니다.
메모리 사용량도 함께 개선되었습니다. 테스트한 프로젝트에 따라 전체 빌드 동안 사용한 메모리가 약 6%에서 26% 감소했습니다. 단순히 CI가 빨라지는 데 그치지 않고 에디터에서 프로젝트를 열고, 자동 완성과 참조 찾기, 진단 결과를 받는 과정도 훨씬 짧아집니다.
설치는 기존과 같습니다.
npm install -D typescript
npx tsc
병렬 처리 직접 조절하기
TypeScript 7은 기본적으로 4개의 타입 검사 워커를 사용합니다. 프로젝트 규모와 실행 환경에 맞춰 새로운 옵션으로 병렬 처리 수준을 조절할 수 있습니다.
--checkers: 타입 검사 워커 수를 지정합니다.--builders: 프로젝트 레퍼런스를 사용하는 빌드에서 동시에 실행할 빌더 수를 지정합니다.--singleThreaded: 파싱, 타입 검사, 출력을 모두 단일 스레드로 실행합니다. CPU 코어가 많은 개발 머신에서는--checkers값을 높여 추가 성능 향상을 기대할 수 있습니다. 반대로 메모리와 CPU가 제한된 CI에서는 값을 낮추는 편이 안정적일 수 있습니다.
npx tsc --checkers 8
npx tsc --build --checkers 4 --builders 2
npx tsc --singleThreaded
--checkers와 --builders는 함께 사용할 때 동시 작업 수가 곱해질 수 있습니다. 예를 들어 각각 4로 설정하면 최대 16개의 타입 검사기가 실행될 수 있으므로 머신의 자원과 실제 프로젝트를 기준으로 측정해 결정해야 합니다.
새롭게 구축된 watch 모드
--watch 모드도 다시 만들어졌습니다. 새로운 파일 감시 기반은 Parcel의 파일 워처를 Go로 포팅한 구현을 사용하며, 운영체제 간 일관성과 대규모 프로젝트에서의 자원 효율을 개선합니다.
파일이 많은 모노레포나 node_modules 규모가 큰 프로젝트에서는 폴링 기반 감시가 CPU를 지속적으로 사용할 수 있습니다. TypeScript 7의 새 워처는 이런 부담을 줄이면서 변경 사항에 빠르게 반응하는 것을 목표로 합니다.
마이그레이션 전에 확인할 변경점
TypeScript 7은 TypeScript 6.0의 타입 검사 및 CLI 동작과의 호환성을 목표로 하지만, 6.0에서 도입된 기본값과 폐기 사항을 그대로 적용합니다.
주요 기본값은 다음과 같습니다.
strict가 기본적으로true입니다.module의 기본값은esnext입니다.noUncheckedSideEffectImports가 기본적으로true입니다.stableTypeOrdering은 항상 활성화됩니다.rootDir의 기본값이./로 변경됩니다.types의 기본값이 빈 배열[]로 변경됩니다. 특히rootDir과types는 기존 프로젝트에서 예상하지 못한 오류를 만들 수 있습니다. 소스 디렉터리와 전역 타입 패키지를 명시적으로 선언하는 것이 좋습니다.
{
"compilerOptions": {
"rootDir": "./src",
"types": ["node", "jest"]
},
"include": ["./src"]
}
또한 target: es5, moduleResolution: node, baseUrl, AMD·UMD·SystemJS 모듈 같은 기존 설정은 더 이상 지원되지 않습니다. 가능하면 먼저 TypeScript 6.0으로 올려 폐기 경고와 설정을 정리한 뒤 7.0으로 이동하는 편이 안전합니다.
TypeScript 6과 함께 사용하기
TypeScript 7.0에는 아직 안정적인 프로그래밍 API가 포함되지 않았습니다. 컴파일러 API를 직접 사용하는 도구가 있다면 새 호환 패키지인 @typescript/typescript6을 이용해 6.0과 7.0을 함께 설치할 수 있습니다.
{
"devDependencies": {
"@typescript/native": "npm:typescript@^7.0.2",
"typescript": "npm:@typescript/typescript6@^6.0.2"
}
}
이 구성에서는 npx tsc로 TypeScript 7 컴파일러를 실행하면서, typescript-eslint처럼 기존 typescript API에 의존하는 도구는 TypeScript 6을 계속 사용할 수 있습니다.
모든 프로젝트가 바로 전환할 수 있는 것은 아니다
Vue, MDX, Astro, Svelte처럼 TypeScript를 내부 언어 서비스에 임베드하는 도구는 7.0의 안정적인 API 부재 때문에 아직 TypeScript 7의 이점을 온전히 활용하기 어렵습니다. Angular의 템플릿 타입 검사도 같은 제약을 받습니다.
따라서 도입 전에 다음 항목을 확인하는 것이 좋습니다.
- 사용하는 프레임워크와 에디터 플러그인이 TypeScript 7을 지원하는지 확인합니다.
- 먼저 TypeScript 6.0에서 폐기된 설정을 제거합니다.
- 로컬 빌드와 CI에서 컴파일 시간과 메모리 사용량을 함께 측정합니다.
- 문제가 있다면 TypeScript 6 컴파일러 API와 TypeScript 7 CLI를 병행합니다.
마무리하며
TypeScript 7은 언어 기능을 대거 추가한 릴리스라기보다, TypeScript 도구 체인의 실행 기반을 바꾼 업데이트입니다. 대규모 코드베이스일수록 빌드, 에디터 진단, watch 모드, CI 피드백 루프에서 변화가 크게 느껴질 가능성이 높습니다.
다만 안정적인 프로그래밍 API는 TypeScript 7.1에서 제공될 예정이므로, 컴파일러 API나 프레임워크 전용 언어 서비스를 사용하는 프로젝트라면 생태계의 지원 상태를 확인하며 단계적으로 도입하는 것이 좋겠습니다.