[파이썬] requests 캐시 처리 방법

소개

Python에서 HTTP 요청을 보내는 데 사용되는 requests 라이브러리는 편리하고 강력한 도구입니다. 하지만 반복적인 요청을 보낼 때마다 매번 데이터를 가져오는 것은 비효율적일 수 있습니다. 이 때, 캐싱을 이용하여 이전 요청의 응답을 재사용할 수 있습니다. 이 글에서는 requests 라이브러리에서 제공하는 캐시 처리 방법에 대해 알아보겠습니다.

메모리 캐시 사용하기

requests 라이브러리는 HTTP 요청의 응답을 메모리에 캐시하는 기능을 제공합니다. 이 기능을 사용하면 동일한 요청을 여러 번 보낼 때마다 네트워크에서 데이터를 다시 받아오지 않고, 메모리에서 가져올 수 있습니다.

import requests

session = requests.Session()

# GET 요청을 보낼 URL
url = "https://api.example.com/data"

# 캐시가 있는 경우 메모리에서 응답을 바로 반환
response = session.get(url)

# 캐시가 없는 경우 네트워크에서 데이터를 가져와 캐시에 저장한 후 응답 반환
response = session.get(url)

위의 예제에서 requests.Session() 객체를 생성한 후, 각각의 요청에 대해 session.get(url)을 호출하면 캐시된 응답을 반환합니다. 만약 해당 요청을 처음 보내는 경우에는 네트워크에서 데이터를 가져와 캐시에 저장하며, 다음에 동일한 요청을 보낼 때는 메모리에서 캐시된 응답을 사용합니다.

디스크 캐시 사용하기

메모리에 캐시된 데이터는 세션이 종료되면 사라집니다. 따라서, 캐시를 영구적으로 유지하고 싶다면 디스크 캐시를 사용할 수 있습니다. requests 라이브러리는 cachecontrol 패키지를 사용하여 디스크 캐시를 구현합니다.

먼저, cachecontrol 패키지를 설치해야 합니다.

$ pip install cachecontrol

그런 다음, 다음과 같이 CacheControl 어댑터를 사용하여 디스크 캐시를 설정할 수 있습니다.

import requests
from cachecontrol import CacheControl

# GET 요청을 보낼 URL
url = "https://api.example.com/data"

# 기본 requests 세션 생성
session = requests.Session()

# CacheControl 어댑터를 사용하여 디스크 캐시 사용 설정
cached_session = CacheControl(session)

# 캐시가 있는 경우 캐시된 응답을 반환
response = cached_session.get(url)

# 캐시가 없는 경우 네트워크에서 데이터를 가져와 캐시에 저장한 후 응답 반환
response = cached_session.get(url)

위의 예제에서 CacheControl 어댑터를 사용하여 캐시된 응답을 반환하도록 설정하였습니다. 이렇게 하면 요청에 대한 응답이 디스크에 캐시되고, 다음에 동일한 요청을 보낼 때는 디스크 캐시에서 응답을 가져옵니다.

요약

requests 라이브러리를 사용하여 HTTP 요청을 보낼 때 캐시를 사용하면 네트워크 트래픽을 줄이고 속도를 향상시킬 수 있습니다. 이 글에서는 requests 라이브러리에서 제공하는 메모리 캐시와 디스크 캐시 사용법에 대해 알아보았습니다. 이제 여러분은 requests 라이브러리를 더욱 효과적으로 활용할 수 있을 것입니다.

참고 문서: requests 공식 문서