우리 모두가 간과했던 병목 현상
TypeScript 7은 새로운 컴파일러가 VS Code 코드베이스를 빌드하는 능력을 통해 입증된 상당한 성능 향상을 달성했습니다. 약 8,000개의 파일에 걸쳐 130만 줄의 코드로 구성된 이 거대한 프로젝트가 이제 단 10초 만에 컴파일됩니다. 이는 이전 컴파일러가 필요로 했던 125초에서 획기적으로 단축된 것으로, 가장 널리 사용되는 개발 환경 중 하나에서 11.9배의 속도 향상을 기록했습니다.
Microsoft Technical Fellow인 Anders Hejlsberg는 핵심 문제를 정확히 파악했습니다. JavaScript의 설계는 사용자 인터페이스와 웹 브라우저에 최적화되어 있으며, 컴파일러에 필수적인 연산 집약적 워크플로우에는 최적화되어 있지 않습니다. JavaScript의 근본적인 단일 스레드 아키텍처는 확장성을 심각하게 제한하며, abstract syntax trees(추상 구문 트리) 처리나 포괄적인 타입 검사와 같은 중요한 작업에서 최신 멀티 코어 프로세서를 효율적으로 활용하지 못하게 합니다.
JavaScript는 동시성 메커니즘으로 Web Workers를 제공하지만, 컴파일러 작업에는 실용적이지 않습니다. 구문 트리와 같이 복잡한 데이터 구조를 별도의 워커 스레드로 분산하려면 엄청난 직렬화 및 역직렬화 오버헤드가 발생합니다. 복잡한 객체를 원시 바이트로 변환하고 다시 되돌리는 이 과정은 종종 실제 작업보다 더 많은 컴퓨팅 자원과 시간을 소비하므로, 컴파일러의 공유 메모리 및 고처리량 요구 사항을 충족하기에는 Workers가 비실용적인 솔루션이 됩니다.
왜 Go가 완벽한 무기였는가
TypeScript 컴파일러를 Go로 재작성함으로써 상당한 성능 향상을 이루었습니다. 이러한 전략적 포팅은 연산 집약적 작업에 대한 JavaScript의 고유한 한계를 해결했습니다. 관찰된 속도 향상의 절반 정도는 네이티브로 컴파일된 코드 실행에서 비롯되었으며, 나머지 절반은 Go의 매우 효율적인 공유 메모리 동시성 모델 덕분입니다.
Go는 사용 가능한 모든 CPU 코어에 연산 작업을 손쉽게 분산합니다. 이는 CPU 집약적 작업에서 여전히 단일 코어에 크게 의존하는 JavaScript와 극명하게 대조됩니다. 최신 프로세서는 개별 코어의 속도보다는 코어 수를 늘리는 추세이므로, 병렬 처리를 위해 하드웨어 자원을 완전히 활용하는 Go의 능력이 더욱 빛을 발합니다.
Go의 동시성 모델은 CPU 집약적 작업의 분산을 단순화합니다. 개발자가 복잡한 스레드를 관리하거나 프로세스 간에 데이터를 직렬화하고 복사할 필요가 없는데, 이는 JavaScript에서 web workers를 사용하려고 할 때 발생하는 흔한 병목 현상입니다. 이러한 설계는 Go를 컴파일러 작업에 본질적으로 더 우수하게 만들며, 직접적인 객체 공유와 간소화된 parallel execution(병렬 실행)을 가능하게 합니다.
마침내 얻은 즉각적인 피드백
성능 향상은 컴파일러 실행을 넘어 TypeScript 언어 서버를 통해 일상적인 developer experience(개발자 경험)에 깊은 영향을 미칩니다. 이전 버전에서는 개발자들이 IDE에서 중요한 타입 검사 결과와 오류 강조 표시가 나타나기를 기다리며 눈에 띄는 지연을 자주 겪어야 했으며, 특히 대규모 코드베이스에서 더욱 심했습니다. 이는 종종 워크플로우에서 답답한 중단을 초래했습니다.
TypeScript 7은 이러한 역학 관계를 근본적으로 바꾸어 거의 즉각적인 피드백을 제공합니다. 이제 개발자는 대규모 프로젝트를 수정할 때도 밀리초 단위로 정확한 타입 검사 결과와 오류를 나타내는 '물결선'을 확인할 수 있습니다. 이러한 반응성은 지속적인 개발과 생산성을 방해하던 고통스러운 대기 시간을 효과적으로 제거합니다.
중요한 점은, 새로운 언어 서버가 안정성 측면에서 상당한 개선을 이루었다는 것입니다. 지표에 따르면 운영 오류가 극적으로 감소했습니다. TypeScript 6와 비교했을 때, 실패하는 언어 서버 명령어가 80% 이상 감소했습니다. 또한, 흔한 중단 원인이었던 서버 충돌도 60% 이상 크게 줄었습니다.
이러한 개선 사항들은 수동 재시작의 필요성을 최소화하고 지속적인 도구 문제를 해결합니다. 이러한 개선 사항 및 기타 새로운 기능에 대한 포괄적인 개요는 공식 Announcing TypeScript 7.0 - Microsoft Developer Blogs를 참조하십시오. Go 포팅은 TypeScript 개발 환경의 응답성과 신뢰성을 확실하게 변화시켰습니다.
이 글이 마음에 드셨나요? 매일 아침 이런 글을 메일로 받아보세요.
하루 한 통 · 두 번의 클릭으로 구독 취소 · 제3자 추적 없음
업그레이드 방법 (및 주의 사항)
새로운 컴파일러로 업그레이드하려는 사용자는 npm install typescript를 실행하여 버전 7을 획득할 수 있습니다. VS Code 사용자의 경우, IDE 내에서 성능 향상을 완전히 활용하기 위해 특정 'TypeScript 7' 확장 프로그램을 설치해야 합니다. 이번 릴리스는 기존 컴파일러를 Go로 직접 포팅한 것이며, 처음부터 새로 작성한 것은 아닙니다.
이러한 접근 방식은 기존 코드베이스와의 광범위한 호환성을 보장합니다. 개발자는 가장 눈에 띄는 변화로 컴파일 속도의 극적인 향상과 언어 서버의 응답성 개선을 기대할 수 있습니다. 기능적 동작은 이전 TypeScript 버전과 대체로 일관되게 유지됩니다.
이번 초기 릴리스의 결정적인 제한 사항은 완전히 호환되는 programmatic API가 없다는 점입니다. 이러한 누락은 TypeScript 생태계 내의 여러 주요 도구에 직접적인 영향을 미칩니다. 린팅(linting), 테스트 또는 런타임 실행과 같은 작업을 위해 이러한 유틸리티에 의존하는 프로젝트는 TypeScript 7.0에서 제대로 작동하지 않습니다.
구체적으로 다음과 같은 통합 도구들이 영향을 받습니다:
typescript-eslintts-jestts-node
이러한 도구들과 유사한 다른 도구들은 업데이트를 기다리고 있습니다. 개발자들은 programmatic API에 대한 완전한 호환성이 다가오는 TypeScript 7.1 릴리스에서 제공될 예정이며, 이를 통해 생태계 의존성 문제가 해결될 것임을 유의해야 합니다.
자주 묻는 질문 (FAQ)
TypeScript 컴파일러가 Go로 재작성된 이유는 무엇인가요?
기존의 JavaScript 기반 컴파일러는 JavaScript의 단일 스레드 특성으로 인해 제한적이었으며, 이는 컴퓨팅 집약적인 작업에 적합하지 않았습니다. Go는 네이티브 성능과 우수한 공유 메모리 동시성 덕분에 선택되었으며, 이를 통해 컴파일러가 사용 가능한 모든 CPU 코어를 활용할 수 있게 되었습니다.
TypeScript 7은 얼마나 더 빠른가요?
극적으로 더 빠릅니다. 예를 들어, 130만 줄 규모의 VS Code 코드베이스를 컴파일하는 데 이전 컴파일러로는 125초가 걸렸지만, 새로운 컴파일러로는 약 10초가 소요되어 거의 12배의 성능 향상을 보였습니다. 다른 대규모 프로젝트에서도 이와 유사한 성능 향상이 나타나고 있습니다.
TypeScript 7이 기존 도구를 망가뜨릴까요?
그럴 가능성이 있습니다. 컴파일러는 호환되도록 설계되었지만, programmatic API는 아직 사용할 수 없습니다. typescript-eslint, ts-jest, ts-node와 같이 이에 의존하는 도구들은 7.1 릴리스 전까지는 작동하지 않을 것입니다.
TypeScript 7을 어떻게 시작할 수 있나요?
npm(npm install typescript)을 통해 설치할 수 있습니다. VS Code에서 최상의 경험을 얻으려면 마켓플레이스에서 특정 'TypeScript 7' 확장 프로그램을 설치해야 합니다. 기본값은 아직 업데이트되지 않았기 때문입니다.

