ElysiaJS 실전 튜토리얼 — Bun 기반 TypeScript API 서버, JWT 인증, Swagger 문서화, Docker 배포
ElysiaJS로 Bun 위에서 고성능 TypeScript REST API를 만드는 단계별 가이드. 라우팅, 플러그인 시스템, JWT 인증, Swagger 자동 문서화, Docker 배포까지 실전 코드 기반으로 완전 정리.
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가 더 현실적인 선택이다.