AI 파이썬 Lab · 심화 · 4주차
심화 · API 매시업

API 매시업 프로젝트

지금까지 API를 하나씩 써봤어요. 오늘은 서로 다른 API 두 개 이상을 레고처럼 조합해, 세상에 없던 나만의 멀티 기능 앱을 만듭니다.

오늘의 목표

오늘 배우는 것

오늘의 핵심은 연결이에요. 첫 API가 돌려준 결과를, 다음 API의 재료로 넘기는 거죠. 작은 기능을 이어 붙여 하나의 앱을 완성합니다.

🧩
GOAL 1
여러 API를 조합하는 매시업의 뜻을 이해한다
📝
GOAL 2
조합할 API 2개와 만들 앱을 직접 기획한다
🔗
GOAL 3
한 조각씩 작동시켜 연결한 매시업 앱을 완성한다
새 개념 ①

처음 나오는 것 ① — 공개 API

날씨·환율·지도·번역처럼, 누구나 무료로 정보를 받아 쓸 수 있게 공개된 API예요. 가입 없이 바로 쓸 수 있는 것도 많아요.

🌍
공개 API
누구나 무료로 정보를 받아 쓸 수 있게 열어둔 API예요. 날씨·환율·번역 등 종류가 많아요.
배달앱에 비유하면 식당은 정보를 가진 곳, 라이더는 그 정보를 가져다주는 API예요. 우리는 주문만 하면 됩니다.
새 도구 ②

처음 나오는 것 ② — requests

파이썬에서 API에게 "이 정보 주세요"라고 요청을 보내고, 답을 받아오는 도구예요. 설치는 수업 중 한 번만 하면 됩니다.

📮
requests
파이썬에서 인터넷으로 요청을 보내고 응답을 받는 라이브러리예요. pip install requests로 설치해요.
우체부에 비유하면 내 편지(요청)를 가져가서, 상대의 답장(응답)을 받아다 줘요. 우리는 편지 내용만 적으면 됩니다.
새 개념 ③

처음 나오는 것 ③ — JSON

API가 돌려주는 데이터 형식이에요. 이름과 값이 짝지어 있어서, 원하는 값만 골라 쓸 수 있어요.

📦
JSON
이름과 값이 짝지어진 데이터 형식이에요. 예: {"날씨":"비", "온도":18} 처럼 생겼어요.
학생 정보 카드에 비유하면 "이름: 홍길동, 반: 3반"처럼 항목마다 이름표가 붙어 있어요. 그래서 원하는 항목만 쏙 골라 읽을 수 있어요.
개념

매시업 = 레고 조립

매시업은 서로 다른 API를 레고처럼 이어 붙이는 거예요. 핵심은 연결이에요. 첫 API가 돌려준 결과를, 다음 API의 재료로 넘기는 거죠.

예①
날씨 + AI
오늘 날씨를 받아서(API1), AI에게 보내 어울리는 활동을 추천받아요(API2).
예②
위치 + 지도
현재 위치를 받아서(API1), 지도에서 근처 장소를 찾아줘요(API2).
예③
뉴스 + AI
뉴스를 받아서(API1), AI에게 보내 짧게 요약받아요(API2).
📌 핵심: 결과 → 재료
간식을 만들 때랑 비슷해요. 믹서로 과일을 갈아서 주스를 만들고, 그 주스를 얼음틀에 부어 얼려요. 매시업도 똑같아요. 첫 API가 만든 결과물둘째 API에 그대로 넣어주는 것뿐이에요.
💡 한 번에 다 만들지 않기

두 API를 한 번에 합치면 어디서 틀렸는지 찾기 어려워요. API를 하나씩 따로 작동시켜 본 뒤, 마지막에 연결하는 게 가장 빠른 길이에요.

미션 1

조합 기획하기

🎯 목표: 조합할 API 2개와 만들 앱을, 코드 작성 전에 종이에 먼저 기획한다.

좋은 매시업은 "이런 앱이 있으면 좋겠다"에서 출발해요. 먼저 만들 앱을 정하고, 필요한 정보를 거꾸로 찾아 API를 고릅니다.

① 만들 앱을 한 문장으로

예: "오늘 날씨에 맞는 활동을 추천해주는 앱". 무엇을 입력하면 무엇이 나오는지가 분명해야 해요.

② 입력 → API1 → API2 → 출력 흐름 그리기

1
입력
도시 이름을 입력받아요. (예: Seoul)
2
API1 → API2
날씨 API로 날씨를 받고, 그 결과를 AI에게 넘겨 활동을 추천받아요.
3
출력
추천 활동을 화면에 보여줘요.

③ 조합 아이디어 — 마음에 드는 것 고르기

