API 매시업 프로젝트
지금까지 API를 하나씩 써봤어요. 오늘은 서로 다른 API 두 개 이상을 레고처럼 조합해, 세상에 없던 나만의 멀티 기능 앱을 만듭니다.
오늘 배우는 것
오늘의 핵심은 연결이에요. 첫 API가 돌려준 결과를, 다음 API의 재료로 넘기는 거죠. 작은 기능을 이어 붙여 하나의 앱을 완성합니다.
처음 나오는 것 ① — 공개 API
날씨·환율·지도·번역처럼, 누구나 무료로 정보를 받아 쓸 수 있게 공개된 API예요. 가입 없이 바로 쓸 수 있는 것도 많아요.
처음 나오는 것 ② — requests
파이썬에서 API에게 "이 정보 주세요"라고 요청을 보내고, 답을 받아오는 도구예요. 설치는 수업 중 한 번만 하면 됩니다.
pip install requests로 설치해요.처음 나오는 것 ③ — JSON
API가 돌려주는 데이터 형식이에요. 이름과 값이 짝지어 있어서, 원하는 값만 골라 쓸 수 있어요.
{"날씨":"비", "온도":18} 처럼 생겼어요.매시업 = 레고 조립
매시업은 서로 다른 API를 레고처럼 이어 붙이는 거예요. 핵심은 연결이에요. 첫 API가 돌려준 결과를, 다음 API의 재료로 넘기는 거죠.
두 API를 한 번에 합치면 어디서 틀렸는지 찾기 어려워요. API를 하나씩 따로 작동시켜 본 뒤, 마지막에 연결하는 게 가장 빠른 길이에요.
조합 기획하기
좋은 매시업은 "이런 앱이 있으면 좋겠다"에서 출발해요. 먼저 만들 앱을 정하고, 필요한 정보를 거꾸로 찾아 API를 고릅니다.
① 만들 앱을 한 문장으로
예: "오늘 날씨에 맞는 활동을 추천해주는 앱". 무엇을 입력하면 무엇이 나오는지가 분명해야 해요.
② 입력 → API1 → API2 → 출력 흐름 그리기
③ 조합 아이디어 — 마음에 드는 것 고르기
- 어떤 API가 있는지 몰라 막힘 → AI에게 종류별 추천을 먼저 요청해요.
- 앱이 너무 거창함 → "입력 1개 → 결과 1개"처럼 작게 시작해요.
단계별 구현
② 그 결과를 API 2에 어떻게 넘길지 생각해 보세요. 떠올랐다면 바로 코드를 받지 말고, 내가 요청할 프롬프트를 한 문장으로 적어 보세요.
① requests 설치
# (venv) 표시 확인 후 설치
pip install requests② API를 부르는 준비 — get_weather와 ask_ai
1단계 — VS Code 터미널에서 수업 폴더 안에 파일 만들기
# Windows
New-Item .env
# Mac
touch .env2단계 — .env 파일을 열고 아래 한 줄 입력 (선생님이 알려준 키 사용)
OPENAI_API_KEY=여기에_선생님이_알려준_키_붙여넣기⚠️ 키 앞뒤에 공백이나 따옴표 없이 딱 붙여서 저장하세요. .env 파일은 코드와 같은 폴더에 있어야 해요.
API 호출은 준비 → 보내기 → 결과 꺼내기 3단계예요. 이걸 함수로 만들어 두면 계속 재사용할 수 있어요. AI 호출은 1주차에서 만든 ask_ai()를 그대로 씁니다.
import requests
from openai import OpenAI
client = OpenAI() # 키는 .env / secrets에서 자동으로
def ask_ai(prompt):
res = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}])
return res.choices[0].message.content
def get_weather(city):
url = f"https://wttr.in/{city}?format=%C"
return requests.get(url).text.strip()③ 한 조각씩 확인하고 연결하기
먼저 날씨만 받아 print로 확인하고, 그 결과를 AI에게 넘겨요. 각 단계가 잘 되는지 눈으로 확인하는 게 핵심이에요.
# ① API1: 날씨 받기
weather = get_weather("Seoul")
print("오늘 날씨:", weather)
# ② API1 결과 → API2 재료로 넘기기
activity = ask_ai(f"오늘 날씨는 {weather}야. 어울리는 활동 3가지를 한글로 추천해줘.")
print(activity)
오늘 날씨: Partly cloudy
1. 가벼운 산책 — 흐리지만 비는 안 와요.
2. 카페에서 책 읽기 — 선선한 날씨에 딱.
3. 사진 찍기 — 부드러운 빛이 좋아요.- 연결했더니 결과가 이상해요 → 먼저
print로 첫 API 결과 모양을 확인해요. - 한글이 깨져요 → 프롬프트에 "한글로 답해줘"를 넣어요.
401에러 →.env키 철자·따옴표를 확인. 키는 선생님이 관리해요.
🔒 힌트 — 연결이 자꾸 안 돼요 (참고 코드)
핵심은 첫 결과를 변수에 담아, 둘째 요청 문장 안에 그 변수를 끼워 넣는 거예요.
weather = get_weather("Seoul") # 첫 결과를 변수에
msg = f"오늘 날씨는 {weather}야. 활동 추천해줘." # 재료로 끼워넣기
print(ask_ai(msg))매시업 앱 완성하기
두 API가 연결돼 결과가 나왔다면 이미 목표를 달성한 거예요. 여기에 하나만 더 골라 추가해 봅시다.
🃏 선택지 카드 — 무엇을 더할까?
- 욕심내다 미완성 → "기존 기능은 그대로 두고 ~만 추가해줘"라고 요청해요.
- 기능 추가하다 기존 코드가 깨짐 → 추가 전 코드를 한 번 복사해 둬요.
더 해보고 싶다면
미션 3까지 끝내고 시간이 남는다면 도전해 보세요. 끝내지 못해도 괜찮습니다.
보너스 ① 에러 핸들링 — 앱이 안 멈추게
API가 응답을 못 줄 때도 프로그램이 멈추지 않게 만들어요. try / except로 감싸면 진짜 앱처럼 튼튼해져요.
try:
weather = get_weather("Seoul")
print(ask_ai(f"날씨는 {weather}야. 활동 추천해줘."))
except Exception:
print("잠시 후 다시 시도해주세요.")보너스 ② 결과 자동 전송
완성된 추천 결과를 이메일이나 메시지로 자동 전송하는 기능을 붙여 보세요. AI에게 방법을 물어보는 것부터 시작해요.
오늘의 핵심 정리
🔧 막혔을 때 — 자가 디버깅 4단계
에러가 떠도 당황하지 마세요. 선생님께 묻기 전에 이 순서대로 스스로 해결해 봅니다.