HonoJS, Drizzle ORM 및 Neon으로 Todo API 만들기 — 초보자 친화적인 가이드

발행: (2026년 1월 6일 오후 01:11 GMT+9)
5 분 소요
원문: Dev.to

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 및 환경 설정

  1. Neon 데이터베이스를 생성하고 연결 문자열을 복사합니다:

    DATABASE_URL="postgres://your-connection-string"
  2. 의존성을 설치합니다:

    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 /todos
  • POST /todos
  • PATCH /todos/:id
  • DELETE /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과 같은 서버리스 도구와의 쉬운 통합을 제공합니다. 프로토타이핑이든 프로덕션 시스템을 확장하든, 강력하고 현대적인 백엔드 선택입니다.

0 조회
Back to Blog

관련 글

더 보기 »

검증은 API의 첫 번째 방어선이다

‘Validation Is Your API’s First Line of Defense’ 표지 이미지 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/http...