Chat SDK 테스트 (작성중)

7/8/2026

Vercel의 Chat SDK를 이용한 디코 봇 개발

Chat SDK를 이용해 아루 컨셉의 AI 디코 봇을 만든 경험을 공유합니다.

사용 스택

  • Chat SDK - 이번에 사용한 봇 개발
  • AI SDK - AI 응답용, 마찬가지로 Vercel에서 개발, 추후 따로 소개 예정
  • Hono - 봇 호스트
  • Postgres - Chat SDK의 여러 어댑터 중 사용하던 Postgres 연결
  • Open Webui - 로컬 모델 설정

주요 코드

설명 이미지

프로젝트 구조

backend
.env
.gitignore
dockerfile
drizzle.config.ts
package-lock.json
package.json
README.md
tsconfig.json
├───drizzle
0000_wise_hitman.sql
relations.ts
schema.ts
└───meta
0000_snapshot.json
_journal.json
└───src
index.tsx
├───components
Home.tsx
├───lib
agent.ts
bot.tsx
db.ts
tools.ts
└───routes
ai.ts
discord.ts
mcp.ts
test.ts
user.ts

봇 세팅

src/lib/bot.tsx
export const bot = new Chat({
userName: "아루",
adapters: {
discord: createDiscordAdapter(),
// slack: createSlackAdapter(), // 다양한 어댑터를 제공하기에 여러 채널 봇을 동시 개발 가능
},
state: createPostgresState({
url: process.env.DATABASE_URL_BLISS
}),
fallbackStreamingPlaceholderText: "(완벽한 계획을 구상 중...)"
});

봇 초기화 용 API 전체 코드

src/routes/discord.ts
import { Hono } from "hono";
import { bot } from "../lib/bot.js";
const discord = new Hono()
discord.post('/webhooks', async (c) => {
const handler = bot.webhooks['discord']
return handler(c.req.raw)
})
discord.get('/gateway', async (c) => {
await bot.initialize();
const discord = bot.getAdapter('discord');
if (!discord) {
return c.json({ message: 'Discord 어댑터 설정이 되어 있지 않아! 다시 확인해줘!' }, 404);
}
const baseUrl = process.env.SITE_URL || 'http://localhost:3000';
const webhookUrl = `${baseUrl}/v1/discord/webhooks`;
const durationMs = 60 * 60 * 1000;
// ⚡️ 포인트: await를 제거하거나, 최소한의 검증만 하고 백그라운드로 실행!
// Node 환경이므로 굳이 waitUntil 구조를 복잡하게 가져갈 필요 없이
// 그냥 비동기 함수로 실행하고 catch만 잘 해주면 돼.
discord.startGatewayListener(
{
waitUntil: (task) => { task.catch(err => console.error('⚠️ 게이트웨이 작업 중 에러 발생:', err)); },
},
durationMs,
undefined,
webhookUrl,
).catch(err => console.error('❌ 게이트웨이 시작 실패:', err));
// 유저에게는 즉시 "시작했다!"고 알려주는 게 훨씬 친화적이지!
return c.json({
message: '후후, 게이트웨이 연결을 시작했어! 잠시만 기다려줘, 선생님!',
status: 'starting'
});
});
export default discord

참조