
1. 기본/개요
파이썬에서 외부 REST API와 통신할 때 가장 널리 쓰이는 도구는 requests 라이브러리입니다. requests 공식 문서는 이 라이브러리를 "사람을 위한 우아하고 단순한 HTTP 라이브러리"라고 소개합니다. 중요한 점은 requests가 파이썬 표준 라이브러리에 포함된 모듈이 아니라 별도로 설치해야 하는 서드파티 패키지라는 것입니다. 표준 라이브러리만으로 HTTP 요청을 처리하고 싶다면 urllib.request를 사용할 수 있지만, 이는 API 설계가 번거롭다는 평가를 받아 requests가 대체재로 널리 채택되었습니다.
PyPI 공식 패키지 페이지에 따르면 requests는 Apache-2.0 라이선스로 배포되며, 최신 버전은 Python 3.10 이상을 공식 지원합니다. 또한 GitHub 기준 400만 개 이상의 저장소가 requests에 의존하고 있고, 주간 약 3억 회의 다운로드가 이뤄지는, 파이썬에서 가장 많이 설치되는 패키지 중 하나라고 PyPI 페이지는 밝히고 있습니다. 다만 이 숫자는 특정 시점 PyPI 페이지에 게시된 값이며, 실시간으로 변동될 수 있다는 점을 참고하시기 바랍니다.
2. 기능/스펙
requests의 기본 사용법은 매우 단순합니다. requests.get(), requests.post(), requests.put(), requests.delete(), requests.head(), requests.options() 등 HTTP 메서드별 함수를 그대로 호출하면 요청을 보낼 수 있고, 쿼리 문자열은 params 인자에 딕셔너리를 전달하면 자동으로 URL에 인코딩됩니다. 응답은 Response 객체로 반환되며 .status_code, .headers, .text, .json() 등의 속성·메서드로 필요한 정보를 꺼낼 수 있습니다.
세션 관리 측면에서는 Session 객체를 사용하면 여러 요청에 걸쳐 헤더, 쿠키, 연결을 유지할 수 있고, 동일한 호스트에 여러 번 요청을 보낼 경우 기저의 TCP 연결이 재사용되어 성능이 향상됩니다. 또한 requests 공식 문서는 keep-alive와 HTTP 커넥션 풀링이 urllib3 덕분에 100% 자동으로 처리된다고 설명합니다. 인증 측면에서는 기본 인증과 다이제스트 인증을 기본 제공하며, OAuth 인증은 requests-oauthlib라는 별도 확장 라이브러리를 통해 지원됩니다.
다만 한 가지 명확히 짚어야 할 스펙상 한계가 있습니다. Real Python의 가이드에 따르면 requests는 비동기 HTTP 요청을 직접 지원하지 않으며, 비동기 처리가 필요하다면 AIOHTTP나 HTTPX 같은 다른 라이브러리를 사용해야 합니다. 또한 requests 공식 문서에 따르면 기본적으로 실패한 연결에 대한 재시도 기능을 제공하지 않으며, 자동 재시도가 필요하면 urllib3.util.Retry 클래스를 활용해 Session에 직접 구성해야 합니다.
3. 장단점 (내 생각과 비판 포함)
requests의 가장 큰 장점은 직관성입니다. GET 요청 하나를 보내는 데 필요한 코드가 표준 라이브러리 대비 훨씬 짧고 읽기 쉬우며, JSON 응답을 다루는 API 연동 작업에서 .json() 메서드 하나로 파싱까지 끝난다는 점은 실무 생산성에 실질적으로 기여한다고 판단됩니다. 다만 개인적으로 아쉬운 부분은, 표준 라이브러리가 아니기 때문에 프로젝트마다 별도 설치·버전 관리가 필요하고, 의존성이 늘어난다는 점입니다. 이는 requests의 결함이라기보다 서드파티 패키지 구조 자체의 특성이지만, 의존성 최소화가 중요한 환경에서는 고려해야 할 요소입니다.
더 비판적으로 볼 지점은 비동기 미지원입니다. 최근 API 연동 작업 중 다수의 동시 요청을 처리해야 하는 경우(예: 여러 엔드포인트를 병렬로 호출)에는 requests만으로는 성능 한계가 뚜렷합니다. 이런 상황에서 requests에 머무르지 않고 httpx나 aiohttp로 전환을 검토하는 것이 합리적이라고 생각되지만, 두 대안 라이브러리 간의 정량적 성능 차이 수치는 이번 조사에서 확인할 수 없었으므로 구체적인 벤치마크 값을 단정하지는 않겠습니다.
4. 추천대상
단순한 동기(순차) 방식으로 REST API를 호출하고 JSON 응답을 처리하면 되는 대부분의 스크립트, 자동화 도구, 데이터 수집 파이프라인 초기 단계에는 requests가 가장 무난한 선택입니다. 특히 파이썬 입문자나 빠르게 프로토타입을 만들어야 하는 개발자에게 적합합니다. 반면 다수의 API를 동시에 병렬 호출해야 하거나 웹소켓·스트리밍처럼 비동기 처리가 본질적으로 필요한 서비스라면, requests 대신 처음부터 httpx나 aiohttp 같은 비동기 지원 라이브러리를 검토하는 것이 더 적합할 수 있습니다.
5. FAQ
Q1. requests는 파이썬에 기본 내장되어 있나요?
A. 아닙니다. Real Python의 설명대로 requests는 파이썬 표준 라이브러리가 아닌 서드파티 라이브러리이므로 pip로 별도 설치해야 합니다.
Q2. requests로 비동기 요청을 보낼 수 있나요?
A. 직접적으로는 불가능합니다. Real Python 가이드에 따르면 비동기 지원이 필요하면 AIOHTTP나 HTTPX 사용을 권장합니다.
Q3. 같은 서버에 여러 번 요청을 보낼 때 성능을 높이는 방법이 있나요?
A. Session 객체를 사용하면 TCP 연결이 재사용되어 성능이 향상된다고 공식 문서 예제가 설명합니다.
Q4. requests가 실패한 요청을 자동으로 재시도해주나요?
A. 기본값으로는 재시도하지 않습니다. urllib3.util.Retry 클래스를 이용해 직접 재시도 로직을 구성해야 합니다.
Q5. requests의 최신 버전이 지원하는 파이썬 최소 버전은 몇인가요?
A. PyPI 공식 페이지 기준 Python 3.10 이상을 요구합니다. 다만 이는 특정 조회 시점의 정보이므로, 실제 프로젝트 적용 전에는 PyPI 페이지에서 최신 버전 요건을 다시 확인하는 것을 권장합니다.
6. 출처
Requests 공식 문서 (requests.readthedocs.io)
PyPI, requests 프로젝트 페이지 (pypi.org/project/requests)
Requests Documentation Release 2.34.2 (buildmedia.readthedocs.org)
Real Python, "Python's Requests Library (Guide)" (realpython.com)
Requests Quickstart 문서 (3.python-requests.org)