본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] requests로 배우는 실전 API 호출 완벽 가이드

by Papa Martino V 2025. 7. 23.
728x90

requests로 배우는 실전 API 호출 완벽 가이드
requests로 배우는 실전 API 호출 완벽 가이드

 

웹 개발과 데이터 활용의 중심에는 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
728x90