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부터 익숙해지는 게 목표다.