파이썬/크롤링

Requests : HTTP 요청 최적화

코샵 2024. 2. 6. 10:19
반응형

Python의 requests 모듈은 HTTP 요청을 보내고 응답을 처리하는 데 사용되는 강력하면서도 간편한 도구입니다. 그러나 대규모 또는 빈번한 요청을 다루는 경우, 코드의 효율성을 고려하여 최적화할 필요가 있습니다. 이 블로그 글에서는 requests 모듈을 사용하여 HTTP 요청을 최적화하는 다양한 방법을 살펴보겠습니다.

 

1. 세션 유지

requests의 Session 객체를 사용하면 연속적인 요청 간에 상태를 유지할 수 있습니다. 이를 통해 동일한 서버에 여러 요청을 보낼 때 발생하는 연결 설정 오버헤드를 줄일 수 있습니다.

import requests

session = requests.Session()

# 여러 요청에서 동일한 세션 사용
response1 = session.get('https://naver.com/')
response2 = session.get('https://m.naver.com')

 

2. Keep-Alive 활성화

HTTP Keep-Alive를 활성화하여 여러 요청 간에 동일한 TCP 연결을 유지할 수 있습니다. 이는 연결 설정 및 해제 오버헤드를 줄여줍니다.

import requests

# Keep-Alive 활성화
response = requests.get('https://example.com', headers={'Connection': 'keep-alive'})

 

3. 헤더 최적화

불필요한 헤더를 제거하거나 최소한으로 유지하여 네트워크 대역폭을 절약하고 서버와의 통신을 최적화할 수 있습니다.

import requests

# 필요한 헤더만 유지
headers = {'User-Agent': 'my-app'}

response = requests.get('https://example.com', headers=headers)

 

4. 비동기 요청

asyncio 라이브러리와 httpx 등의 비동기 HTTP 라이브러리를 활용하여 동시에 여러 요청을 처리할 수 있습니다.

import asyncio
import httpx

async def fetch(url):
    async with httpx.AsyncClient() as client:
        response = await client.get(url)
        return response.text
        
urls = ['https://naver.com', 'https://google.com']

# 비동기 요청
results = asyncio.run(asyncio.gather(*(fetch(url) for url in urls)))

 

마무리

이러한 최적화 기법을 사용하면 Python에서 HTTP 요청을 효율적으로 다룰 있습니다. requests 모듈을 효과적으로 활용하여 네트워크 성능을 향상시키고, 빠르고 안정적인 애플리케이션을 개발할 있습니다. 계속해서 코드를 리팩토링하고 최적화하여 프로젝트의 성능을 꾸준히 개선해보세요.