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} 처럼 생겼어요.
라벨 붙은 상자에 비유하면 상자마다 이름표가 붙어 있어서, 필요한 상자만 골라 열 수 있어요.
개념

매시업 = 레고 조립

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

예①
날씨 + AI
오늘 날씨를 받아서(API1), AI에게 보내 어울리는 활동을 추천받아요(API2).
예②
위치 + 지도
현재 위치를 받아서(API1), 지도에서 근처 장소를 찾아줘요(API2).
예③
뉴스 + AI
뉴스를 받아서(API1), AI에게 보내 짧게 요약받아요(API2).
📌 핵심: 결과 → 재료
매시업의 비밀은 단순해요. 첫 API의 결과를 그대로 둘째 API의 재료로 넘기는 것. 이 연결만 되면 어떤 API든 이어 붙일 수 있어요.
💡 한 번에 다 만들지 않기

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

미션 1

조합 기획하기

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

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

① 만들 앱을 한 문장으로

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

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

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

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

날씨 + AI날씨에 맞는 활동·옷차림 추천
환율 + AI환율 보고 여행 예산 조언
위치 + 날씨내 동네 날씨 자동으로 받기
번역 + AI외국어 문장 번역 후 요약
💬 이렇게 입력해 보세요
무료로 쓸 수 있는 공개 API를 종류별로 추천해줘. 가입 없이 바로 쓸 수 있는 것 위주로 알려줘.
⚠️ 자주 하는 실수
  • 어떤 API가 있는지 몰라 막힘 → AI에게 종류별 추천을 먼저 요청해요.
  • 앱이 너무 거창함 → "입력 1개 → 결과 1개"처럼 작게 시작해요.
미션 2

단계별 구현

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

① requests 설치

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

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

🔑 .env 파일 만드는 법 (처음 한 번만)

1단계 — VS Code 터미널에서 수업 폴더 안에 파일 만들기

터미널
# Windows
New-Item .env

# Mac
touch .env

2단계 — .env 파일을 열고 아래 한 줄 입력 (선생님이 알려준 키 사용)

.env
OPENAI_API_KEY=여기에_선생님이_알려준_키_붙여넣기

⚠️ 키 앞뒤에 공백이나 따옴표 없이 딱 붙여서 저장하세요. .env 파일은 코드와 같은 폴더에 있어야 해요.

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

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()

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

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

💬 이렇게 입력해 보세요
날씨 API로 받은 오늘 날씨를 AI에게 보내서 어울리는 활동을 추천받는 코드로 합쳐줘. 각 단계가 잘 되는지 print로 확인할 수 있게 해줘.
mashup.py — 연결
# ① API1: 날씨 받기
weather = get_weather("Seoul")
print("오늘 날씨:", weather)

# ② API1 결과 → API2 재료로 넘기기
activity = ask_ai(f"오늘 날씨는 {weather}야. 어울리는 활동 3가지를 한글로 추천해줘.")
print(activity)
날씨 API만 단독으로 실행해 결과가 print된 터미널 화면
📸 스크린샷
날씨 API만 단독으로 실행해 결과가 print된 터미널 화면
📝 연결 전 단계를 따로 보여주면 '한 조각씩 확인'의 의미가 잘 전달됨
▸ 터미널 출력
오늘 날씨: Partly cloudy
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로 감싸면 진짜 앱처럼 튼튼해져요.

💬 이렇게 입력해 보세요
API가 응답을 못 받았을 때 프로그램이 멈추지 않고 '잠시 후 다시 시도해주세요'라고 안내하게 해줘.
mashup.py (에러 핸들링 예시)
try:
    weather = get_weather("Seoul")
    print(ask_ai(f"날씨는 {weather}야. 활동 추천해줘."))
except Exception:
    print("잠시 후 다시 시도해주세요.")

보너스 ② 결과 자동 전송

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

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

오늘의 핵심 정리

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

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

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

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