[python] aiohttp를 사용하여 비동기적으로 API 서버 만들기

이번 포스트에서는 Python의 aiohttp 라이브러리를 사용하여 비동기적으로 API 서버를 만드는 방법에 대해 알아보겠습니다. aiohttpasyncio를 기반으로 한 HTTP 클라이언트 및 서버 프레임워크로, 비동기적으로 네트워크 요청과 응답을 다룰 수 있습니다.

1. aiohttp 라이브러리 설치하기

먼저 aiohttp 라이브러리를 설치해야 합니다. pip를 사용하여 설치합니다.

pip install aiohttp

2. 비동기적으로 API 서버 만들기

아래는 간단한 예제 코드로 비동기적으로 API 서버를 생성하는 방법을 보여줍니다.

import aiohttp
from aiohttp import web

async def handle(request):
    name = request.query.get('name', 'Anonymous')
    return web.Response(text=f'Hello, {name}!')

app = web.Application()
app.router.add_get('/', handle)

web.run_app(app)

위 코드에서는 / 경로에 대한 GET 요청을 처리하는 핸들러 함수 handle을 작성했습니다. 이 함수는 쿼리 매개변수 name을 받아와서 해당하는 인사 메시지를 반환합니다. 이후 web.Application을 통해 애플리케이션을 생성하고, app.router를 통해 경로와 핸들러 함수를 연결합니다. 마지막으로 web.run_app을 호출하여 서버를 시작합니다.

3. 비동기적으로 요청 보내기

aiohttp를 사용하면 비동기적으로 다른 서버에 요청을 보낼 수도 있습니다. 아래는 간단한 GET 요청을 비동기적으로 보내는 예제 코드입니다.

import aiohttp
import asyncio

async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get('http://api.example.com') as response:
            print(await response.text())
            # 결과 출력

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

위 코드에서는 aiohttp.ClientSession을 사용하여 세션을 생성하고, session.get 메서드로 GET 요청을 보냅니다. 그리고 요청의 응답을 비동기적으로 받아와서 response.text()를 호출하여 결과를 얻습니다.

결론

aiohttp를 사용하면 Python에서 비동기적으로 API 서버를 만들고 네트워크 요청을 다룰 수 있습니다. 이를 통해 더욱 효율적이고 반응성 있는 서버를 개발할 수 있습니다. aiohttp의 자세한 기능과 사용법에 대해서는 공식 문서를 참고하시기 바랍니다.