Python에서 API 요청을 보낼 때 가장 많이 사용하는 라이브러리 중 하나가 requests
입니다. 이 라이브러리를 사용할 때 요청 후 응답을 얼마나 기다리는지에 대한 로직을 이해하고, 타임아웃 설정을 적절히 사용하는 것이 중요합니다.
이번 글에서는 requests
라이브러리의 응답 대기 방식과 타임아웃 기본값, 그리고 안정적인 요청 처리를 위한 팁을 정리해보겠습니다.
요청을 보낸 후 어떻게 동작할까?
requests
라이브러리는 기본적으로 동기(synchronous) 방식으로 작동합니다. 즉, 요청을 보내면 응답이 올 때까지 프로그램 실행을 멈추고 기다립니다.
예를 들어 다음과 같은 코드는:
import requests
response = requests.get("https://example.com")
print(response.status_code)
서버로부터 응답이 올 때까지 대기하게 됩니다.
기본 타임아웃은 존재하지 않는다
많은 분들이 requests
에는 기본 타임아웃이 있을 것이라 생각하지만, 기본 타임아웃은 설정되어 있지 않습니다.
즉, 위 예제처럼 timeout
파라미터 없이 요청을 보내면, 서버가 응답하지 않아도 무기한 대기하게 됩니다.
이는 실제 운영 환경에서는 매우 위험할 수 있습니다. 서버 응답이 느려지거나 연결이 실패했을 경우 프로그램이 멈춘 것처럼 보일 수 있기 때문입니다.
명시적으로 타임아웃 설정하기
안정적인 요청 처리를 위해서는 timeout
파라미터를 명시적으로 설정하는 것이 좋습니다.
response = requests.get("https://example.com", timeout=5)
- 위 코드는 연결과 응답까지 최대 5초 동안 기다립니다.
- 내부적으로는
timeout=(5, 5)
로 처리되어,- 첫 번째 값은 연결 시도 최대 시간 (
connect timeout
) - 두 번째 값은 응답을 기다리는 시간 (
read timeout
)입니다.
- 첫 번째 값은 연결 시도 최대 시간 (
복잡한 경우에는 다음과 같이 따로 지정할 수도 있습니다:
response = requests.get("https://example.com", timeout=(3, 10)) # 연결 3초, 응답 10초
요청 후 기다리는 다른 방식들
타임아웃 외에도, 요청 후 일정 시간 지연하거나 상태를 주기적으로 확인하는 로직이 필요할 때도 있습니다.
1. 일정 시간 대기 (sleep
사용)
import time
import requests
requests.get("https://example.com/start-job")
time.sleep(5) # 5초 후 결과 확인
requests.get("https://example.com/check-result")
2. 주기적으로 상태 확인 (폴링)
import time
import requests
job_id = "abc123"
while True:
status = requests.get(f"https://example.com/status/{job_id}").json()
if status["state"] == "done":
break
time.sleep(2) # 2초 간격으로 확인
마무리
Python의 requests
는 간단하고 직관적인 HTTP 요청 도구이지만, 타임아웃 설정은 필수에 가깝습니다. 기본값이 없기 때문에, 무한 대기가 발생하지 않도록 timeout
을 명시해주는 습관을 들이는 것이 좋습니다.
또한, 반복적인 요청이 필요한 경우에는 time.sleep()
이나 폴링 로직을 통해 응답을 기다리는 방식도 함께 고려해볼 수 있습니다.
'개발 (Development) > Python' 카테고리의 다른 글
[Python] 문자열 각 단어의 첫 글자를 대문자로 만드는 방법 (0) | 2025.08.03 |
---|---|
[Python] 폴더 내 CSV 형식 로그 파일 시각화하기 (3) | 2025.07.28 |
[Python] 문자열 2줄 이상인지 확인하는 방법 (0) | 2025.07.28 |
[Python] 딕셔너리에서 정규표현식으로 특정 형식의 키 추출하기 (4) | 2025.07.28 |
[Python] Pandas DataFrame에서 조건에 따라 행 삭제 및 특정 데이터 추출하는 방법 정리 (2) | 2025.07.20 |