Python requests 라이브러리로 외부 API 호출하고 데이터 처리하는 방법

Python의 requests 라이브러리를 활용해 외부 REST API를 호출하고, 응답 데이터를 파싱하여 에러 예외 처리까지 완성하는 실전 코드 예제입니다.

핵심 요약

Python 프로그램에서 HTTP 요청을 보내고 JSON 응답을 받아 처리하려면 requests 라이브러리가 가장 널리 쓰입니다. 이번 글에서는 API 호출부터 상태 코드 확인, 예외 처리, 결과 출력까지 한 번에 다룹니다.

1. 실행 환경 및 사전 준비

이 예제를 실행하려면 컴퓨터에 Python 3.x 버전이 설치되어 있어야 합니다. 외부 API와 통신하기 위해 공식 라이브러리가 아닌 requests 패키지를 별도로 설치해야 합니다.

BASH

pip install requests

2. 완성된 API 호출 Python 코드

아래 코드는 공개된 JSONPlaceholder 테스트 API를 호출하여 게시글 데이터를 가져오는 전체 예제입니다. 타임아웃 설정과 HTTP 오류 발생 시 처리하는 로직을 포함하고 있습니다.

PYTHON

import requests

def fetch_posts():
    url = "https://jsonplaceholder.typicode.com/posts/1"
    try:
        response = requests.get(url, timeout=5)
        response.raise_for_status()
        
        data = response.json()
        print("API 호출 성공!")
        print(f"게시글 제목: {data.get('title')}")
        print(f"본문 내용: {data.get('body')}")
        
    except requests.exceptions.HTTPError as err:
        print(f"HTTP 에러 발생: {err}")
    except requests.exceptions.ConnectionError:
        print("네트워크 연결을 확인해주세요.")
    except requests.exceptions.Timeout:
        print("요청 시간이 초과되었습니다.")
    except requests.exceptions.RequestException as err:
        print(f"알 수 없는 오류 발생: {err}")

if __name__ == "__main__":
    fetch_posts()

3. 코드 주요 구간 설명

관련 글: 데이터 처리 방식

  1. 코드 동작 원리 요약입니다. 각 단계별 핵심 요소를 확인하세요. 서버 응답을 안전하게 받아오기 위한 필수 설정들입니다.
  1. requests.get(url, timeout=5): 지정한 URL로 GET 요청을 보냅니다. 네트워크 지연이 발생할 때 프로그램이 멈추는 것을 방지하기 위해 timeout을 5초로 지정했습니다.
  1. response.raise_for_status(): 상태 코드가 400번대나 500번대일 경우 HTTPError 예외를 발생시켜 잘못된 응답을 곧바로 감지할 수 있게 돕습니다.
  1. response.json(): 서버가 반환한 JSON 문자열을 파이썬 딕셔너리 자료형으로 자동 변환해 줍니다.

4. 자주 발생하는 오류와 해결 방법

오류 상황원인해결 방법
ModuleNotFoundError: No module named ‘requests’requests 패키지가 설치되지 않음터미널에서 pip install requests 실행
requests.exceptions.Timeout서버 응답 속도가 너무 느림timeout 값을 늘리거나 서버 상태 점검
requests.exceptions.HTTPError: 404 Client Error요청한 엔드포인트 URL이 잘못됨API 문서 확인 후 올바른 경로 입력

TIP

API 요청 시 인증 토큰이 필요한 경우 requests.get(url, headers={‘Authorization’: ‘Bearer YOUR_TOKEN’}) 형태로 헤더를 추가하여 호출할 수 있습니다.

POST 요청을 보낼 때는 어떻게 해야 하나요?

GET 대신 requests.post(url, json=data) 형태를 사용하며, 서버로 전달할 데이터는 딕셔너리 형태로 json 파라미터에 담아 전달하면 자동으로 Content-Type이 application/json으로 설정됩니다.

완성 코드 예제

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

안정적인 API 연동을 위한 점검 사항

외부 API를 다룰 때는 항상 네트워크 불안정과 서버 오류 같은 예외 상황이 발생할 수 있습니다. 위 예제에서 다룬 타임아웃 설정과 상태 코드 검증 로직은 실제 서비스 운영 시 장애를 예방하는 가장 기본적인 안전장치입니다.

프로젝트를 확장하는 단계에서는 인증 토큰 관리나 대용량 데이터 처리를 위한 비동기 요청 방식까지 고려해 보는 것이 좋습니다. 작성한 코드가 다양한 환경에서도 문제없이 동작하는지 충분히 테스트한 뒤 적용해 보세요.

참고자료

jsonplaceholder.typicode.com — Python requests 라이브러리 예제에서 게시글 데이터를 가져오기 위해 호출하는 실제 테스트 API 엔드포인트입니다.

댓글 남기기

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