[Python] requests 요청 후 기다리는 로직과 타임아웃 설정

2025. 7. 28. 00:11·개발 (Development)/Python

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
'개발 (Development)/Python' 카테고리의 다른 글
  • [Python] 문자열 각 단어의 첫 글자를 대문자로 만드는 방법
  • [Python] 폴더 내 CSV 형식 로그 파일 시각화하기
  • [Python] 문자열 2줄 이상인지 확인하는 방법
  • [Python] 딕셔너리에서 정규표현식으로 특정 형식의 키 추출하기
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (231)
      • 개발 (Development) (165)
        • Algorithm (1)
        • Angular (1)
        • AWS (6)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (31)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    springboot
    JSON
    docker
    리눅스 마스터 2급
    pandas
    AWS
    백준온라인저지
    Kafka
    Linux
    timescaledb
    PostgreSQL
    ADsP
    백준자바
    Spring boot
    오답노트
    deepseek
    java
    백준알고리즘
    리눅스 마스터 2급 2차
    자바
    Kubernetes
    javascript
    백준
    Linux master
    python
    Vue.js
    JPA
    데이터분석
    DevOps
    MyBatis
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Python] requests 요청 후 기다리는 로직과 타임아웃 설정
상단으로

티스토리툴바