API가 무엇인가
두 소프트웨어가 서로 대화하는 방법을 정해놓은 약속입니다.
지도를 앱에 넣고 싶을 때 지도를 직접 만들 필요 없이 Google Maps API를 씁니다.
날씨가 필요하면 OpenWeatherMap API를 씁니다.
결제가 필요하면 토스 API를 씁니다.
이미 잘 만들어진 걸 가져다 쓰는 겁니다.
API 종류
REST API — 현재 가장 많이 씁니다. URL로 자원을 요청하는 방식입니다.
GraphQL — 필요한 데이터만 정확히 골라서 한 번에 가져올 수 있습니다. REST는 정해진 대로 다 받아야 하는데 GraphQL은 내가 원하는 필드만 지정합니다.
WebSocket — 연결을 계속 유지하면서 실시간으로 주고받습니다. 채팅, 주식 시세, 게임에 씁니다.
gRPC — 마이크로서비스끼리 통신할 때 씁니다. 일반 API 만들 때는 잘 안 씁니다.
보통 REST API가 기본입니다. 나머지는 특수한 상황에서 선택합니다.
HTTP 메서드
API를 호출할 때 어떤 행동을 할 건지 메서드로 표현합니다.
| 메서드 | 역할 |
| GET | 데이터 조회 |
| POST | 데이터 생성 |
| PUT | 데이터 전체 수정 |
| PATCH | 데이터 부분 수정 |
| DELETE | 데이터 삭제 |
HTTP 상태 코드
응답이 오면 항상 상태 코드가 같이 옵니다. 요청이 어떻게 처리됐는지 알려줍니다.
2xx — 성공
- 200 OK — 정상
- 201 Created — 생성 성공 (POST 후)
- 204 No Content — 성공인데 반환할 내용 없음 (DELETE 후)
4xx — 내 잘못
- 400 Bad Request — 요청 파라미터가 잘못됨
- 401 Unauthorized — 인증 안 됨 (API 키 없거나 틀림)
- 403 Forbidden — 인증은 됐는데 권한 없음
- 404 Not Found — 해당 리소스 없음
- 429 Too Many Requests — 요청 너무 많이 보냄 (Rate limit)
5xx — 서버 잘못
- 500 Internal Server Error — 서버 내부 오류
- 503 Service Unavailable — 서버 점검 중
4xx는 내 코드나 요청 문제, 5xx는 서버 문제입니다. 구분해두면 디버깅이 편합니다.
인증 방식
API는 아무나 못 쓰게 인증을 요구합니다. 방식이 몇 가지 있습니다.
API Key
가장 단순합니다. 발급받은 키를 헤더나 파라미터에 넣습니다.
# 헤더에 넣는 방식
headers = {"Authorization": "Bearer MY_API_KEY"}
# URL 파라미터에 넣는 방식
params = {"api_key": "MY_API_KEY"}
Basic Auth
아이디/비밀번호를 Base64로 인코딩해서 보내는 방식입니다. 요즘은 잘 안 씁니다.
from requests.auth import HTTPBasicAuth
auth = HTTPBasicAuth("username", "password")
OAuth 2.0
소셜 로그인이나 서드파티 권한 위임에 씁니다. 구글, 카카오 로그인이 이 방식입니다. 흐름이 복잡한 대신 가장 안전합니다.
1. 내 앱이 인증 서버에 토큰 요청
2. 인증 서버가 액세스 토큰 발급
3. 그 토큰으로 API 호출
# 토큰 발급
token_res = requests.post("https://auth.example.com/token", data={
"grant_type": "client_credentials",
"client_id": "MY_ID",
"client_secret": "MY_SECRET"
})
token = token_res.json()["access_token"]
# 토큰으로 API 호출
headers = {"Authorization": f"Bearer {token}"}
JWT (JSON Web Token)
서버가 발급한 토큰을 헤더에 담아 보내는 방식입니다. 로그인 후 인증 유지에 많이 씁니다.
headers = {"Authorization": f"Bearer {jwt_token}"}
정리
| API Key | Basic Auth | OAuth 2.0 | JWT | |
| 복잡도 | 낮음 | 낮음 | 높음 | 중간 |
| 보안 | 중간 | 낮음 | 높음 | 높음 |
| 주로 쓰는 곳 | 공개 API | 내부 서비스 | 소셜 로그인 | 로그인 유지 |
'Programming > API' 카테고리의 다른 글
| API를 활용한 데이터 자동 수집 파이프라인 (0) | 2026.06.16 |
|---|---|
| 실전에서 API 안정적으로 쓰기 (0) | 2026.06.16 |
| 파이썬으로 API 호출하기 (0) | 2026.06.16 |
