본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

TypeScript 직접 실행, binary lockfile, npm 호환

~11 min · bun, concepts, internals

Level 0입문자
0 XP0/55 lessons0/16 achievements
0/80 XP to next level80 XP to go0% complete

실제로 Bun을 쓰면 세 가지 개념을 반복해서 만나게 돼. 미리 이해해 두면 예상 밖의 동작을 줄일 수 있어.

TypeScript 직접 실행. Bun은 .ts.tsx 파일을 곧바로 실행해. 먼저 tsc로 컴파일하거나 시작 단계에서 tsconfig.json을 준비할 필요가 없어. 내부적으로는 실행 시점에 타입 표기를 지우고 JavaScript를 실행해. 빠른 대신 타입 검사는 하지 않아. 타입 오류는 잡지 못하므로 CI에서 bunx tsc --noEmit을 별도로 실행해야 해.

Binary lockfile(bun.lock). 예전 Bun은 완전한 binary 파일인 bun.lockb를 썼고, 현재는 텍스트 기반이면서도 빠른 해석을 위해 Structure-of-Arrays로 최적화된 bun.lock을 사용해. 두 형식 모두 JSON 기반 lockfile보다 빠르게 읽도록 설계됐으며 항상 버전 관리에 포함해야 해.

npm 호환 대체재. Bun은 같은 package.json을 읽고 같은 npm registry와 통신하며 같은 node_modules를 채워. 호환성을 위해 Node.js 패키지에는 자신을 Node.js v24.3.0처럼 보이게 하므로 대부분의 패키지가 그대로 작동해. 예외는 V8 내부에 의존하는 일부 C++ native addon, 드문 Node 전용 API, Node 버전을 지나치게 엄격하게 검사하는 패키지야.

Code

Bun의 TypeScript 처리 확인·bash
# bun 이 TS 직접 실행
echo 'const x: number = 42; console.log(x);' > demo.ts
bun demo.ts
# 42

# 그치만 Bun 이 type-check 안 함 — 이게 통과:
echo 'const x: number = "this is a string"; console.log(x);' > broken.ts
bun broken.ts
# this is a string  ← 어쨌든 돔, 타입이 런타임에 제거됨

# CI 가 type 체크 위해 tsc 따로 돌려야 함
bunx tsc --noEmit

External links

Exercise

사용 중인 npm 패키지 하나를 골라 https://bun.sh/docs/runtime/nodejs-apis에서 호환 여부를 확인해. 시간이 있다면 작은 Node 스크립트를 'bun script.js'로 실행해 봐. 대부분은 그대로 작동하지만 핵심 업무에 쓰는 기능은 직접 확인할 가치가 있어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.