Python에서 API 요청 및 응답을 처리하는 것은 프로젝트에 큰 변화를 가져올 수 있습니다. 웹 애플리케이션, 모바일 앱 또는 간단한 스크립트를 만들든, API와 상호작용하는 방법을 이해하는 것은 매우 중요합니다. 이 포괄적인 가이드에서는 Python 요청 및 응답의 세계를 깊이 파고들어 API 마스터가 되는 데 필요한 도구를 제공할 것입니다. 그리고 무료로 Apidog를 다운로드하는 것을 잊지 마세요 - API 개발 및 테스트를 아주 쉽게 만들어 줄 것입니다!
API 소개
먼저, API가 무엇인지 이야기해봅시다. API는 응용 프로그램 프로그래밍 인터페이스(Application Programming Interface)의 약자입니다. 서로 다른 소프트웨어 엔티티가 서로 통신할 수 있도록 하는 규칙의 집합입니다. 이것은 웨이터가 여러분의 주문(요청)을 받아서 음식을 가져오는(응답) 것과 같습니다. API는 날씨 앱에서 소셜 미디어 플랫폼까지 어디에나 있습니다.
API는 개발자가 다른 소프트웨어 프로그램의 기능에 접근할 수 있도록 합니다. 여기에는 웹 서버에서 데이터를 가져오는 간단한 작업부터 클라우드 서비스에서 호스팅되는 머신 러닝 모델과 상호작용하는 것과 같은 복잡한 작업까지 포함될 수 있습니다.
API를 사용하는 이유는?
API를 사용하면 많은 시간과 노력을 절약할 수 있습니다. 바퀴를 재발명하기보다는 기존의 서비스와 데이터를 활용할 수 있습니다. 또한, 애플리케이션이 더 유연하고 통합될 수 있게 합니다.
핵심 용어
시작하기 전에 알아야 할 몇 가지 핵심 용어는 다음과 같습니다:
- 엔드포인트: API에 접근할 수 있는 URL입니다.
- 요청: 동작을 수행하기 위해 API에 보내는 메시지입니다.
- 응답: 요청의 결과와 함께 API가 보내는 메시지입니다.
- 상태 코드: 요청의 결과를 나타내는 코드입니다(예: 성공 시 200, 찾을 수 없음 시 404).
Python 요청 이해하기
Python의 requests
라이브러리는 HTTP 요청을 만들기 위한 강력한 도구입니다. 간단하면서도 매우 유연하여 API와 쉽게 상호작용할 수 있습니다. 이제 requests
라이브러리를 설치해봅시다.
pip install requests
라이브러리를 설치했으니 첫 번째 API 요청을 만들어 봅시다.

첫 번째 API 요청 만들기
API 요청을 만들려면 API 엔드포인트가 필요합니다. 이 예제에서는 테스트 및 프로토타입용으로 무료로 제공되는 JSONPlaceholder API를 사용할 것입니다.
GET 요청을 만드는 간단한 예는 다음과 같습니다:
import requests
url = 'https://jsonplaceholder.typicode.com/posts'
response = requests.get(url)
print(response.status_code)
print(response.json())
이 예제에서는 /posts
엔드포인트에 GET 요청을 보내고 있습니다. requests.get
함수가 요청을 보내며, 응답은 response
변수에 저장됩니다. 그런 다음 상태 코드와 JSON 응답을 출력합니다.
응답 이해하기
응답 객체는 서버가 반환한 모든 정보를 포함합니다. 다음은 응답 객체의 유용한 속성입니다:
status_code
: 서버가 반환한 HTTP 상태 코드입니다.headers
: HTTP 헤더의 사전입니다.text
: 문자열로 된 원시 응답 본문입니다.json()
: 응답 본문을 JSON으로 파싱하는 메소드입니다.
POST 요청 만들기
때때로 API에 데이터를 보내야 할 필요가 있습니다. 여기서 POST 요청이 필요해집니다. 다음은 그 예입니다:
import requests
url = 'https://jsonplaceholder.typicode.com/posts'
data = {
'title': 'foo',
'body': 'bar',
'userId': 1
}
response = requests.post(url, json=data)
print(response.status_code)
print(response.json())
이 예제에서는 일부 JSON 데이터를 포함하여 /posts
엔드포인트에 POST 요청을 보내고 있습니다. requests.post
함수가 요청을 보내며 응답은 GET 요청과 유사하게 처리됩니다.

