TypeScript 5.7 업그레이드 후 빌드 시간 20% 개선

배경

회사 프로젝트가 TypeScript 5.3을 사용 중이었는데, 빌드 시간이 점점 느려지고 있었다. 특히 CI/CD 파이프라인에서 타입 체크에만 4분 이상 소요되는 상황이었다.

TypeScript 5.7이 11월 초 릴리즈되면서 성능 개선 사항이 많다는 글을 보고 업그레이드를 결정했다.

주요 변경 사항

1. 타입 체크 성능 향상

5.7에서는 조건부 타입 처리가 개선되었다. 우리 코드베이스에는 복잡한 유틸리티 타입이 많았는데, 이 부분에서 확실히 빨라졌다.

// 기존에 느렸던 패턴
type DeepPartial<T> = T extends object
  ? { [P in keyof T]?: DeepPartial<T[P]> }
  : T;

type DeepReadonly<T> = T extends object
  ? { readonly [P in keyof T]: DeepReadonly<T[P]> }
  : T;

2. 모노레포 환경 개선

프로젝트가 Turborepo를 사용하는 모노레포 구조인데, 패키지 간 의존성 해석이 빨라졌다. --incremental 플래그와 함께 사용하니 캐시 히트율도 올라갔다.

// tsconfig.json
{
  "compilerOptions": {
    "incremental": true,
    "tsBuildInfoFile": ".tsbuildinfo"
  }
}

3. 실제 측정 결과

  • 로컬 빌드: 48초 → 38초 (약 21% 감소)
  • CI 타입 체크: 4분 12초 → 3분 22초 (약 20% 감소)
  • Watch 모드 재컴파일: 3.2초 → 2.1초

마이그레이션 이슈

큰 문제는 없었지만 몇 가지 타입 에러가 발생했다.

// 5.7에서 더 엄격해진 케이스
const config = {
  port: process.env.PORT || 3000 // string | number 타입 에러
};

// 수정
const config = {
  port: Number(process.env.PORT) || 3000
};

결론

빌드 시간 20% 개선은 체감상 꽤 컸다. 특히 로컬 개발 시 watch 모드가 빨라진 게 만족스럽다. 대규모 TypeScript 프로젝트라면 업그레이드 고려해볼 만하다.