TypeScript 도입 검토 - 프로젝트에 적용할 수 있을까

배경

최근 팀 내에서 TypeScript 도입에 대한 논의가 있었다. 프로젝트 규모가 커지면서 타입 관련 버그가 증가하고, PropTypes만으로는 한계가 있다는 의견이 나왔다.

검토 내용

장점

  • IDE 자동완성과 타입 체크로 개발 생산성 향상
  • 리팩토링 시 영향 범위 파악 용이
  • 인터페이스 명시로 협업 시 커뮤니케이션 비용 감소

우려사항

  • 기존 팀원들의 러닝커브
  • 빌드 설정 복잡도 증가
  • 서드파티 라이브러리 타입 정의 누락 문제

간단한 테스트

작은 유틸리티 모듈에 적용해봤다.

interface User {
  id: number;
  name: string;
  email: string;
}

function formatUserInfo(user: User): string {
  return `${user.name} (${user.email})`;
}

// 타입 오류를 컴파일 타임에 잡아냄
const result = formatUserInfo({ id: 1, name: 'Kim' }); // Error: email 누락

tsconfig.json 기본 설정

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "lib": ["es2017", "dom"],
    "jsx": "react",
    "strict": false,
    "esModuleInterop": true,
    "skipLibCheck": true
  }
}

처음엔 strict: false로 시작해 점진적으로 엄격하게 가져가는 방향이 현실적이었다.

결론

당장 전체 프로젝트에 적용하긴 어렵지만, 새로 작성하는 모듈부터 .ts 확장자로 작성하는 방식으로 시작하기로 했다. JavaScript와 TypeScript를 혼용할 수 있다는 점이 점진적 도입에 유리하다.

다만 @types 패키지 설치나 복잡한 타입 정의는 아직 학습이 필요한 부분이다. 우선 기본적인 타입 annotation부터 익숙해지는 게 목표다.

TypeScript 도입 검토 - 프로젝트에 적용할 수 있을까