API 매시업 프로젝트
지금까지 API를 하나씩 써봤어요. 오늘은 서로 다른 API 두 개 이상을 레고처럼 조합해, 세상에 없던 나만의 멀티 기능 앱을 만듭니다.
오늘 배우는 것
오늘의 핵심은 연결이에요. 첫 API가 돌려준 결과를, 다음 API의 재료로 넘기는 거죠. 작은 기능을 이어 붙여 하나의 앱을 완성합니다.
처음 나오는 것 ① — 공개 API
날씨·환율·지도·번역처럼, 누구나 무료로 정보를 받아 쓸 수 있게 공개된 API예요. 가입 없이 바로 쓸 수 있는 것도 많아요.
처음 나오는 것 ② — requests
파이썬에서 API에게 "이 정보 주세요"라고 요청을 보내고, 답을 받아오는 도구예요. 설치는 수업 중 한 번만 하면 됩니다.
pip install requests로 설치해요.처음 나오는 것 ③ — JSON
API가 돌려주는 데이터 형식이에요. 이름과 값이 짝지어 있어서, 원하는 값만 골라 쓸 수 있어요.
{"날씨":"비", "온도":18} 처럼 생겼어요.매시업 = 레고 조립
매시업은 서로 다른 API를 레고처럼 이어 붙이는 거예요. 핵심은 연결이에요. 첫 API가 돌려준 결과를, 다음 API의 재료로 넘기는 거죠.
두 API를 한 번에 합치면 어디서 틀렸는지 찾기 어려워요. API를 하나씩 따로 작동시켜 본 뒤, 마지막에 연결하는 게 가장 빠른 길이에요.
조합 기획하기
좋은 매시업은 "이런 앱이 있으면 좋겠다"에서 출발해요. 먼저 만들 앱을 정하고, 필요한 정보를 거꾸로 찾아 API를 고릅니다.
① 만들 앱을 한 문장으로
예: "오늘 날씨에 맞는 활동을 추천해주는 앱". 무엇을 입력하면 무엇이 나오는지가 분명해야 해요.
② 입력 → API1 → API2 → 출력 흐름 그리기
③ 조합 아이디어 — 마음에 드는 것 고르기
기획 단계에서도 API가 어떤 모양의 결과를 주는지 미리 한 줄로 찍어보면, 어떤 조합이 될지 감이 잡혀요.
import requests
# 후보 API가 어떤 데이터를 주는지 먼저 찍어보기
weather = requests.get("https://wttr.in/Seoul?format=%C+%t").text
print("날씨 API 결과:", weather)날씨 API 결과: Partly cloudy +21°C- 어떤 API가 있는지 몰라 막힘 → AI에게 종류별 추천을 먼저 요청해요.
- 앱이 너무 거창함 → "입력 1개 → 결과 1개"처럼 작게 시작해요.

단계별 구현
② 그 결과를 API 2에 어떻게 넘길지 생각해 보세요. 떠올랐다면 바로 코드를 받지 말고, 내가 요청할 프롬프트를 한 문장으로 적어 보세요.
① requests 설치
# (venv) 표시 확인 후 설치
pip install requests② API를 부르는 준비 — get_weather와 ask_ai
API 호출은 준비 → 보내기 → 결과 꺼내기 3단계예요. 이걸 함수로 만들어 두면 계속 재사용할 수 있어요. AI 호출은 1주차에서 만든 ask_ai()를 그대로 씁니다.
.env 파일(OPENAI_API_KEY=...)을 그대로 씁니다. 이번 폴더에도 .env 파일이 mashup.py와 같은 위치에 있는지만 확인하세요. 없다면 1주차처럼 Windows는 New-Item .env, Mac은 touch .env로 만들고, 안에 OPENAI_API_KEY=키값 한 줄을 공백·따옴표 없이 넣어요. 코드에는 키를 절대 직접 적지 않아요.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()import requestsclient = OpenAI()def ask_ai(prompt):def get_weather(city):requests.get(url)③ 한 조각씩 확인하고 연결하기
먼저 날씨만 받아 print로 확인하고, 그 결과를 AI에게 넘겨요. 각 단계가 잘 되는지 눈으로 확인하는 게 핵심이에요.
# ① API1: 날씨 받기
weather = get_weather("Seoul")
print("오늘 날씨:", weather)
# ② API1 결과 → API2 재료로 넘기기
activity = ask_ai(f"오늘 날씨는 {weather}야. 어울리는 활동 3가지를 한글로 추천해줘.")
print(activity)weather = get_weather("Seoul")weather라는 상자에 담아둬요.print("오늘 날씨:", weather)f"...{weather}..."activity = ask_ai(...)
오늘 날씨: Light rain shower
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("잠시 후 다시 시도해주세요.")try:except Exception:
보너스 ② 결과 자동 전송
완성된 추천 결과를 이메일이나 메시지로 자동 전송하는 기능을 붙여 보세요. AI에게 방법을 물어보는 것부터 시작해요.
오늘의 핵심 정리
🔧 막혔을 때 — 자가 디버깅 4단계
에러가 떠도 당황하지 마세요. 선생님께 묻기 전에 이 순서대로 스스로 해결해 봅니다.