HonoJS, Drizzle ORM 및 Neon으로 Todo API 만들기 — 초보자 친화적인 가이드
Source: Dev.to
Source: …
🚀 HonoJS 시작하기 — 라우팅 + Drizzle + Neon Todo API
HonoJS는 Node.js, Bun, Deno 및 Cloudflare Workers, Vercel Edge Functions와 같은 엣지 런타임을 위한 초고속, 경량 웹 프레임워크입니다.
이 튜토리얼에서 여러분은:
- Hono에서 간단한 라우팅을 배우고
- Drizzle ORM + Neon PostgreSQL을 사용해 Todo API를 구축하고
- 이 스택이 현대 백엔드에 왜 좋은지 논의하고
- Hono로 만든 두 개의 실제 앱을 살펴봅니다
왜 HonoJS인가?
- 극도로 빠르고 가벼움
- 멀티 런타임 호환
- TypeScript 우선
- 미들웨어 친화적
Express와 비슷한 파워를 제공하지만 엣지 및 서버리스 환경에 최적화되어 있습니다.
npm create hono@latest
# or
pnpm create hono@latest
yarn create hono@latest
기본 예제 (index.ts)
import { Hono } from 'hono';
const app = new Hono();
app.get('/', (c) => c.text('👋 Hello from Hono!'));
app.get('/api/hello', (c) => {
return c.json({ message: 'This is a JSON response!' });
});
export default app;
npm run dev
이제 깔끔하고 타입‑안전한 라우팅을 갖춘 완전한 API가 실행됩니다.
Hono + Drizzle + Neon을 이용한 Todo API
우리는 다음을 결합합니다:
- Hono → API 라우터
- Neon → 서버리스 PostgreSQL
- Drizzle ORM → 타입‑안전 데이터베이스 레이어
🧠 Step 1 — Neon 및 환경 설정
-
Neon 데이터베이스를 생성하고 연결 문자열을 복사합니다:
DATABASE_URL="postgres://your-connection-string" -
의존성을 설치합니다:
npm install hono @neondatabase/serverless drizzle-orm drizzle-kit
스키마 정의 (src/db/schema.ts)
import { pgTable, serial, text, boolean, timestamp } from 'drizzle-orm/pg-core';
export const todos = pgTable('todos', {
id: serial('id').primaryKey(),
content: text('content').notNull(),
completed: boolean('completed').default(false).notNull(),
createdAt: timestamp('created_at').defaultNow().notNull(),
});
Drizzle 초기화 (src/db/index.ts)
import { drizzle } from 'drizzle-orm/neon-http';
import { neon } from '@neondatabase/serverless';
import * as schema from './schema';
const sql = neon(process.env.DATABASE_URL!);
export const db = drizzle(sql, { schema });
API 구축 (src/app.ts)
import { Hono } from 'hono';
import { db } from './db';
import { todos } from './db/schema';
const app = new Hono();
// Get all todos
app.get('/todos', async (c) => {
const all = await db.select().from(todos);
return c.json(all);
});
// Create a todo
app.post('/todos', async (c) => {
const { content } = await c.req.json();
const newTodo = await db.insert(todos).values({ content }).returning();
return c.json(newTodo);
});
// Mark a todo as completed
app.patch('/todos/:id', async (c) => {
const id = Number(c.req.param('id'));
const updated = await db
.update(todos)
.set({ completed: true })
.where(todos.id.eq(id))
.returning();
return c.json(updated);
});
// Delete a todo
app.delete('/todos/:id', async (c) => {
const id = Number(c.req.param('id'));
await db.delete(todos).where(todos.id.eq(id));
return c.text('Deleted');
});
export default app;
이제 완전한 REST API가 준비되었습니다:
GET /todosPOST /todosPATCH /todos/:idDELETE /todos/:id
🧩 Stack Summary
- Hono – 빠르고 엣지‑준비
- Drizzle – 타입‑안전 SQL
- Neon – 확장 가능한 서버리스 Postgres
마이크로서비스와 API에 최적입니다.
🙌 Hono를 활용한 실제 프로젝트
- MoneySense.ai – 스마트한 금융 인사이트
- MenuGo.live – 현대적인 디지털 레스토랑 플랫폼
두 프로젝트 모두 신뢰성과 성능을 위해 Hono 기반 백엔드에 의존합니다.
Todo API 확장하기
다음 항목을 고려해 보세요:
- 인증 (JWT, Clerk, Lucia)
- Zod를 사용한 요청 검증
- 분석 및 로깅
- Todo API를 위한 프런트엔드 UI
결론
HonoJS는 edge‑ready 성능, 깔끔한 라우팅, 강력한 TypeScript 지원, 그리고 Neon과 같은 서버리스 도구와의 쉬운 통합을 제공합니다. 프로토타이핑이든 프로덕션 시스템을 확장하든, 강력하고 현대적인 백엔드 선택입니다.