핵심 요약
Elysia 2.0이 Bun 1.2 위에서 안정되며 단일 노드 처리량이 Hono 4와 동급, 코드량은 25% 적게 끝났다. Eden 클라이언트로 서버 변경이 클라이언트 타입에 즉시 반영되는 풀스택 경험이 hono·trpc의 중간 지점을 정확히 친다.
1. 무엇이 새로워졌나
- Bun runtime 호환 강화, Node도 가능
- OpenAPI 3.1 스키마 자동 생성
- Macro 시스템 — 미들웨어를 타입 추론 안에 통합
- WebSocket 안정화 + 자동 typed contract
2. 한 화면 풀스택
// server.ts
import { Elysia, t } from 'elysia'
export const app = new Elysia()
.get('/user/:id', ({ params }) => db.user(+params.id), {
params: t.Object({ id: t.Numeric() })
})
.post('/user', ({ body }) => db.create(body), {
body: t.Object({ name: t.String(), email: t.String() })
})
export type App = typeof app
app.listen(3000)
// client.ts
import { treaty } from '@elysiajs/eden'
import type { App } from './server'
const api = treaty<App>('localhost:3000')
const { data } = await api.user({ id: 7 }).get()
3. 성능 — 1만 동시 연결
| 스택 | req/s | p95 | RAM |
|---|---|---|---|
| Elysia 2 + Bun | 148K | 9ms | 180MB |
| Hono 4 + Bun | 152K | 9ms | 165MB |
| Fastify 5 + Node | 92K | 15ms | 240MB |
4. 플러그인 패턴
const auth = new Elysia()
.derive(async ({ headers }) => ({ user: await verify(headers.authorization) }))
app.use(auth).get('/me', ({ user }) => user)
derive로 컨텍스트에 값을 주입. 타입은 자동 전파.
5. WebSocket — typed contract
app.ws('/chat', {
body: t.Object({ msg: t.String() }),
message: (ws, { msg }) => ws.send({ echo: msg })
})
6. 프로덕션 배포
Bun 단일 실행파일(bun build --compile)로 ~95MB 바이너리. Docker 이미지 자체를 줄이면 콜드 스타트 1.2s. Cloudflare Workers는 Hono가 더 자연스럽지만 일반 VM/컨테이너라면 Elysia가 DX 우세.
7. 마이그레이션 비용
Express/Koa에서 4~7일. Hono와는 코드 모양이 비슷해 2일 내. 가장 큰 변경은 검증 라이브러리 — Zod에서 Elysia의 t로 옮기는 작업이 핵심.
자주 묻는 질문
Q. tRPC vs Elysia? tRPC는 RPC, Elysia는 REST + Eden RPC 옵션. OpenAPI 호환 + 외부 클라이언트 친화는 Elysia 우세.

댓글 0