피드로 돌아가기
Dev.toFrontend
원문 읽기
AST 재사용과 Go 언어 전환을 통한 TypeScript 린트 속도 20배 향상
@ttsc/lint - I made 20x faster TS Lint by building it into typescript-go — one compile catches both
AI 요약
Context
기존 TypeScript 개발 환경은 tsc를 통한 Type Checking과 ESLint를 통한 Style Checking을 별도로 수행함. 동일한 소스 코드를 두 번 읽고 각각 AST(Abstract Syntax Tree)를 생성하는 중복 파싱 과정으로 인한 빌드 시간 낭비가 병목 지점으로 작용함.
Technical Solution
- typescript-go 기반의 컴파일러 툴체인 ttsc 도입을 통한 엔진 교체
- 컴파일러가 타입 체크를 위해 이미 생성한 AST를 @ttsc/lint가 그대로 공유하여 중복 파싱 비용 제거
- 린트 위반 사항을 일반 컴파일 에러(TSxxxxx 포맷)로 통합 출력하여 단일 패스로 진단 완료
- ttsc의 Transformer Plugin 시스템을 통해 컴파일 타임 타입 정보에 접근하는 확장 구조 설계
- Go 언어의 고성능 런타임을 활용하여 JavaScript 기반 legacy tsc의 실행 속도 한계 극복
Impact
- Go 언어 전환 및 단일 패스 통합으로 이론상 기존 대비 약 20배의 처리 속도 달성
- typescript-go 단독 사용 시 legacy tsc 대비 약 10배의 성능 향상 확인
- ttsx 도입으로 ts-node 수준의 안정성과 tsx 수준의 실행 속도를 동시에 확보
Key Takeaway
서로 다른 목적의 정적 분석 도구라도 동일한 AST를 공유할 수 있다면 파이프라인 통합을 통해 지수적인 성능 이득을 얻을 수 있음.
실천 포인트
- 반복적인 AST 생성 비용이 발생하는 멀티 스텝 분석 파이프라인의 통합 가능성 검토 - 고성능 언어(Go, Rust 등)로의 컴파일러 엔진 교체가 가져오는 정량적 이득 분석 - 린트 규칙을 빌드 에러로 통합하여 CI 단계의 피드백 루프 단축 시도