API 응답 처리하기
이제 요청을 만들었으니 응답 처리에 대해 이야기해 봅시다. 요청이 성공했는지 확인하기 위해 상태 코드를 확인하는 것이 중요합니다.
상태 코드 확인하기
상태 코드를 확인하는 간단한 예는 다음과 같습니다:
import requests
url = 'https://jsonplaceholder.typicode.com/posts/1'
response = requests.get(url)
if response.status_code == 200:
print('성공!')
print(response.json())
else:
print('오류:', response.status_code)
이 예제에서는 상태 코드가 200
인지 확인하고 있으며, 이는 성공을 나타냅니다. 요청이 성공했으면 JSON 응답을 출력합니다. 그렇지 않으면 상태 코드와 함께 오류 메시지를 출력합니다.
JSON 응답 파싱하기
대부분의 API는 JSON 형식으로 데이터를 반환합니다. response.json()
메소드는 JSON 데이터를 쉽게 파싱할 수 있게 해줍니다. 다음은 그 예입니다:
import requests
url = 'https://jsonplaceholder.typicode.com/posts/1'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
print('제목:', data['title'])
print('본문:', data['body'])
else:
print('오류:', response.status_code)
이 예제에서는 JSON 응답을 파싱하여 title
과 body
필드를 출력합니다.
요청으로 오류 처리하기
API 작업 시 오류 처리는 매우 중요합니다. 네트워크 문제, 잘못된 엔드포인트 및 서버 오류와 같은 다양한 시나리오에 대비해야 합니다.
네트워크 오류 처리하기
서버에 접근할 수 없거나 연결이 끊기면 네트워크 오류가 발생할 수 있습니다. requests
라이브러리는 이러한 오류를 처리하기 위한 예외에 대한 기본적인 지원을 제공합니다.
다음은 그 예입니다:
import requests
url = 'https://jsonplaceholder.typicode.com/posts/1'
try:
response = requests.get(url)
response.raise_for_status()
except requests.exceptions.HTTPError as errh:
print("HTTP 오류:", errh)
except requests.exceptions.ConnectionError as errc:
print("연결 오류:", errc)
except requests.exceptions.Timeout as errt:
print("타임아웃 오류:", errt)
except requests.exceptions.RequestException as err:
print("오류 발생:", err)
이 예제에서는 다양한 유형의 오류를 포착하기 위해 try-except 블록을 사용하고 있습니다. raise_for_status()
메소드는 상태 코드가 200이 아닐 경우 HTTPError를 발생시킵니다.
서버 오류 처리하기
서버 오류(상태 코드 500-599)는 서버 측의 문제를 나타냅니다. 다음은 서버 오류를 처리하는 방법의 예입니다:
import requests
url = 'https://jsonplaceholder.typicode.com/invalid-endpoint'
response = requests.get(url)
if response.status_code >= 500:
print('서버 오류:', response.status_code)
elif response.status_code == 404:
print('찾을 수 없음:', response.status_code)
elif response.status_code == 400:
print('잘못된 요청:', response.status_code)
else:
print('기타 오류:', response.status_code)
이 예제에서는 상태 코드가 500 범위에 있는지 확인하여 서버 오류를 나타냅니다. 또한 404(찾을 수 없음) 및 400(잘못된 요청) 오류도 처리하고 있습니다.
고급 팁과 요령
기본 사항을 다뤘으니 Python에서 API 작업 시 여러분의 삶을 쉽게 해줄 몇 가지 고급 팁과 요령을 살펴보겠습니다.
쿼리 매개변수 사용하기
쿼리 매개변수는 URL의 일부로 API에 데이터를 전달할 수 있게 해줍니다. 다음은 그 예입니다:
import requests
url = 'https://jsonplaceholder.typicode.com/posts'
params = {'userId': 1}
response = requests.get(url, params=params)
print(response.status_code)
print(response.json())
이 예제에서는 /posts
엔드포인트에 userId
매개변수를 전달하고 있습니다. requests.get
함수의 params
매개변수는 쿼리 매개변수의 사전을 받습니다.
헤더 사용하기
헤더는 요청과 함께 추가 정보를 보내는 데 사용됩니다. 다음은 그 예입니다:
import requests
url = 'https://jsonplaceholder.typicode.com/posts'
headers = {'Content-Type': 'application/json'}
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.json())
이 예제에서는 Content-Type
헤더를 application/json
으로 설정하고 있습니다. requests.get
함수의 headers
매개변수는 헤더의 사전을 받습니다.
인증
많은 API는 인증을 요구합니다. requests
라이브러리는 Basic Auth와 OAuth를 포함한 다양한 인증 방법을 지원합니다. 다음은 Basic Auth를 사용하는 방법의 예입니다:
import requests
from requests.auth import HTTPBasicAuth
url = 'https://api.example.com/user'
auth = HTTPBasicAuth('username', 'password')
response = requests.get(url, auth=auth)
print(response.status_code)
print(response.json())
이 예제에서는 API에 인증하기 위해 Basic Auth를 사용하고 있습니다. requests.get
함수의 auth
매개변수는 HTTPBasicAuth
인스턴스를 받습니다.
Python POST 요청 테스트하는 방법
Apidog는 API 테스트를 위한 강력한 도구입니다. API 요청을 생성하고 저장하며 컬렉션으로 정리하고 팀과 공유할 수 있습니다.
이제 Apidog를 사용하여 POST 요청을 테스트하는 방법은 다음과 같습니다:
- Apidog를 열고 새로운 요청을 만듭니다.

2. 요청 방법을 POST로 설정합니다.

3. 업데이트하려는 리소스의 URL을 입력합니다. 추가 헤더나 매개변수를 추가한 후 “전송” 버튼을 클릭하여 요청을 보냅니다.

4. 응답이 예상한 것인지 확인합니다.

결론
이 가이드에서는 Python에서 API 요청 및 응답을 처리하는 필수 사항을 다루었습니다. GET 및 POST 요청 만들기, 응답 처리, 오류 처리에 대해 살펴보았습니다. 또한 여러분의 삶을 더 쉽게 만들어줄 몇 가지 고급 팁과 요령도 탐구했습니다. API는 프로젝트를 위한 가능성의 세계를 열 수 있는 강력한 도구임을 기억하세요. 그러니 진행하고 실험하며 놀라운 것들을 만들어 보세요!
그리고 API 개발 및 테스트를 간소화하기 위해 무료로 Apidog를 다운로드하는 것을 잊지 마세요. 코딩을 즐기세요!