Python requests 라이브러리로 외부 API 호출하고 응답 데이터 처리하기

파이썬에서 requests 라이브러리를 활용해 외부 REST API를 호출하고, JSON 응답 데이터를 안전하게 파싱하여 예외를 처리하는 실전 코드 예제와 방법을 알아봅니다.

핵심 요약

파이썬으로 외부 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')}")

코드 주요 구간 설명

  1. requests.get(url, timeout=5): 지정된 URL로 GET 요청을 보냅니다. 네트워크 지연으로 인한 무한 대기를 방지하기 위해 반드시 timeout을 설정해야 합니다.
  2. response.raise_for_status(): HTTP 상태 코드가 400번대나 500번대일 경우 HTTPError 예외를 발생시켜 잘못된 응답을 즉시 감지합니다.
  3. 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으로 설정됩니다.

완성 코드 예제

UtilLog Web Example
코드를 수정한 뒤 실행을 누르면 Result에 반영됩니다.

실전 활용을 위한 제언

파이썬으로 외부 API를 다룰 때는 정상적인 응답 처리뿐만 아니라 네트워크 지연이나 잘못된 데이터 형식 같은 예외 상황에 대비하는 코드가 필수적입니다. 제시한 예제 코드를 바탕으로 개발 중인 서비스의 요구사항에 맞는 타임아웃 값과 에러 처리를 적용해 보세요.

실제 서비스를 구축할 때는 인증 토큰 관리나 환경 변수를 통한 엔드포인트 분리 설정을 함께 고려하는 편이 안전합니다.

참고자료

jsonplaceholder.typicode.com — 파이썬 requests 라이브러리 예제에서 특정 사용자 데이터를 조회하기 위한 실제 테스트용 API 엔드포인트로 활용합니다.

jsonplaceholder.typicode.com — 사용자 ID를 동적으로 받아와 외부 API를 호출하는 함수 구조를 설명하기 위한 템플릿 URL로 참고합니다.

댓글 남기기

이메일 주소는 공개되지 않습니다.