
웹 개발과 데이터 활용의 중심에는 API가 있습니다. Python은 간결한 문법과 풍부한 표준 라이브러리 덕분에 API 호출에 매우 적합한 언어입니다. 그중에서도 requests는 RESTful API 통신을 가장 쉽게 구현할 수 있는 대표적인 라이브러리입니다. 이 글에서는 Python requests를 사용한 API 요청/응답 구조, 실전 활용 팁, 그리고 예외 처리까지, API 호출의 모든 것을 다룹니다.
API와 requests의 기본 이해
API란 무엇인가?
API(Application Programming Interface)는 소프트웨어 간 데이터와 기능을 주고받기 위한 인터페이스입니다. REST API는 URL 기반으로 데이터를 주고받으며, HTTP 프로토콜(GET, POST, PUT, DELETE 등)을 기반으로 동작합니다.
requests 라이브러리란?
requests는 Python에서 HTTP 요청을 간단하고 직관적으로 수행할 수 있도록 만들어진 라이브러리입니다. URL로 요청을 보내고 응답을 받아오는 구조가 매우 깔끔하며, JSON 처리나 인증 등의 기능도 내장하고 있습니다.
요청 방식 비교
| HTTP 메서드 | 설명 | 주 사용처 |
|---|---|---|
| GET | 리소스 조회 | 데이터 가져오기 |
| POST | 리소스 생성 | 폼 제출, 새 데이터 입력 |
| PUT | 리소스 전체 수정 | 전체 업데이트 |
| PATCH | 리소스 일부 수정 | 부분 업데이트 |
| DELETE | 리소스 삭제 | 데이터 삭제 |
실전 코드: JSON 데이터 요청
공공 API에서 데이터를 받아오는 간단한 예제를 살펴봅니다.
import requests
url = "https://jsonplaceholder.typicode.com/posts"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
for post in data[:5]:
print(post["title"])
else:
print("API 요청 실패:", response.status_code)
이 예제는 가짜 REST API인 jsonplaceholder에서 게시글 데이터를 가져와 제목만 출력하는 코드입니다. API 요청 시 응답 코드 200은 성공을 의미합니다.
파라미터와 헤더 추가 방법
API 서버는 종종 인증 토큰이나 쿼리 파라미터를 요구합니다.
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
params = {
"page": 1,
"limit": 10
}
res = requests.get("https://api.example.com/data", headers=headers, params=params)
print(res.json())
headers는 인증, params는 URL 쿼리 스트링에 해당합니다. 이들을 활용해 유동적인 API 호출이 가능합니다.
POST 요청 예시 (데이터 전송)
payload = {
"name": "홍길동",
"email": "hong@example.com"
}
res = requests.post("https://api.example.com/register", json=payload)
print(res.status_code)
POST 요청은 json= 또는 data= 인자를 사용해 서버에 데이터를 보낼 수 있습니다. JSON 형식이 기본적으로 가장 많이 사용됩니다.
에러 핸들링 & 예외 처리
네트워크 통신에서는 오류가 자주 발생할 수 있으므로 예외 처리 구문은 필수입니다.
try:
res = requests.get("https://api.example.com/data", timeout=5)
res.raise_for_status()
print(res.json())
except requests.exceptions.HTTPError as err:
print("HTTP 오류 발생:", err)
except requests.exceptions.ConnectionError:
print("연결 오류 발생")
except requests.exceptions.Timeout:
print("요청 시간 초과")
except Exception as e:
print("기타 오류:", e)
API 응답 구조 이해하기
| 속성 | 예시 | 설명 |
|---|---|---|
| response.status_code | 200 | HTTP 상태 코드 |
| response.text | '{"name": "홍길동"}' | 원문 문자열 |
| response.json() | Python 딕셔너리 | 파싱된 JSON 객체 |
| response.headers | Header 정보 | 서버 메타 정보 |
활용 분야와 실무 사례
- 주식, 환율 등 실시간 데이터 수집
- OpenWeather API를 활용한 날씨 예보 서비스
- ChatGPT API를 활용한 대화형 챗봇 개발
- 카카오맵, 네이버지도 API를 활용한 위치 기반 서비스 구축
- 자동화된 보고서 생성용 데이터 통합
API 사용 시 주의할 점
- Rate Limit: 초당/일당 호출 횟수 제한을 체크해야 합니다.
- API Key 보호: 깃허브 등 외부에 노출되지 않도록 환경 변수 사용 권장
- 문서 확인: API는 항상 공식 문서를 참조해 정확한 요청 형식 확인
결론
Python의 requests 라이브러리는 REST API와 통신하는 데 있어 가장 실용적이며 직관적인 도구입니다. 데이터 기반 서비스가 중심이 된 현재, requests를 이용한 API 호출은 거의 모든 프로젝트에 필수 기술로 자리잡고 있습니다. 이 글을 통해 단순한 요청/응답 코드를 넘어서, 실무 환경에서 유용한 예외 처리, 보안, 성능 측면까지 고려하는 API 호출 전략을 배울 수 있기를 바랍니다.
출처
- requests 공식 문서: https://requests.readthedocs.io/
- JSONPlaceholder API: https://jsonplaceholder.typicode.com/
- Mozilla Developer Network: https://developer.mozilla.org/ko/
- REST API 설계 가이드 by Roy Fielding
'Artificial Intelligence > 60. Python' 카테고리의 다른 글
| [PYTHON] JSON 파싱 완벽 이해와 실전 예제 (0) | 2025.07.23 |
|---|---|
| [PYTHON] Jupyter Notebook 설치 및 실행 완벽 가이드 (0) | 2025.07.23 |
| [PYTHON] Python으로 배우는 실전 웹 스크래핑 완벽 가이드 (0) | 2025.07.23 |
| [PYTHON] Python으로 배우는 실전 머신러닝 입문 (0) | 2025.07.23 |
| [PYTHON] Flask로 배우는 실전 웹 개발의 모든 것 (0) | 2025.07.23 |