Tan Kim

Hono

Hono는 Web Standards API(Fetch API, Request/Response)를 기반으로 한 경량 웹 프레임워크다. Node.js, Cloudflare Workers, Deno, Bun 등 다양한 런타임에서 동작하며, TypeScript 지원이 우수하다.

개요

항목 내용
기반 표준 Web Standards (Fetch API)
지원 런타임 Node.js, Cloudflare Workers, Deno, Bun, AWS Lambda
언어 TypeScript 우선 설계
번들 크기 매우 작음 (~12KB)

특징

Web Standards 기반

Node.js 전용 API 대신 표준 Web API(Request, Response)를 사용한다. 동일한 코드를 Node.js, Edge Runtime, Deno, Bun 등에서 실행할 수 있다.

TypeScript 우선

타입 안전한 라우트 핸들러와 미들웨어를 작성할 수 있다. RPC 기능을 통해 클라이언트에서 서버 함수를 타입 안전하게 호출할 수도 있다.

기본 사용법

import { Hono } from 'hono'
 
const app = new Hono()
 
app.get('/', (c) => c.text('Hello World'))
 
app.get('/users/:id', (c) => {
  const id = c.req.param('id')
  return c.json({ id })
})
 
export default app

라우팅

app.get('/path', handler)
app.post('/path', handler)
app.put('/path', handler)
app.delete('/path', handler)
 
// 라우터 그룹핑
const api = new Hono()
api.get('/users', handler)
 
const app = new Hono()
app.route('/api', api)

미들웨어

// 전역 미들웨어
app.use('*', async (c, next) => {
  console.log('Request:', c.req.url)
  await next()
})
 
// 특정 경로 미들웨어
app.use('/api/*', authMiddleware)

내장 미들웨어

미들웨어 기능
logger 요청 로깅
cors CORS 설정
jwt JWT 인증
bearer-auth Bearer 토큰 인증

컨텍스트 (Context)

app.post('/echo', async (c) => {
  const body = await c.req.json()
  const query = c.req.query('page')
  const header = c.req.header('Authorization')
  return c.json({ body, query })
})

Express와의 비교

항목 Hono Express
기반 Web Standards Node.js HTTP
Edge 지원 O X
TypeScript 우선 설계 타입 추가(별도)
성능 높음 중간
생태계 성장 중 성숙

적합한 사용 사례

  • Edge Runtime: Cloudflare Workers, Vercel Edge Functions
  • 경량 API 서버: 번들 크기가 중요한 환경
  • Next.js Route Handler: App Router의 API 라우트에서 Hono 활용 가능
  • TypeScript 프로젝트: 타입 안전한 API 개발