본문 바로가기
Backend2026년 5월 21일4분 읽기

Elysia 2.0 — Bun 프레임워크로 끝장보는 TypeScript 타입 안전

YS
김영삼
조회 614
Elysia 2.0 — Bun 프레임워크로 끝장보는 TypeScript 타입 안전

핵심 요약

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/sp95RAM
Elysia 2 + Bun148K9ms180MB
Hono 4 + Bun152K9ms165MB
Fastify 5 + Node92K15ms240MB

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

아직 댓글이 없습니다.
Ctrl+Enter로 등록