핵심 요약
파이썬으로 외부 API를 호출할 때는 표준적인 requests 라이브러리를 사용하는 것이 가장 직관적이고 효율적입니다. 이 글에서는 API 요청부터 응답 처리, 예외 발생 시 대처 방법까지 실제 동작하는 코드를 통해 살펴봅니다.
실행 환경 및 준비물
관련 글: AI 웹사이트
이 예제를 실행하려면 파이썬 3.7 이상 버전이 설치되어 있어야 합니다. 외부 서버와 통신하기 위해 requests 패키지를 별도로 설치해야 하므로 아래 명령어를 터미널에 입력하여 패키지를 준비하세요.
BASH
pip install requests
API 호출 완성 코드
가상의 공공 데이터 API나 무료 테스트용 JSONPlaceholder 엔드포인트를 대상으로 데이터를 조회하는 파이썬 스크립트 전문입니다. 타임아웃 설정과 상태 코드 검증 로직이 포함되어 있습니다.
api_client.pyPYTHON
import requests
def fetch_user_data(user_id):
url = f"https://jsonplaceholder.typicode.com/users/{user_id}"
try:
response = requests.get(url, timeout=5)
response.raise_for_status()
data = response.json()
return data
except requests.exceptions.HTTPError as http_err:
print(f"HTTP 오류 발생: {http_err}")
except requests.exceptions.ConnectionError:
print("네트워크 연결에 실패했습니다.")
except requests.exceptions.Timeout:
print("요청 시간이 초과되었습니다.")
except requests.exceptions.RequestException as err:
print(f"알 수 없는 오류 발생: {err}")
return None
if __name__ == "__main__":
user = fetch_user_data(1)
if user:
print(f"사용자 이름: {user.get('name')}")
print(f"이메일: {user.get('email')}")
코드 주요 구간 설명
- requests.get(url, timeout=5): 지정된 URL로 GET 요청을 보냅니다. 네트워크 지연으로 인한 무한 대기를 방지하기 위해 반드시 timeout을 설정해야 합니다.
- response.raise_for_status(): HTTP 상태 코드가 400번대나 500번대일 경우 HTTPError 예외를 발생시켜 잘못된 응답을 즉시 감지합니다.
- response.json(): 서버가 반환한 JSON 문자열을 파이썬 딕셔너리 자료형으로 자동 변환합니다.
TIP
API 서버에 전달할 파라미터가 있다면 URL 문자열을 직접 조작하기보다 requests.get(url, params={‘key’: ‘value’}) 형태의 딕셔너리를 사용하는 것이 안전합니다.
자주 발생하는 오류와 해결 방법
| 오류 상황 | 원인 | 해결 방법 |
|---|---|---|
| Timeout 예외 발생 | 네트워크 상태가 불안정하거나 서버 응답이 늦음 | timeout 값을 10초 이상으로 늘리거나 서버 상태 확인 |
| JSONDecodeError | 서버가 JSON이 아닌 HTML 에러 페이지 등을 반환함 | response.status_code와 response.text를 먼저 출력해 원인 파악 |
| SSLError | 인증서 검증에 실패함 | 사내망이나 개발 환경인 경우 verify=False 옵션을 고려할 수 있으나 보안상 주의 필요 |
POST 요청은 어떻게 전송하나요?
POST 요청을 보낼 때는 requests.get 대신 requests.post(url, json=data) 함수를 사용하며, 딕셔너리 형태의 데이터를 json 파라미터로 전달하면 자동으로 Content-Type이 application/json으로 설정됩니다.
완성 코드 예제
실전 활용을 위한 제언
파이썬으로 외부 API를 다룰 때는 정상적인 응답 처리뿐만 아니라 네트워크 지연이나 잘못된 데이터 형식 같은 예외 상황에 대비하는 코드가 필수적입니다. 제시한 예제 코드를 바탕으로 개발 중인 서비스의 요구사항에 맞는 타임아웃 값과 에러 처리를 적용해 보세요.
실제 서비스를 구축할 때는 인증 토큰 관리나 환경 변수를 통한 엔드포인트 분리 설정을 함께 고려하는 편이 안전합니다.
참고자료
jsonplaceholder.typicode.com — 파이썬 requests 라이브러리 예제에서 특정 사용자 데이터를 조회하기 위한 실제 테스트용 API 엔드포인트로 활용합니다.
jsonplaceholder.typicode.com — 사용자 ID를 동적으로 받아와 외부 API를 호출하는 함수 구조를 설명하기 위한 템플릿 URL로 참고합니다.
