[파이썬] aiohttp 비동기 HTTP 클라이언트 시작하기

가끔 우리는 HTTP 요청을 비동기로 처리해야 하는 상황에 직면할 수 있습니다. 이는 여러 요청을 병렬로 처리하거나, 긴 응답 시간이 필요한 작업을 대기하지 않고 다른 작업을 수행하는데 유용합니다.

aiohttp는 Python에서 비동기 HTTP 클라이언트를 구현하기 위한 매우 강력한 라이브러리입니다. 이 블로그 포스트에서는 aiohttp를 사용하여 비동기 HTTP 요청을 어떻게 처리하는지 알아보겠습니다.

aiohttp 설치하기

먼저, aiohttp를 설치해야 합니다. pip를 사용하여 간단하게 설치할 수 있습니다.

pip install aiohttp

기본적인 aiohttp 예제

이제 aiohttp를 사용하여 간단한 GET 요청을 보내는 방법을 살펴보겠습니다. 다음은 aiohttp를 사용하여 GitHub API에서 사용자 정보를 가져온다는 예제입니다.

import aiohttp
import asyncio

async def fetch_user(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.json()

async def main():
    user = await fetch_user('https://api.github.com/users/username')
    print(user)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

위의 예제에서 fetch_user 함수는 주어진 URL에서 사용자 정보를 가져오는 비동기 함수입니다. main 함수는 fetch_user 함수를 호출하고, 사용자 정보를 출력해줍니다.

asyncio 모듈을 사용하여 비동기 코드를 작성하고, loop.run_until_complete() 함수를 사용하여 이벤트 루프를 실행합니다.

요청과 응답 처리하기

aiohttp를 사용하면 다양한 방식으로 요청과 응답을 처리할 수 있습니다. 예를 들어, POST 요청을 보내거나, 커스텀 헤더를 설정하거나, 파일을 업로드할 수도 있습니다.

import aiohttp
import asyncio

async def post_data(url, data):
    async with aiohttp.ClientSession() as session:
        async with session.post(url, data=data) as response:
            return await response.json()

async def main():
    response = await post_data('https://api.example.com/endpoint', data={'key': 'value'})
    print(response)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

위의 예제에서 post_data 함수는 POST 요청을 보내는 비동기 함수입니다. data 매개변수로 전달된 데이터를 요청의 본문에 포함시킵니다. 그리고 response.json()을 사용하여 응답을 JSON 형식으로 파싱합니다.

aiohttp로 요청과 응답을 처리하는 방법은 다양합니다. 필요한 경우 aiohttp 문서를 참조하여 더 자세한 정보를 확인할 수 있습니다.

결론

aiohttp를 사용하면 Python에서 비동기 HTTP 클라이언트를 쉽게 구현할 수 있습니다. 이 블로그 포스트에서는 aiohttp를 사용하여 기본적인 요청을 어떻게 처리하는지 살펴보았습니다. aiohttp에는 더 많은 기능과 옵션이 있으니, 필요한 경우 공식 문서를 참조해보세요. 비동기 HTTP 클라이언트를 사용하면 웹 애플리케이션의 성능을 향상시킬 수 있으므로, 적절한 상황에서 적극적으로 활용해보는 것이 좋습니다.