AI를 통한 선

발행: (2026년 5월 7일 AM 11:05 GMT+9)
3 분 소요
원문: Dev.to

Source: Dev.to

AI를 위한 좋은 커버 이미지

AI 챗봇 만들기는 어렵지 않다 — 유용하게 만드는 것이 관건 (실제 프로젝트에서 얻은 교훈)

한 달 전, Lambda 함수를 사용해 이력서 코치 AI 챗봇을 만들고 Vercel(프론트엔드 개발자를 위한 주요 클라우드 플랫폼)에 배포하면서 테스트 중 Vercel 로그에 타임아웃 오류가 계속 발생했습니다. 문제를 디버깅하던 중 response.json()을 사용하고 있었고, 응답을 스트리밍하지 않아 Vercel에서 타임아웃 ⌛️ 오류가 발생한다는 것을 알게 되었습니다. Lambda 함수를 스트림을 사용하도록 업데이트한 뒤 모든 것이 원활하게 동작했습니다.

💡 챗봇 UI는 React로 구축했습니다: https://buildcv.makeadifference.app.

ai for good

왜 Lambda에서 스트림을 사용해야 할까요?

스트림은 AI 챗봇이나 대화형 애플리케이션에 이상적입니다. 스트리밍을 통해 사용자는 전체 응답을 기다리지 않고 점진적으로 출력을 받아 보다 인터랙티브한 경험을 할 수 있기 때문입니다.

API를 구축한 경험을 바탕으로 텍스트 응답에는 스트림을, CRUD 작업이나 비즈니스 로직 구현에는 JSON을 사용하는 것을 권장합니다.

Lambda / 서버리스 함수

// Request streamed response from AI model
const stream = AI.generateStream(userPrompt);

res.setHeader("Content-Type", "text/plain; charset=utf-8");
res.setHeader("Cache-Control", "no-cache");

// Return chunks immediately to frontend
for await (const chunk of stream) {
  const text = chunk.text;
  if (text) {
    res.write(text);
  }
}

res.end();

프론트엔드 (React)

const response = await fetch("api/chat");

const reader = response.body.getReader();
const decoder = new TextDecoder();

let fullText = "";

while (true) {
  const { value, done } = await reader.read();
  if (done) break;

  const chunk = decoder.decode(value);
  fullText += chunk;
}

if (!response.ok) {
  throw new Error(`Failed to get response: ${response.status}`);
}

💡 Vercel은 전체 응답이 생성될 때까지 기다리는 대신 데이터를 청크 단위로 클라이언트(프론트엔드)에게 전송할 수 있게 해줍니다.

여러분은 AI를 활용해 무엇을 만들고 있나요?

AI를 사용하면서 겪은 문제는 없었나요? 있었다면 어떻게 해결했는지 공유해 주세요.

행복한 학습 되세요 🎉

0 조회
Back to Blog

관련 글

더 보기 »

Gemini CLI에 Subagents가 도입되었습니다

2026년 4월 15일 — 서브에이전트는 Gemini CLI가 복잡하고 반복적이거나 대량의 작업을 전문화된 전문가 에이전트에 위임할 수 있게 합니다. 각 서브에이전트는 자신의…