iBetter Books
수정

Ch 03. TypeScript 생태계 한눈에 보기

TypeScript를 실행하는 방법은 하나가 아닙니다. tsc, tsx, Bun, Deno — 각각 역할과 특성이 다릅니다. 어떤 상황에서 무엇을 쓰면 좋은지 정리합니다.

tsc — 공식 TypeScript 컴파일러

Microsoft가 만든 공식 컴파일러입니다. TypeScript 파일을 JavaScript로 변환합니다.

# 설치npm install -g typescript# 버전 확인tsc --version# Version 5.8.3# 파일 컴파일tsc hello.ts# 프로젝트 전체 빌드tsc# 감시 모드 (파일 변경 시 자동 재빌드)tsc --watch

tsc는 타입 검사와 컴파일을 모두 담당합니다. 빌드 결과물인 .js 파일을 Node.js로 실행합니다.

tsc src/index.ts --outDir distnode dist/index.js

단점은 두 단계가 필요하다는 점입니다 — 컴파일 후 실행. 개발 중에 번거롭습니다.

tsx — 빠른 개발용 TypeScript 실행기

tsxtsc로 먼저 컴파일하지 않고 TypeScript 파일을 직접 실행합니다. 내부적으로 esbuild를 사용해 빠릅니다.

# 설치npm install -g tsx# 바로 실행tsx src/index.ts# 감시 모드tsx watch src/index.ts

타입 검사를 하지 않습니다. 빠른 실행이 목적입니다. 개발 중 빠른 피드백 루프에 적합하고, 타입 검사는 별도로 tsc --noEmit으로 합니다.

// package.json{  "scripts": {    "dev": "tsx watch src/index.ts",    "typecheck": "tsc --noEmit",    "build": "tsc"  }}

이 책에서 Node.js 백엔드 개발 시 주로 tsx를 사용합니다.

ts-node — Node.js 통합 실행기

tsx보다 먼저 등장한 도구입니다. Node.js에 TypeScript 지원을 추가합니다.

npm install -g ts-nodets-node src/index.ts

현재는 tsx가 더 빠르고 설정이 간단해 새 프로젝트에서는 tsx를 권장합니다.

Bun — TypeScript 네이티브 런타임

Bun은 Node.js 대체를 목표로 만들어진 JavaScript/TypeScript 런타임입니다. TypeScript를 별도 설정 없이 바로 실행합니다.

# 설치 (macOS/Linux)curl -fsSL https://bun.sh/install | bash# TypeScript 파일 직접 실행bun run src/index.ts# 패키지 설치 (npm보다 빠름)bun install# 빌드bun build src/index.ts --outdir dist

Bun은 런타임 + 패키지 매니저 + 번들러를 하나로 합쳤습니다. 속도가 Node.js보다 빠르다고 알려져 있습니다.

이 책은 Node.js 22 + npm 기반으로 진행합니다. Bun을 선호한다면 대부분의 코드를 그대로 사용할 수 있습니다.

Deno — 보안 중심 TypeScript 런타임

Deno는 Node.js 창시자 Ryan Dahl이 새로 만든 런타임입니다. TypeScript를 네이티브로 지원하고, 샌드박스 보안 모델을 채택합니다.

# 설치curl -fsSL https://deno.land/install.sh | sh# 실행 (네트워크 접근 명시적 허용 필요)deno run --allow-net src/index.ts

Node.js 생태계와 호환성이 완전하지 않아 기존 npm 패키지를 그대로 쓰기 어렵습니다. 새 프로젝트에서 실험적으로 사용하거나, Deno Deploy 같은 Deno 생태계를 활용할 때 선택합니다.

프레임워크별 TypeScript 지원 현황

TypeScript를 쓰는 주요 프레임워크들의 지원 수준입니다.

프론트엔드

# React (Vite 사용)npm create vite@latest my-app -- --template react-ts# Next.js (기본 TypeScript)npx create-next-app@latest my-app# Vue 3npm create vue@latest my-app   # 프로젝트 생성 시 TypeScript 선택

React는 @types/react 패키지로 타입을 지원합니다. Next.js와 Nuxt 3는 TypeScript를 기본값으로 사용합니다.

백엔드

# NestJS (TypeScript 퍼스트)npm i -g @nestjs/clinest new my-app# Fastify + TypeScriptnpm install fastify @types/node# Express + TypeScriptnpm install express @types/express @types/node

NestJS는 TypeScript 없이 쓰는 게 오히려 어렵습니다. Angular처럼 처음부터 TypeScript를 전제하고 설계된 프레임워크입니다.

테스트

# Vitest (이 책에서 사용)npm install -D vitest# Jest + TypeScriptnpm install -D jest @types/jest ts-jest

Vitest는 Vite 기반 테스트 러너로, TypeScript를 별도 설정 없이 지원합니다. 이 책에서 테스트 챕터는 Vitest를 사용합니다.

타입 정의 패키지 (@types/*)

Node.js, Express, React 같은 JavaScript 라이브러리는 TypeScript 타입 정보가 없습니다. @types/* 패키지가 타입 정보를 제공합니다.

# Node.js 내장 모듈 타입npm install -D @types/node# Express 타입npm install -D @types/express# 이미 TypeScript 타입이 포함된 패키지는 @types 불필요npm install zod      # 타입 내장npm install axios    # 타입 내장

패키지를 설치할 때 해당 패키지에 타입이 포함되어 있는지 npmjs.com에서 확인하면 됩니다. 패키지 이름 옆에 TS 배지가 있으면 타입 내장, DT 배지가 있으면 @types/*가 별도로 있다는 표시입니다.

정리

도구 역할 타입 검사 속도
tsc 공식 컴파일러 O 보통
tsx 개발용 실행기 X 빠름
ts-node Node.js 통합 O 느림
Bun TypeScript 런타임 X (별도 필요) 매우 빠름
Deno 보안 런타임 O 빠름

이 책의 개발 환경은 Node.js 22 + tsc + tsx 조합입니다. 다음 PART에서 직접 설치합니다.