# Vite에서 타입 검사가 빠진 이유는?

## 들어가며

타입 관련 파일명을 변경한 뒤, import 구문 수정한 커밋을 **누락한 채 배포**했다.  
"타입 에러가 발생해서 빌드가 실패했겠지?"라고 생각했는데, 예상과 다르게 **배포가 문제없이 진행**되었다.  
"왜 타입 에러가 있었는데도 빌드와 배포가 성공한 걸까?" 🤔  
이 궁금증을 해결하기 위해 CRA와 Vite의 빌드 과정을 비교해 보았다.

---

### 나의 착각 : 타입 체크는 자동으로 수행될 거야!

CRA와 같이 Vite도 **프로덕션 빌드에서 타입 체크를 수행할 것**이라고 생각했다. 즉, **타입 에러가 있으면 빌드가 실패할 줄 알았다.**

하지만 **Vite는 타입 체크를 하지 않고, 트랜스파일링(코드 변환)만 수행하기 때문에** 타입 에러가 있어도 빌드가 가능하다는 걸 공식 문서를 통해서 확인할 수 있었다.

> Vite는 `.ts` 파일에 대해서 **트랜스파일링만** 수행하며, 타입 검사는 IDE와 빌드 프로세스에서 수행된다고 가정합니다. [Vite 공식 문서 링크](https://ko.vite.dev/guide/features#transpile-only)

## Vite는 왜 `.ts` 파일의 타입을 검사하지 않을까?

### Vite의 목표는 빠른 실행 속도

Vite는 빠른 실행 속도를 위해서 TypeScript 코드를 빠르게 JavaScript로 변환하는 트랜스파일링만 수행하고, 시간이 많이 걸리는 타입 검사는 제외했다.

### 타입 검사는 왜 시간이 많이 걸릴까

TypeScript는 모듈 간 관계를 분석하기 위해서 [**AST(Abstract Syntax Tree, 추상 구문 트리)**](https://ko.wikipedia.org/wiki/%EC%B6%94%EC%83%81_%EA%B5%AC%EB%AC%B8_%ED%8A%B8%EB%A6%AC)를 생성하여 타입을 분석한다. 파일 단위가 아니라 전체 코드를 분석해야 하기 때문에 타입 검사는 시간이 오래 걸릴 수밖에 없다.

## 빌드 속도 비교 : 타입 검사는 진짜 오래 걸릴까?

타입 검사가 실제로 얼마나 느린지 확인해 보고 싶어서 직접 측정해 보았다.

### 비교 방법

터미널에서 `time` 명령어를 사용하여 **빌드 속도**를 측정했다.

* **타입 체크 없이 빌드 측정 :** `time vite build`
    
* **타입 체크 포함 빌드 측정 :** `time (tsc --noEmit && vite build)`
    
    > 참고 : `tsc --noEmit` 이란?
    > 
    > 이 명령어는 타입 체크만 수행하고, 결과 파일(`.js`)을 생성하지 않는다.
    

### 결과 : 타입 체크 포함하면 빌드 시간 350배 증가!

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1739679100070/81e67ae5-45d0-48e7-87f8-1727cdabfc75.png align="center")

Vite는 파일 단위로 빠르게 트랜스파일링하지만, 타입 체크는 전체 코드를 분석해야 해서 속도가 느리다는 걸 확인할 수 있었다.

### Vite 프로젝트에서 타입 검사는 언제 해야 할까?

Vite는 타입 검사가 포함되어 있지 않지만, 우리는 언제 타입 체크를 하는 게 좋을까?

### 로컬 개발 환경

* IDE(VS Code)에서 실시간 타입 체크
    
* `tsc --noEmit --watch`로 수동 검사
    

### CI/CD 단계에서 체크

* PR시 자동 타입 체크 실행하여, 타입 오류 발생 시 머지되지 않도록 설정
    
* Vercel 배포 시 `npm run tsc --noEmit && vite build` 설정
    

## 마무리 : 빠른 빌드 속도가 말해주는 것!

Vite를 사용하며, 빠른 빌드 속도가 단순한 최적화가 아니라 타입 검사를 제외한 결과라는 사실을 알게 되었다. 빠른 빌드는 기존에 수행하던 작업을 생략했기 때문에 가능했던 것이었다. **앞으로 개발 환경 세팅 도구를 확인할 때는 ‘빠르다’에서 그냥 넘어가지 말고, 그 속도가 어떻게 만들어졌는지, 어떤 작업이 포함되고 빠졌는지를 꼼꼼히 살펴봐야겠다.** 그리고 빠른 속도와 안정성이라는 선택 속에서 프로젝트에 맞는 균형을 찾는 것이 중요하다는 걸 배웠다.
