13강: API 연동
외부 서비스 붙이기
이번엔 남의 데이터를 가져다 쓸 차례예요
12강에서 Supabase로 우리만의 창고(데이터베이스)를 만들었어요. 할 일 목록을 넣고, 읽고, 수정하고, 삭제하는 CRUD를 직접 해봤죠. 새로고침해도 데이터가 사라지지 않는 경험, 꽤 뿌듯했을 거예요.
그런데 생각해 보세요. 세상의 모든 데이터를 우리가 직접 만들 수 있을까요?
오늘 서울 날씨가 몇 도인지, 우리가 직접 측정할 수는 없어요. 지도 데이터를 처음부터 그릴 수도 없고요. AI가 글을 써주는 기능을 밑바닥부터 만드는 건 더더욱 불가능해요.
다행히, 이런 건 이미 누군가가 다 만들어놨어요. 우리는 그걸 가져다 쓰기만 하면 돼요. 어떻게요? API라는 주문 창구를 통해서요.
이건 뭐예요?
API = 식당 주문 창구
API(Application Programming Interface, 프로그램끼리 데이터를 주고받는 창구)를 식당에 비유해 볼게요.
여러분이 식당에 가면, 주방에 직접 들어가서 요리하지 않잖아요. 주문 창구(카운터)에서 메뉴를 보고, 주문하고, 음식을 받아요. 주방에서 뭘 어떻게 만드는지는 몰라도 돼요. 메뉴판만 읽을 줄 알면 되죠.
API도 완전히 같아요.
| 식당 | API |
|---|---|
| 메뉴판 | API 문서 (어떤 데이터를 줄 수 있는지 목록) |
| 주문서 | 요청(Request, 내가 원하는 데이터를 적어 보내는 것) |
| 음식 | 응답(Response, 서버가 보내주는 데이터) |
| 주방 | 서버 (데이터를 처리하는 컴퓨터) |
| 카운터 직원 | API 엔드포인트 (주문을 받는 주소) |
날씨가 궁금하면 날씨 식당(OpenWeatherMap)에 주문하고, 지도가 필요하면 지도 식당(카카오 지도)에 주문하고, AI 답변이 필요하면 AI 식당(OpenAI)에 주문하는 거예요. 주방(서버)이 어떻게 돌아가는지는 전혀 몰라도 돼요.
HTTP 메서드 = 주문의 4가지 종류
식당에서 할 수 있는 행동이 정해져 있듯이, API에도 4가지 주문 방법이 있어요. 이걸 HTTP 메서드(HTTP Method, 서버에 요청하는 방식의 종류)라고 불러요.
| HTTP 메서드 | 식당 비유 | 하는 일 | 예시 |
|---|---|---|---|
| GET | 메뉴판 보기 | 데이터를 가져와요 (조회) | 서울 날씨 알려줘 |
| POST | 새 주문하기 | 새 데이터를 보내요 (생성) | 이 글을 번역해줘 |
| PUT | 주문 변경하기 | 기존 데이터를 바꿔요 (수정) | 배달 주소 바꿔줘 |
| DELETE | 주문 취소하기 | 데이터를 지워요 (삭제) | 이 주문 취소해줘 |
12강에서 배운 CRUD와 딱 맞아떨어지죠? Create = POST, Read = GET, Update = PUT, Delete = DELETE. 이름만 달라졌을 뿐, 하는 일은 같아요.
실제로 우리가 가장 많이 쓰는 건 GET(데이터 가져오기)이에요. 날씨를 가져오거나, 뉴스를 가져오거나, 지도를 가져오는 건 전부 GET이에요.
우리는 이렇게 쓰고 있어요
AI//STUDY 사이트 자체는 정적 사이트(미리 만들어둔 파일을 보여주는 방식)라서 실시간 API 호출은 하지 않아요. 하지만 빌드 과정에서 API와 비슷한 원리를 쓰고 있어요.
예를 들어, 사이트 홈 화면에 "강의 12개", "레포 소개 8개" 같은 숫자가 자동으로 표시되죠? 이건 빌드할 때 docs/ 폴더를 스캔해서 파일 개수를 세는 코드가 돌아가는 거예요. 직접 숫자를 적는 게 아니라, "몇 개 있어?"라고 물어보고 답을 받는 구조예요. API의 원리와 같아요.
디온웍스의 다른 서비스들은 API를 아주 많이 써요.
- DGHR(디지HR) — 카카오 로그인 API로 직원 인증, GPS API로 출퇴근 위치 확인, 카카오 알림톡 API로 근태 알림 발송
- HoneyERP(허니이알피) — 사업자등록번호 조회 API로 거래처 정보 자동 입력, 택배사 배송 조회 API로 발주 상태 추적
- D-onworks.com — 블로그 글이 등록되면 자동으로 메타 태그를 읽어서 카드를 생성. 이것도 URL에서 데이터를 가져오는 API 호출이에요
이 서비스들 전부, 처음에는 오늘 배울 것과 똑같이 시작했어요. 무료 API 하나를 골라서 데이터를 가져와 보는 것부터요.
한번 써볼까요?
오늘 실습은 두 단계로 나눠요.
- 1단계: API 키 없이 쓸 수 있는 연습용 API(JSONPlaceholder)로 원리 익히기
- 2단계: API 키가 필요한 진짜 API(OpenWeatherMap)로 날씨 데이터 가져오기
1단계: 연습용 API로 감 잡기 (JSONPlaceholder)
JSONPlaceholder는 연습용으로 만들어진 무료 가짜 데이터 API예요. 가입도 필요 없고, API 키도 필요 없어요. 브라우저 주소창에 URL만 입력하면 바로 데이터가 나와요.
브라우저 주소창에 이 주소를 붙여넣어 보세요.
https://jsonplaceholder.typicode.com/todos/1
이런 데이터가 보일 거예요.
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
축하해요. 방금 첫 번째 API 호출을 하신 거예요. 브라우저가 JSONPlaceholder 서버(식당 주방)에 GET 요청(메뉴판 보기)을 보내고, 서버가 할 일 데이터(음식)를 돌려준 거예요.
다른 주소도 시도해 보세요.
| URL | 무슨 데이터? |
|---|---|
https://jsonplaceholder.typicode.com/posts | 게시글 100개 |
https://jsonplaceholder.typicode.com/users | 사용자 10명 |
https://jsonplaceholder.typicode.com/photos?albumId=1 | 1번 앨범의 사진 목록 |
전부 GET 요청이에요. "이 데이터 줘"라고 주문하면, 서버가 JSON(JavaScript Object Notation, 데이터를 주고받을 때 쓰는 텍스트 형식) 형태로 보내주는 거예요.
2단계: 진짜 API로 날씨 가져오기 (OpenWeatherMap)
이번에는 진짜 날씨 데이터를 가져와 볼 거예요. OpenWeatherMap은 전 세계 날씨 데이터를 제공하는 서비스예요. 무료 플랜으로 충분히 실습할 수 있어요.
가입 + API 키 발급
- https://home.openweathermap.org/users/sign_up 에서 회원가입해요
- 이메일 인증을 완료해요
- 로그인 후 상단 메뉴에서 API keys 를 클릭하면, 기본 키가 하나 만들어져 있어요
- 이 키를 복사해 두세요 (발급 후 활성화까지 최대 2시간 걸릴 수 있어요)
브라우저에서 테스트
API 키가 활성화되면, 브라우저 주소창에 이렇게 입력해 보세요. YOUR_API_KEY 부분을 아까 복사한 키로 바꿔야 해요.
https://api.openweathermap.org/data/2.5/weather?lat=37.5665&lon=126.9780&appid=YOUR_API_KEY&units=metric&lang=kr
lat=37.5665&lon=126.9780— 서울의 위도(lat)와 경도(lon)예요appid=YOUR_API_KEY— 여러분의 API 키예요units=metric— 섭씨 온도로 보여달라는 옵션이에요lang=kr— 날씨 설명을 한국어로 보여달라는 옵션이에요
서울의 현재 날씨가 JSON 형태로 돌아와요. 온도, 습도, 바람 속도, 날씨 설명까지 전부요.
API 키 안전하게 보관하기 (.env 복습)
12강에서 Supabase 키를 .env.local 파일에 넣었던 거 기억하시죠? API 키도 똑같아요. 코드에 직접 쓰면 안 돼요. GitHub에 올리면 전 세계에 내 키가 공개되니까요.
# .env.local — API 키 보관 (GitHub에 올라가지 않아요)
NEXT_PUBLIC_SUPABASE_URL=이전에_넣어둔_값
NEXT_PUBLIC_SUPABASE_ANON_KEY=이전에_넣어둔_값
NEXT_PUBLIC_WEATHER_API_KEY=여기에_OpenWeatherMap_키를_붙여넣으세요
12강에서 만든 .env.local 파일에 한 줄만 추가하면 돼요. 파일을 새로 만들 필요 없어요.