ElysiaJS 실전 튜토리얼 — Bun 기반 TypeScript API 서버, JWT 인증, Swagger 문서화, Docker 배포
ElysiaJS는 Bun 런타임 위에서 동작하는 TypeScript 웹 프레임워크다. Express 대비 18배, Fastify 대비 3배 높은 처리량과 Bun의 내장 TypeScript 지원을 결합해, 별도 컴파일 없이 타입 안전한 API를 만들 수 있다. ElysiaJS는 SaltyAom이 만든 오픈소스 TypeScript 웹 프레임워크다. Bun의 저수준 HTTP API를 직접 사용하며, 런타임 타입 검증과 OpenAPI 자동 생성을 빌트인으로 제공한다.
ElysiaJS는 Bun 런타임 위에서 동작하는 TypeScript 웹 프레임워크다. Express 대비 18배, Fastify 대비 3배 높은 처리량과 Bun의 내장 TypeScript 지원을 결합해, 별도 컴파일 없이 타입 안전한 API를 만들 수 있다. 이 글은 프로젝트 초기화부터 JWT 인증, Swagger 자동 문서화, Docker 배포까지 단계별로 실습한다.
ElysiaJS란 무엇인가
ElysiaJS는 SaltyAom이 만든 오픈소스 TypeScript 웹 프레임워크다. Bun의 저수준 HTTP API를 직접 사용하며, 런타임 타입 검증과 OpenAPI 자동 생성을 빌트인으로 제공한다.
핵심 특징은 세 가지다. 첫째, End-to-End 타입 안전성 — 서버 라우트 정의에서 클라이언트 요청까지 타입이 자동으로 흐른다. 둘째, 플러그인 기반 아키텍처 — 인증·캐싱·문서화가 모두 플러그인으로 분리돼 있어 필요한 것만 추가한다. 셋째, Bun 내장 TypeScript — tsc나 ts-node 없이 .ts 파일을 직접 실행한다.
Hono.js와 자주 비교되는데, Hono는 멀티 런타임(Node/Bun/Deno/Cloudflare)을 지원하는 반면 ElysiaJS는 Bun 전용으로 더 깊은 성능 최적화에 집중한다. Bun이 메인 런타임이라면 ElysiaJS가 유리하다.
프로젝트 초기 설정
Bun이 설치돼 있어야 한다. macOS·Linux는 curl -fsSL https://bun.sh/install | bash로 설치하고, Windows는 Bun 공식 문서에서 PowerShell 명령어를 확인하라.
프로젝트 초기화 및 ElysiaJS 설치
# Bun 설치 확인
bun --version
# 새 프로젝트 생성
mkdir elysia-api && cd elysia-api
bun init -y
# ElysiaJS 및 핵심 플러그인 설치
bun add elysia @elysiajs/jwt @elysiajs/swagger @elysiajs/cors
bun add drizzle-orm drizzle-kit @libsql/client
bun add --dev @types/bun
설치 후 package.json의 scripts를 수정한다.
package.json scripts 설정
{
"scripts": {
"dev": "bun run --watch src/index.ts",
"start": "bun run src/index.ts",
"db:generate": "drizzle-kit generate",
"db:migrate": "bun run src/db/migrate.ts"
}
}
bun init 이후 elysia 설치까지 10초도 걸리지 않는다
라우팅과 핸들러 구현
ElysiaJS의 라우팅은 Express와 유사하지만 타입 추론이 핵심 차이다. 경로 파라미터, 쿼리스트링, 요청 바디에 타입이 자동으로 붙는다.
# 이미지 빌드
docker build -t elysia-api .
# 컨테이너 실행
docker run -p 3000:3000 -e JWT_SECRET=$(openssl rand -hex 32) elysia-api
# docker-compose 사용 시
docker compose up -d
ElysiaJS vs Hono.js vs Fastify — 언제 어떤 걸 쓸까
세 프레임워크는 각자 다른 철학을 가진다.
ElysiaJS: Bun 전용, 최고 처리량, 빌트인 타입 안전성. Bun을 메인 런타임으로 쓰고 최대 성능이 필요할 때.
Hono.js: 멀티 런타임(Node/Bun/Deno/Cloudflare Workers). 엣지 배포나 런타임 교체 가능성이 있을 때.
Fastify: Node.js 생태계에서 검증된 안정성. 기존 Node.js 프로젝트와 통합하거나 팀이 Node.js에 익숙할 때.
신규 Bun 프로젝트에서는 ElysiaJS가 가장 생산적인 선택이다. 타입 추론, 플러그인, 문서화가 모두 빌트인이라 보일러플레이트가 적다.
Bun 런타임이 전제 조건: ElysiaJS는 Node.js에서 동작하지 않는다. 기존 Node.js 프로젝트에 점진적으로 도입하려면 Hono.js가 더 현실적인 선택이다.