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

발행: (2026년 1월 6일 오후 01:11 GMT+9)
5 min read
원문: 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과 같은 서버리스 도구와의 쉬운 통합을 제공합니다. 프로토타이핑이든 프로덕션 시스템을 확장하든, 강력하고 현대적인 백엔드 선택입니다.

Back to Blog

관련 글

더 보기 »