OpenAI API로 첫 AI 앱 만들기
기초를 익혔으니 이제 코드를 쓸 차례입니다. Node.js를 예로 OpenAI API에 첫 채팅 요청을 보내는 과정을 안내하고, 스트리밍 출력·비용·오류 처리 같은 실전 디테일도 짚어봅니다.
작성자AI Resource Hub
사전 준비
먼저 OpenAI 플랫폼에 가입해 API 키를 만들고 환경 변수에 저장하세요. 절대 코드에 하드코딩하거나 저장소에 커밋해서는 안 됩니다.
export OPENAI_API_KEY="sk-..."SDK 설치
공식 Node.js SDK가 가장 빠른 시작 방법입니다:
npm install openai첫 채팅 요청 보내기
아래 코드는 gpt-4o-mini에 메시지를 보내고 응답을 출력합니다. messages 배열이 대화 기록을 담고, role은 system, user, assistant 중 하나입니다.
import OpenAI from 'openai';
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const res = await client.chat.completions.create({
model: 'gpt-4o-mini',
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'Describe large language models in one sentence.' },
],
});
console.log(res.choices[0].message.content);스트리밍 출력 사용하기
채팅 앱에는 보통 "실시간 타이핑" 효과가 필요합니다. stream을 켜면 생성되는 대로 출력을 받아 경험이 크게 좋아집니다.
const stream = await client.chat.completions.create({
model: 'gpt-4o-mini',
messages: [{ role: 'user', content: 'Write a short poem about spring' }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
}비용과 오류 처리
API는 토큰 단위로 과금됩니다. 합리적인 max_tokens를 정하고 사용량을 지켜보세요. mini 계열처럼 작은 모델을 고르면 비용을 크게 아낄 수 있습니다.
네트워크 요청은 타임아웃이나 속도 제한에 걸릴 수 있습니다. 프로덕션에서는 재시도, 타임아웃, 예외 처리를 더하고, 사용자 입력에 대한 검증과 콘텐츠 검열도 갖추세요.
멀티턴 대화 구축하기
API 호출 한 번이면 질문 하나에 답할 수 있지만, 실제 앱은 대화를 유지해야 합니다. 핵심은 messages 배열을 누적하는 것입니다. 각 라운드 후에 사용자의 메시지와 어시스턴트의 응답을 차례로 추가하고, 다음 호출 때 전체 기록을 보냅니다. system 메시지는 맨 앞에 고정되어 모델 행동을 처음부터 끝까지 잡아 줍니다.
컨텍스트 윈도우를 주의하세요. 매 턴마다 토큰이 늘어납니다. 긴 대화에서는 이전 메시지를 요약하거나 기록을 잘라서 윈도우 안에 유지하고 비용을 절감하세요.
프로토타입에서 프로덕션으로
배포 전에 몇 가지 프로덕션 필수 요소를 추가하세요. 예상치 못한 요금을 막으려 max_tokens 상한을 정하고, 429 속도 제한 오류에 지수 백오프 재시도를 구현하고, 자주 쓰는 프롬프트를 캐시해 토큰을 아끼고, 구조화된 로깅으로 사용 패턴을 추적하고 문제를 디버그하세요.