첫 번째 AI 앱 만들기: 초보자를 위한 코드 중심 가이드
요약
Next.js, TypeScript, OpenAI API를 사용하여 실질적인 AI 텍스트 생성기를 구축하는 단계별 가이드입니다. 이론보다는 코드 중심의 구현을 통해 초보 개발자가 직접 AI 앱을 만드는 과정을 다룹니다.
핵심 포인트
- Next.js App Router를 활용한 풀스택 AI 앱 구조 설계
- OpenAI SDK 설치 및 API 키 보안 관리 방법
- Next.js Route Handlers를 이용한 안전한 백엔드 API 구축
- TypeScript 기반의 안정적인 AI 서비스 구현
고차원적인 이론이나 인공 일반 지능 (AGI)에 대한 끝없는 논쟁은 잊으세요. 실제로 AI를 사용하여 무언가를 만들고자 하는 개발자라면, 가장 좋은 학습 방법은 코드를 작성하는 것입니다.
이 가이드에서는 Next.js, TypeScript, 그리고 OpenAI API를 사용하여 기능적인 AI 텍스트 생성기를 구축할 것입니다. 군더더기나 추상적인 개념 없이, 오직 한 줄씩 이어지는 코드와 실질적인 구현만을 다룹니다.
사전 요구 사항
코드를 작성하기 전에 다음 사항들이 준비되었는지 확인하세요:
Node.js가 기기에 설치되어 있어야 합니다.
코드 에디터 (VS Code를 권장합니다).
OpenAI API 키 (OpenAI 개발자 대시보드에서 발급받으세요).
1단계: 프로젝트 설정
우리는 이번 빌드에 Next.js (App Router)를 사용합니다. 그 이유는 프론트엔드 UI와 백엔드 API 라우트(API routes)를 하나의 저장소에서 모두 처리할 수 있기 때문입니다.
터미널을 열고 다음을 실행하세요:
npx create-next-app@latest my-first-ai-app
설정 과정에서 다음 옵션들을 선택하세요:
TypeScript: Yes
ESLint: Yes
Tailwind CSS: Yes
src/ directory: No
App Router: Yes
Customize default import alias: No
새 프로젝트 디렉토리로 이동하여 공식 OpenAI SDK를 설치하세요:
cd my-first-ai-app
npm install openai
API 키를 안전하게 저장하기 위해 프로젝트 루트에 .env.local이라는 이름의 파일을 생성하세요:
OPENAI_API_KEY=your_actual_api_key_here
이 파일을 GitHub에 절대 커밋하지 마세요 (Next.js는 기본적으로 .env.local을 자동으로 무시합니다).
2단계: API 라우트 구축 (백엔드)
API 키가 클라이언트에 노출되지 않도록 AI 요청을 실행할 안전한 장소가 필요합니다. Next.js의 라우트 핸들러 (Route Handlers)가 이에 완벽하게 부합합니다.
app/api/generate/route.ts 위치에 새 파일을 생성하고 다음 코드를 추가하세요:
import { NextResponse } from 'next/server';
import OpenAI from 'openai';
// API 키로 OpenAI 클라이언트를 초기화합니다
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
export async function POST(request: Request) {
try {
// 프론트엔드로부터 들어오는 JSON 페이로드 (JSON payload)를 파싱합니다
const body = await request.json();
const { prompt } = body;
// 프롬프트 (prompt)가 실제로 제공되었는지 확인합니다
if (!prompt) {
return NextResponse.json(
...
} catch (error) {
// 에러 처리 (예: 속도 제한 (rate limits), 잘못된 키 (invalid keys))
console.error('AI API Error:', error);
return NextResponse.json(
{ error: 'Failed to generate response' },
{ status: 500 }
);
}
}
한 줄씩 분석하기:
import { NextResponse }...: 브라우저로 데이터를 다시 보내기 위해 Next.js의 내장 응답 핸들러 (response handler)를 가져옵니다.
const openai = new OpenAI(...): 이는 OpenAI 클라이언트 (client)를 인스턴스화합니다. 자동으로 process.env.OPENAI_API_KEY를 찾습니다.
export async function POST(request: Request): 이는 HTTP POST 엔드포인트 (endpoint)를 정의합니다. 페이로드 (payload, 즉 프롬프트)를 전송하므로 AI 생성은 항상 POST 요청이어야 합니다.
const body = await request.json(): 프론트엔드에서 보낸 JSON 본문 (body)을 추출합니다.
openai.chat.completions.create(...): 이것이 핵심 엔진입니다. 모델 (model, 초보자에게는 빠르고 저렴한 GPT-3.5-turbo가 적합합니다)을 지정하고, AI의 성격 (personality)을 정의하기 위해 시스템 메시지 (system message)를 설정하며, 사용자 프롬프트 (user prompt)를 전달합니다.
temperature: 0.7: 창의성 (creativity)을 조절합니다. 0은 로봇처럼 정확하며, 1은 매우 창의적입니다. 0.7은 적절한 중간 지점입니다.
completion.choices[0].message.content: OpenAI API는 깊게 중첩된 JSON 객체 (object)를 반환합니다. 이 특정 경로는 AI 답변의 가공되지 않은 텍스트 (raw text)만을 추출합니다.
단계 3: 사용자 인터페이스 구축 (프론트엔드 (The Frontend))
이제 사용자가 프롬프트를 입력하고 AI의 응답을 읽을 수 있는 시각적 인터페이스를 구축해 보겠습니다.
app/page.tsx 파일을 열고, 기본 코드 (boilerplate code)를 삭제한 뒤 다음 코드로 교체하세요:
'use client';
import { useState } from 'react';
export default function Home() {
// 입력, 출력 및 로딩 상태를 관리하기 위한 상태 변수 (State variables)
const [input, setInput] = useState('');
const [output, setOutput] = useState('');
const [isLoading, setIsLoading] = useState(false);
// 사용자가 "Generate"를 클릭했을 때 실행되는 함수
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (!input) return;
setIsLoading(true);
setOutput('');
...
};
return (
나의 첫 번째 AI 생성기 (My First AI Generator)
<form onSubmit={handleSubmit} className="flex flex-col gap-4">
<textarea
className="w-full p-4 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 text-black"
...
);
}
한 줄씩 분석하기 (Line-by-Line Breakdown):
'use client';: 이 컴포넌트가 브라우저에서 실행됨을 나타내는 필수적인 Next.js 지시어(directive)로, React Hooks를 사용할 수 있게 합니다.
const [input, setInput] = useState('');: 사용자가 textarea에 입력하는 텍스트를 관리합니다.
const [output, setOutput] = useState('');: AI가 반환한 최종 응답을 저장합니다.
const [isLoading, setIsLoading] = useState(false);: API 응답을 기다리는 동안 사용자가 제출 버튼을 반복해서 누르는 것을 방지합니다.
const response = await fetch('/api/generate', ...): 2단계에서 생성한 백엔드 라우트(backend route)를 호출하며, 사용자의 입력을 JSON 문자열로 전달합니다.
if (!response.ok): 백엔드 에러(400 또는 500 상태 코드 등)를 포착하고, catch 블록에서 처리될 수 있도록 예외(exception)를 발생시킵니다.
className="...": Tailwind CSS 유틸리티 클래스를 사용하여 앱의 스타일을 빠르게 지정합니다.
whitespace-pre-wrap: AI 텍스트 포맷팅을 위한 중요한 CSS 클래스입니다. AI가 생성한 줄 바꿈과 단락이 하나의 텍스트 블록으로 뭉쳐지지 않고 화면에 실제로 렌더링되도록 보장합니다.
4단계: 실행 및 테스트
개발 서버를 시작하세요:
npm run dev
브라우저에서 http://localhost:3000을 여세요.
상자 안에 "두 문장으로 된 공포 이야기를 써줘"와 같은 프롬프트(Prompt)를 입력하고 Generate를 누르세요. 당신은 방금 완전히 작동하는 풀스택 (Full-stack) AI 애플리케이션을 구축했습니다.
다음 단계: 당신의 AI 기술으로 수익 창출하기
코드를 작성하는 것은 방정식의 절반일 뿐입니다. 나머지 절반은 그 기술적 실행을 실질적인 수익원으로 전환하는 것입니다. API를 연결하는 방법을 아는 것만으로는 부족합니다. 결과물을 패키징하고 판매하는 방법을 모른다면 말이죠.
이러한 기초를 마스터했다면, 다음과 같은 여러 가지 방법으로 이 기술을 수익화할 수 있습니다:
마이크로 SaaS (Micro-SaaS): 니치(Niche)한 AI 도구(예: 특정 산업군을 위한 AI 자기소개서 생성기)를 구축하고 월간 구독료를 받으세요.
프리랜서 통합 (Freelance Integration): 많은 전통적인 기업들이 기존 사이트에 AI를 통합하고 싶어 하지만 그 방법을 모릅니다. 당신은 그들의 고객 서비스를 위한 맞춤형 AI 챗봇(Chatbot)을 구축하는 서비스를 제공할 수 있습니다.
디지털 제품 (Digital Products): 특정하고 고도로 최적화된 프롬프트(Prompt)와 작은 스크립트(Script)들을 비개발자들에게 판매할 수 있는 템플릿으로 패키징하세요.
단순히 코드를 작성하는 것에서 벗어나 실제로 디지털 제품과 기술적 기술을 수익화하는 방법에 대한 실질적이고 실행 가능한 단계를 찾고 있다면, VectricEarn은 공부하기에 매우 훌륭한 리소스입니다. 이곳은 콘텐츠의 비즈니스 측면, 원격 근무 기회, 그리고 디지털 수익화에 중점을 두고 있으며, 당신의 새로운 AI 개발 기술을 실제 매출로 전환하는 데 필요한 청사진을 제공합니다.
계속해서 구축하고, 계속해서 출시(Shipping)하며, 당신의 코드를 하나의 제품으로 바라보기 시작하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기