
파이썬에서 외부 REST API를 호출해야 할 때 가장 먼저 떠올리는 라이브러리는 단연 requests입니다. "HTTP for Humans"라는 슬로건 그대로, 복잡한 HTTP 통신 과정을 매우 단순한 문법으로 감싸주는 도구입니다. 이번 글에서는 requests의 기본 개념부터 기능, 장단점, 추천 대상, 자주 묻는 질문까지 정리해보겠습니다.
1. 기본/개요: requests는 무엇이고 왜 표준처럼 쓰이나
requests는 Kenneth Reitz가 2011년 2월에 처음 공개한 파이썬 HTTP 클라이언트 라이브러리입니다. 파이썬 표준 라이브러리는 아니지만, GitHub 기준 400만 개 이상의 저장소가 이 라이브러리에 의존하고 있을 정도로 사실상 업계 표준처럼 자리 잡았습니다. 공식 문서(requests.readthedocs.io)에 따르면 현재 안정 버전은 2.34.2이며, Python 3.10 이상을 공식 지원합니다.
requests의 존재 이유는 명확합니다. 파이썬 표준 라이브러리인 urllib은 기능은 갖추고 있지만 API가 장황하고 직관적이지 않습니다. requests는 이를 requests.get(), requests.post()처럼 한 줄로 끝나는 함수 호출로 단순화했습니다. 내부적으로는 urllib3를 기반으로 커넥션 풀링과 Keep-Alive를 자동으로 처리해줍니다.
개인적으로 느끼는 점: requests가 오랫동안 사실상의 표준이 될 수 있었던 이유는 기술적 우위보다 "설계 철학"에 있다고 생각합니다. response.json() 한 줄로 JSON 파싱까지 끝나는 경험은, API를 다뤄본 사람이라면 왜 이 라이브러리가 압도적인 다운로드 수를 기록하는지 체감하게 만듭니다. 다만 표준 라이브러리가 아니라 외부 패키지라는 점은 프로젝트 의존성 관리 관점에서 항상 염두에 둬야 할 부분입니다.
2. 기능/스펙: GET부터 세션, 인증까지
requests가 제공하는 핵심 기능은 다음과 같습니다.
- HTTP 메서드 지원: GET, POST, PUT, PATCH, DELETE, HEAD 등 모든 주요 HTTP 메서드를 함수 하나로 호출 가능
- 자동 인코딩 처리: 쿼리스트링, 폼 데이터 인코딩을 자동으로 처리
- JSON 처리: 요청 시
json=파라미터로 바로 전송, 응답은.json()으로 즉시 파싱 - 세션(Session) 객체: 여러 요청에 걸쳐 쿠키, 헤더, 인증 정보를 유지
- 인증 지원: Basic Auth, 커스텀 인증 클래스 등 다양한 인증 방식 지원
- 타임아웃/재시도/프록시/SSL 검증: 실무에 필요한 옵션들을 파라미터로 세밀하게 제어 가능
- 예외 처리:
requests.exceptions모듈로 연결 오류, 타임아웃, HTTP 오류 등을 구분해 처리 가능
비판적으로 보면: requests는 동기(synchronous) 방식으로 설계된 라이브러리입니다. 즉 요청을 보내고 응답이 올 때까지 코드 실행이 그대로 멈춥니다. 수백~수천 개의 API 호출을 동시에 처리해야 하는 상황에서는 requests만으로는 성능 한계에 부딪히기 쉽고, 이런 경우 비동기 방식인 httpx나 aiohttp 같은 대안을 검토해야 합니다.
3. 장단점
장점
- 직관적인 API로 학습 곡선이 매우 낮음
- 공식 문서와 커뮤니티 자료가 방대해 문제 해결이 쉬움
- Session 객체로 로그인 유지, 헤더 공통화 등 실무 패턴을 쉽게 구현
- 커넥션 풀링이 기본 내장되어 있어 반복 호출 성능이 준수함
단점
- 동기 방식이라 대량의 동시 요청 처리에는 근본적인 한계
- 표준 라이브러리가 아니므로 별도 설치·버전 관리가 필요
- 매우 낮은 수준의 HTTP 제어(예: HTTP/2 지원 등)가 필요한 경우 기능이 제한적
제 생각: requests의 단점은 대부분 "설계 목적과 다른 곳에 쓸 때" 드러납니다. 애초에 사람이 다루기 쉬운 동기식 API를 지향한 라이브러리이므로, 대량 비동기 처리가 필요한 상황에 requests를 무리하게 끼워 맞추는 것은 도구 선택의 문제이지 라이브러리의 결함이라 보기는 어렵습니다.
4. 추천 대상
- 외부 API를 처음 연동해보는 파이썬 입문자
- 스크립트성 자동화 작업(날씨 API 호출, 웹훅 전송 등)을 빠르게 구현하려는 개발자
- 요청 수가 많지 않고 순차 처리로 충분한 백엔드/데이터 파이프라인 개발자
- 반면, 초당 수백 건 이상의 API를 동시에 호출해야 하는 고성능 서비스라면
httpx(비동기 지원) 또는aiohttp검토를 추천합니다.
5. FAQ
Q1. requests는 파이썬 표준 라이브러리인가요?
A. 아닙니다. pip install requests로 별도 설치해야 하는 서드파티 라이브러리입니다. 다만 실질적으로는 업계 표준처럼 널리 쓰입니다.
Q2. requests로 비동기 처리가 가능한가요?
A. requests 자체는 동기 방식만 지원합니다. 비동기 HTTP 요청이 필요하다면 httpx나 aiohttp 같은 별도 라이브러리를 사용해야 합니다.
Q3. API 키 같은 민감 정보는 어떻게 다뤄야 하나요?
A. 코드에 직접 하드코딩하지 않고 환경 변수나 별도 설정 파일로 분리해 관리하는 것이 일반적인 보안 권장 사항입니다. 다만 프로젝트별 구체적인 보안 요구사항은 상황에 따라 다르므로, 조직의 보안 정책을 함께 확인하는 것이 좋습니다.
Q4. requests와 urllib의 차이는 무엇인가요?
A. urllib은 파이썬 표준 라이브러리로 별도 설치가 필요 없지만 API가 장황합니다. requests는 외부 패키지지만 훨씬 간결한 API를 제공하며, urllib3를 기반으로 커넥션 풀링 등 편의 기능을 자동으로 처리해줍니다.
Q5. 최신 버전에서 지원이 끊긴 파이썬 버전이 있나요?
A. 공식 문서 기준 현재 requests는 Python 3.10 이상을 공식 지원합니다. 오래된 파이썬 버전을 사용 중이라면 라이브러리 업그레이드 전에 반드시 지원 범위를 확인해야 합니다.
6. 출처
- Requests 공식 문서 (requests.readthedocs.io)
- Requests GitHub 저장소 (github.com/psf/requests)
- Wikipedia, "Requests (software)" 항목