날씨 + AI날씨에 맞는 활동·옷차림 추천
환율 + AI환율 보고 여행 예산 조언
위치 + 날씨내 동네 날씨 자동으로 받기
번역 + AI외국어 문장 번역 후 요약

기획 단계에서도 API가 어떤 모양의 결과를 주는지 미리 한 줄로 찍어보면, 어떤 조합이 될지 감이 잡혀요.

check.py — 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개"처럼 작게 시작해요.
📸 결과 미리보기
2개 API를 합친 매시업 앱의 실행 결과 화면
2개 API를 합친 매시업 앱의 실행 결과 화면
미션 2

단계별 구현

🎯 목표: API를 하나씩 따로 작동시킨 뒤, 두 API를 연결해 하나의 결과를 만든다.
✏️ 먼저 스스로 해보기
합치기 전에, 두 가지를 종이에 적어보기
① API 1만 실행하면 어떤 모양(글자·숫자·표)의 결과가 나올까요?
② 그 결과를 API 2에 어떻게 넘길지 생각해 보세요. 떠올랐다면 바로 코드를 받지 말고, 내가 요청할 프롬프트를 한 문장으로 적어 보세요.

① requests 설치

터미널
# (venv) 표시 확인 후 설치
pip install requests

② API를 부르는 준비 — get_weather와 ask_ai

API 호출은 준비 → 보내기 → 결과 꺼내기 3단계예요. 이걸 함수로 만들어 두면 계속 재사용할 수 있어요. AI 호출은 1주차에서 만든 ask_ai()를 그대로 씁니다.

🔑 .env는 이미 있어요
1주차에 만든 .env 파일(OPENAI_API_KEY=...)을 그대로 씁니다. 이번 폴더에도 .env 파일이 mashup.py같은 위치에 있는지만 확인하세요. 없다면 1주차처럼 WindowsNew-Item .env, Mactouch .env로 만들고, 안에 OPENAI_API_KEY=키값 한 줄을 공백·따옴표 없이 넣어요. 코드에는 키를 절대 직접 적지 않아요.
mashup.py — 재사용 함수 (한 번만 작성)
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()
1
import requests
인터넷에 요청을 보낼 수 있는 도구를 가져와요. 우체부를 부르는 것과 같아요.
2
client = OpenAI()
AI에게 말을 걸 준비를 해요. 키는 화면에 안 보이지만 자동으로 챙겨져요.
3
def ask_ai(prompt):
"AI에게 물어보기" 버튼을 하나 만드는 거예요. 앞으로 이 버튼만 누르면 돼요.
4
def get_weather(city):
"날씨 물어보기" 버튼을 하나 만들어요. 도시 이름을 넣으면 날씨를 알려줘요.
5
requests.get(url)
진짜로 인터넷에 "날씨 알려주세요" 편지를 보내고 답장을 받아요.

③ 한 조각씩 확인하고 연결하기

먼저 날씨만 받아 print로 확인하고, 그 결과를 AI에게 넘겨요. 각 단계가 잘 되는지 눈으로 확인하는 게 핵심이에요.

mashup.py — 연결
# ① API1: 날씨 받기
weather = get_weather("Seoul")
print("오늘 날씨:", weather)

# ② API1 결과 → API2 재료로 넘기기
activity = ask_ai(f"오늘 날씨는 {weather}야. 어울리는 활동 3가지를 한글로 추천해줘.")
print(activity)
1
weather = get_weather("Seoul")
서울 날씨를 받아서 weather라는 상자에 담아둬요.
2
print("오늘 날씨:", weather)
상자 안에 뭐가 들었는지 화면으로 먼저 확인해요.
3
f"...{weather}..."
날씨 상자의 내용을 AI에게 보낼 문장 안에 끼워 넣어요. 이게 매시업의 핵심이에요.
4
activity = ask_ai(...)
완성된 문장을 AI에게 보내고, 추천 활동을 답으로 받아요.
📸 스크린샷 자리
날씨 API만 단독으로 실행해 결과가 print된 터미널 화면
날씨 API만 단독으로 실행해 결과가 print된 터미널 화면
▸ 터미널 출력
오늘 날씨: Light rain shower
1. 실내 카페에서 책 읽기 — 창밖 빗소리를 들으며 여유롭게 시간을 보내기 좋아요.
2. 좋아하는 영화나 드라마 정주행 — 비 오는 날 집에서 느긋하게 즐기기 좋은 하루예요.
3. 전시회나 박물관 관람 — 비를 피하면서도 알차게 나들이할 수 있어요.
⚠️ 자주 하는 실수
  • 연결했더니 결과가 이상해요 → 먼저 print로 첫 API 결과 모양을 확인해요.
  • 한글이 깨져요 → 프롬프트에 "한글로 답해줘"를 넣어요.
  • 401 에러 → .env 키 철자·따옴표를 확인. 키는 선생님이 관리해요.
