← 목록으로

AI 기능을 서비스에 통합하는 방법

OpenAI, Anthropic API를 활용해 서비스에 AI 기능을 추가하는 방법과 비용 관리, 프롬프트 엔지니어링 기초를 설명합니다.

AI API 통합은 이제 어렵지 않습니다. OpenAI, Anthropic, Google 등이 쉽게 쓸 수 있는 API를 제공하고, Next.js 같은 프레임워크와 통합하는 SDK도 잘 정비되어 있습니다. 이 글에서는 실용적인 AI 기능 통합 방법을 설명합니다.

AI API 선택

OpenAI (GPT-4o, GPT-4o-mini)

가장 많이 사용되는 AI API입니다. 텍스트 생성, 분류, 요약, 번역, 코드 생성 등 다양한 작업에 적합합니다.

GPT-4o-mini: 가격이 저렴하고 빠릅니다. 대부분의 사이드 프로젝트 용도에 충분합니다.

  • 입력: $0.15 / 1M 토큰
  • 출력: $0.60 / 1M 토큰

GPT-4o: 더 높은 품질이 필요할 때. GPT-4o-mini보다 약 10배 비쌉니다.

Anthropic (Claude 3.5 Sonnet, Claude Haiku)

복잡한 추론, 긴 컨텍스트 처리에 강합니다. 안전성과 정확성이 높게 평가됩니다.

Claude Haiku: 가장 빠르고 저렴한 Claude 모델. 간단한 분류, 요약 작업에 적합합니다.

Google Gemini

멀티모달(텍스트 + 이미지 + 오디오) 처리에 강점이 있습니다. Google Cloud 생태계와 잘 통합됩니다.

기본 API 통합

OpenAI SDK 설치

npm install openai

텍스트 생성 기본 예시

import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});

async function generateText(prompt: string): Promise<string> {
  const response = await client.chat.completions.create({
    model: 'gpt-4o-mini',
    messages: [
      { role: 'user', content: prompt }
    ],
    max_tokens: 500,
  });

  return response.choices[0].message.content ?? '';
}

스트리밍 응답

AI 응답이 길 때 스트리밍으로 받으면 사용자가 결과를 빠르게 볼 수 있습니다.

// Next.js API Route with streaming
export async function POST(req: Request) {
  const { prompt } = await req.json();

  const stream = await client.chat.completions.create({
    model: 'gpt-4o-mini',
    messages: [{ role: 'user', content: prompt }],
    stream: true,
  });

  const encoder = new TextEncoder();
  const readable = new ReadableStream({
    async start(controller) {
      for await (const chunk of stream) {
        const text = chunk.choices[0]?.delta?.content ?? '';
        controller.enqueue(encoder.encode(text));
      }
      controller.close();
    },
  });

  return new Response(readable, {
    headers: { 'Content-Type': 'text/plain' },
  });
}

Vercel AI SDK 활용

Next.js에서 AI를 가장 쉽게 통합하는 방법입니다.

npm install ai @ai-sdk/openai
import { streamText } from 'ai';
import { openai } from '@ai-sdk/openai';

export async function POST(req: Request) {
  const { messages } = await req.json();

  const result = streamText({
    model: openai('gpt-4o-mini'),
    messages,
    system: '당신은 유용한 어시스턴트입니다.',
  });

  return result.toDataStreamResponse();
}

클라이언트:

import { useChat } from 'ai/react';

export function Chat() {
  const { messages, input, handleInputChange, handleSubmit } = useChat();

  return (
    <div>
      {messages.map(m => (
        <div key={m.id}>{m.role}: {m.content}</div>
      ))}
      <form onSubmit={handleSubmit}>
        <input value={input} onChange={handleInputChange} />
        <button type="submit">전송</button>
      </form>
    </div>
  );
}

프롬프트 엔지니어링 기초

프롬프트를 어떻게 작성하느냐에 따라 AI 응답 품질이 크게 달라집니다.

시스템 프롬프트 활용

시스템 프롬프트로 AI의 역할과 제약을 설정합니다.

const messages = [
  {
    role: 'system',
    content: `당신은 한국어로 이메일을 작성하는 전문가입니다.
    - 항상 공손하고 전문적인 어조를 사용합니다
    - 불필요한 내용 없이 간결하게 작성합니다
    - 이메일 제목과 본문을 모두 작성합니다`
  },
  {
    role: 'user',
    content: '거래처에 납품 지연을 안내하는 이메일을 작성해주세요'
  }
];

Few-shot 예시 제공

원하는 출력 형식을 예시로 보여줍니다.

const prompt = `
상품 리뷰를 긍정/부정/중립으로 분류하세요.

예시:
"배송이 빨랐어요. 너무 좋아요!" → 긍정
"품질이 기대보다 별로예요" → 부정
"보통이에요. 특별하지 않네요" → 중립

분류할 리뷰: "${userReview}"
분류 결과:`;

비용 관리

AI API 비용은 토큰 수에 비례합니다. 1,000 토큰은 대략 한국어 500~700자 수준입니다.

비용 최적화 방법

더 작은 모델 사용: GPT-4o-mini나 Claude Haiku는 GPT-4o보다 10배 이상 저렴합니다. 간단한 작업에는 작은 모델로 충분합니다.

프롬프트 최소화: 불필요한 설명을 줄이면 입력 토큰이 줄어듭니다.

캐싱: 같은 입력에 대한 응답을 캐싱하면 API 호출을 줄일 수 있습니다.

max_tokens 설정: 응답 최대 토큰 수를 제한해 예상치 못한 긴 응답으로 인한 비용 증가를 방지합니다.

비용 예측

월 1,000명의 사용자가 GPT-4o-mini를 사용해 평균 1,000 토큰(입력 + 출력)을 쓴다면:

  • 월 1,000,000 토큰
  • 비용: 약 $0.375 (약 500원)

일반적인 사이드 프로젝트에서 AI API 비용은 매우 저렴합니다. 사용자당 평균 비용을 계산해 서비스 요금 설계에 반영하세요.

Rate Limit과 에러 처리

API 호출이 실패할 수 있습니다. 재시도 로직을 구현하세요.

async function callWithRetry(prompt: string, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await generateText(prompt);
    } catch (error) {
      if (i === maxRetries - 1) throw error;
      // Rate limit 오류면 잠시 대기 후 재시도
      await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));
    }
  }
}

AI 기능 통합은 이제 복잡하지 않습니다. API 키를 발급받고 SDK를 설치하면 30분 안에 기본 기능을 구현할 수 있습니다. 작게 시작해서 사용자 반응을 보면서 확장하는 것이 좋습니다.