지난 시간 우리는 다섯 친구를 만났습니다 — 안티그래비티, 노드제이에스, 깃, 깃허브, 버셀. 오늘은 여섯 번째 친구를 만납니다. Gemini API. 우리 사이트에 “말 걸면 답해주는 심장”을 달아주는 친구예요.
오늘 우리는 식당에 주문을 합니다. 줄여서 API(에이피아이)라고 불러요.
Gemini, OpenAI, 카카오 지도, 네이버 검색, 날씨… 세상의 모든 API가 이 네 가지 구조를 똑같이 따릅니다.
.env라는 비밀의 방을 만들고, 깃허브에는 절대 올라가지 않게 합니다.
본격적으로 시작하기 전에, 한 가지 사실을 짚고 갑니다. 지난주에 우리가 한 git push가 사실 무엇이었는지.
github.com/내아이디로 가기그래서 우리는 오늘 두 가지를 함께 합니다.
.env라는 비밀의 방에 키만 따로 둔다.gitignore로 무시 처리오늘은 빠르게 같은 출발선에 서기 위해, 강사가 미리 준비한 “반제품 스타터”를 다 함께 받아 갑니다. UI는 다 만들어져 있고, Gemini를 부르는 한 자리만 비어 있어요. 그 한 자리를 안티그래비티에게 부탁해서 채우는 게 오늘의 핵심입니다.
github.com/Gloria3513/ai-mini-app-startermy-first-ai-app)app/, lib/, README.md가 보이면 OK.
API 키는 식당 멤버십 카드와 비슷합니다. 식당(Gemini)에 들어갈 때 “저 이 카드 손님이에요”라고 보여주는 거예요. 카드가 없으면 주문을 받아주지 않습니다. 카드를 잃어버리면(공개되면) 다른 사람이 내 카드로 마구 주문하니, 조심해야 해요.
aistudio.google.com 접속AIzaSy...로 시작) 옆 복사 아이콘 클릭.env + .gitignore 15분.gitignore가 이미 잘 되어 있는지 확인3분이 스타터는 .gitignore 파일이 이미 들어 있어요. 우리는 그저 잘 들어 있는지 확인만 합니다.
.gitignore 파일 클릭.env* 라는 줄이 있는지 눈으로 확인.env로 시작하는 모든 파일은 깃이 무시하라” 입니다.
그래서 .env 안에 비밀을 적어둬도 깃허브에 절대 안 올라가요.
.env 파일 만들기5분스타터에 .env.example이라는 “예시 파일”이 있어요. 우리는 이걸 복제해서 진짜 .env를 만듭니다.
.env.example 파일을 같은 폴더에 .env 라는 이름으로 복제해줘. 복제만 하고, 안의 내용은 아직 손대지 마.
안티그래비티가 새 파일을 만들면, 사이드바에 .env가 생깁니다.
.env.example(원본)과 .env(복제본) 두 개가 보이면 OK.
.env 파일에 내 키 붙여넣기3분.env 클릭해서 열기GEMINI_API_KEY=여기에_본인_키를_붙여넣으세요
→ 여기에_본인_키를_붙여넣으세요 자리에 3-2에서 복사한 키를 붙여넣고 저장(⌘S 또는 Ctrl+S).
예시 (이건 가짜 키예요):
GEMINI_API_KEY=AIzaSyAbCdEfGhIjKlMnOpQrStUvWxYz1234567
안티그래비티 AI에게 부탁해봅니다.
지금 git status 를 실행해서 결과를 보여줘. .env 파일이 변경 목록에 보이는지 안 보이는지 알려줘.
.env가 안 보이면 성공. (깃이 진짜로 무시하고 있다는 뜻)
.env.example은 보여도 OK — 그건 예시 파일이라 같이 올라가야 해요.
.env가 변경 목록에 떴다면 → .gitignore에 .env*가 있는지 다시 확인왜 .env가 git status에 보이는지 한국어로 알려줘이제 오늘의 가장 중요한 단계입니다. 스타터에서 딱 한 자리만 비어 있어요 — Gemini를 부르는 함수. 이걸 안티그래비티가 대신 채워주게 합니다.
Gemini와 대화하려면 “정해진 형식의 편지”를 인터넷으로 보내야 합니다. 주소도 외워야 하고, 봉투 모양도 맞춰야 하고, 한 글자라도 틀리면 거절당해요.
그래서 구글이 “전화기”를 만들어줬어요. 이름이 @google/generative-ai입니다.
우리는 그 전화기에 대고 “이거 보내줘”라고만 말하면, 봉투·주소·형식을 전화기가 알아서 챙겨서 보냅니다.
그래서 우리는 전화기를 먼저 깔고, 그 전화기로 부탁합니다. 깐다는 행위가 npm install이에요.
안티그래비티 AI 채팅창에 그대로 부탁하세요.
이 프로젝트에 @google/generative-ai 패키지를 설치해줘. 설치 명령은 직접 치지 말고, 네가 터미널에서 대신 실행해줘. 끝나면 잘 깔렸는지 알려줘.
added 1 package 같은 줄이 뜨고, package.json 파일의
dependencies 안에 @google/generative-ai가 보이면 OK.
app 폴더 펼치기api → gemini → route.ts 클릭// TODO — 여기에 Gemini API 호출 코드를 작성하세요 비슷한 줄이 보이면 OK.
route.ts 파일을 연 상태에서 AI 채팅창에 이 문장을 그대로 붙여넣으세요.
이 route.ts 파일의 TODO 자리를 채워줘.
prompt 변수의 내용을 @google/generative-ai 의 gemini-2.0-flash 모델로 보내고,
답변 텍스트만 { text: '...' } JSON 형태로 NextResponse.json 으로 돌려줘.
API 키는 process.env.GEMINI_API_KEY 에서 읽어줘.
키가 없거나 호출이 실패하면 500 상태와 에러 메시지를 돌려줘.
안티그래비티가 변경안을 보여줍니다. 살펴보고 Apply 또는 Accept를 누르세요.
import { GoogleGenerativeAI } from "@google/generative-ai";가 생기고,
TODO 주석이 사라지면 OK.
gemini-pro 등)을 씀 → 채팅에 한마디: 모델은 정확히 gemini-2.0-flash로 해줘키는 절대 코드에 박지 말고 process.env.GEMINI_API_KEY에서 읽어줘이 파일에서 빨간 줄이 보이는데 무엇이 문제인지 알려줘이제 dev 서버를 실행해줘 (npm run dev). 브라우저에서 어떤 주소를 열어야 하는지 알려줘.
Local: http://localhost:3000 비슷한 줄이 뜨면 켜진 거예요.env 키 오타 확인, dev 서버 재시작 (Ctrl+C 후 다시 npm run dev).env를 수정한 뒤에는 항상 dev 서버를 재시작해야 새 키를 읽습니다.env 파일을 못 봅니다. (당연하죠 — 깃허브에 안 올렸으니까)
그래서 Vercel에게 따로 알려줘야 합니다.
지금까지의 변경 내용을 git에 커밋하고, 내 깃허브 저장소에 푸시해줘. 커밋 메시지는 "Gemini API 연결" 로.
.env 파일이 안 보이는지도 다시 확인.
vercel.com/new 접속GEMINI_API_KEY, Value 자리에 본인 키 붙여넣기.env는 깃허브에 없으니까 못 봐요. 그래서 Vercel 자기 화면에 따로 적어줘야 알게 됩니다.
your-app.vercel.app 같은 주소가 생겨요라이브 사이트에서만 500 에러가 뜬다면:
GEMINI_API_KEY가 있는지 확인your-app.vercel.app 주소를 서로 보내기오늘 Gemini로 한 사이클을 돌렸으니, 다른 API들도 똑같은 원리입니다.
.env에 보관 → ③ 안티그래비티에 부탁해서 호출 코드 작성 → ④ Vercel 환경변수 등록 → ⑤ Redeploy.
오늘 배운 사이클 그대로예요. 평생 다른 API도 직접 붙일 수 있는 베이스가 잡혔습니다.
smartact.kr/workshop/vibecoding/api/worksheet
다음 시간은 “진짜 내 프로젝트로 완성”하는 시간입니다. 두 가지를 준비해 오세요.
오늘 내 사이트 주소는 your-app.vercel.app으로 끝나죠. 다음 주에는 그 자리에 “내가 산 진짜 도메인”을 답니다.
.xyz 도메인 — 첫 1년에 약 ₩1,000~3,000mydiary.xyz, jiyoung-ai.xyz)vercel.app 그대로 써도 됩니다저장소 첫 페이지에 보이는 그 글이 README.md입니다. 일종의 “내 프로젝트 자기소개서”예요. 다음 주에 같이 다듬을 거니, 일단 빈 자리에 한국어로 3가지만 채워 오세요.
.env 파일은 깃허브에 안 올라가 있다localhost:3000)에서 AI 답변이 뜬다| 증상 | 해결 |
|---|---|
| 로컬에선 되는데 라이브 사이트에선 500 에러 | Vercel Environment Variables 등록 + Redeploy |
.env가 깃허브에 같이 올라갔다 |
안티그래비티에 실수로 .env가 깃에 올라갔어. 안전하게 빼주고, 키도 새로 발급받게 안내해줘 |
| 키를 수정했는데 답변이 그대로 | dev 서버 재시작 (Ctrl+C → npm run dev) |
| “quota exceeded” 에러 | 잠시 기다리거나 AI Studio에서 새 키 발급 |
| 한국어 답변이 어색 | lib/prompts.ts 파일 열어서 프롬프트 문장 다듬기 |
| API | 다른 서비스의 기능을 “주문해서 받아쓰는 창구” |
| 키 (API key) | 내가 그 창구를 쓸 수 있게 해주는 멤버십 카드 |
| .env | 비밀(키, 비밀번호)을 보관하는 파일. 코드에 직접 박지 않기 위해 |
| .gitignore | 깃이 무시할 파일 목록. 여기에 .env를 적어두면 안 올라감 |
| 패키지 (package) | 누군가가 미리 잘 짜둔 코드 묶음. 빌려쓰는 도구 |
| npm install | 그 도구를 내 프로젝트에 깔기 |
| 환경변수 | 코드 밖에 따로 두는 “설정값”. .env나 Vercel 화면에 들어감 |
| Redeploy | 환경변수를 바꾼 뒤 “다시 배포” 해서 적용시키기 |