🔒 힌트 — 연결이 자꾸 안 돼요 (참고 코드)

핵심은 첫 결과를 변수에 담아, 둘째 요청 문장 안에 그 변수를 끼워 넣는 거예요.

mashup.py (참고)
weather = get_weather("Seoul")        # 첫 결과를 변수에
msg = f"오늘 날씨는 {weather}야. 활동 추천해줘."  # 재료로 끼워넣기
print(ask_ai(msg))
미션 3

매시업 앱 완성하기

🎯 목표: 연결된 앱을 다듬고, 기능을 하나만 더 추가해 완성한다.

두 API가 연결돼 결과가 나왔다면 이미 목표를 달성한 거예요. 여기에 하나만 더 골라 추가해 봅시다.

🃏 선택지 카드 — 무엇을 더할까?

A
예쁜 출력
결과에 이모지를 넣어 보기 좋게 정리하기
난이도 ★☆☆
→ "결과를 이모지를 넣어서 예쁘게 출력해줘"
B
입력 다양화
날씨에 더해 '기분'도 입력받아 반영
난이도 ★★☆
→ "사용자가 기분도 같이 입력하면 반영하게 해줘"
C
세 번째 API
번역 API를 더해 영어로도 보여주기
난이도 ★★☆
→ "여기에 번역 API를 추가해서 영어로도 보여줘"
D
웹앱으로
매시업을 Streamlit 웹앱 화면으로
난이도 ★★★
→ "이 매시업을 Streamlit 웹앱으로 만들어줘"
E
나만의 아이디어!
위에 없는 기능을 직접 떠올려 AI에게 요청해 보기
⚠️ 자주 하는 실수
  • 욕심내다 미완성 → "기존 기능은 그대로 두고 ~만 추가해줘"라고 요청해요.
  • 기능 추가하다 기존 코드가 깨짐 → 추가 전 코드를 한 번 복사해 둬요.
보너스 미션

더 해보고 싶다면

미션 3까지 끝내고 시간이 남는다면 도전해 보세요. 끝내지 못해도 괜찮습니다.

보너스 ① 에러 핸들링 — 앱이 안 멈추게

API가 응답을 못 줄 때도 프로그램이 멈추지 않게 만들어요. try / except로 감싸면 진짜 앱처럼 튼튼해져요.

mashup.py (에러 핸들링 예시)
try:
    weather = get_weather("Seoul")
    print(ask_ai(f"날씨는 {weather}야. 활동 추천해줘."))
except Exception:
    print("잠시 후 다시 시도해주세요.")
1
try:
"한 번 시도해볼게요"라고 시작하는 블록이에요. 여기서 에러가 나도 프로그램은 안 멈춰요.
2
try 블록 안 코드
날씨를 받고 AI에게 추천받는, 평소와 똑같은 코드예요.
3
except Exception:
try에서 무슨 에러든 나면, 프로그램이 멈추지 않고 여기로 넘어와요.
4
안내 문장 출력
에러 대신 "잠시 후 다시 시도해주세요"처럼 사람이 이해할 안내를 보여줘요.
📸 스크린샷 자리
일부러 에러 상황을 만들어 실행했을 때, 프로그램이 멈추지 않고 안내 문구가 출력된 터미널 화면
일부러 에러 상황을 만들어 실행했을 때, 프로그램이 멈추지 않고 안내 문구가 출력된 터미널 화면

보너스 ② 결과 자동 전송

완성된 추천 결과를 이메일이나 메시지로 자동 전송하는 기능을 붙여 보세요. AI에게 방법을 물어보는 것부터 시작해요.

🎯 성공 기준
일부러 잘못된 도시 이름을 넣어도 앱이 멈추지 않고, 안내 메시지가 뜨면 성공이에요.
정리

오늘의 핵심 정리

1️⃣
조합
여러 API를 레고처럼 조합하는 매시업을 이해했다
2️⃣
단계별
API를 하나씩 작동시킨 뒤 연결하는 법을 익혔다
3️⃣
완성
나만의 멀티 기능 매시업 앱을 만들었다

🔧 막혔을 때 — 자가 디버깅 4단계

에러가 떠도 당황하지 마세요. 선생님께 묻기 전에 이 순서대로 스스로 해결해 봅니다.

1
에러 메시지 읽기
빨간 글자에서 '몇 번째 줄'과 '무슨 에러'인지 찾아본다.
2
AI에게 보여주기
에러 메시지를 복사해서 "이 에러를 수정해줘"라고 AI에게 요청한다.
3
고쳐서 다시 실행
AI가 준 수정 코드를 적용하고 다시 실행해 본다.
4
선생님께 질문
그래도 안 되면 '에러 메시지 + 내가 시도한 것'을 함께 설명한다.