[python] FastAPI에서 비동기 처리하기

FastAPI는 Python의 빠른 웹 프레임워크로 알려져 있습니다. 비동기 처리는 웹 애플리케이션의 성능과 확장성을 향상시키는 데 중요한 역할을 합니다. 이번 블로그 포스트에서는 FastAPI에서 비동기 처리를 어떻게 할 수 있는지 살펴보겠습니다.

비동기 처리란 무엇인가요?

비동기 처리는 한 작업이 완료될 때까지 다른 작업을 중단시키지 않고 동시에 여러 작업을 수행할 수 있는 방식입니다. 이는 I/O 작업이 많은 웹 애플리케이션에서 유용합니다. 예를 들어, 데이터베이스에서 데이터를 가져오거나 외부 API에 요청을 보내는 동안 다른 작업을 수행할 수 있습니다.

FastAPI에서 비동기 처리를 위한 준비

FastAPI는 비동기 처리를 위해 asyncawait 키워드를 사용할 수 있도록 지원합니다. 따라서 비동기 함수를 정의하고 사용할 수 있습니다. 또한, FastAPI는 asyncio와 함께 사용되어 비동기 작업을 관리합니다.

비동기 함수 정의하기

FastAPI에서 비동기 함수를 정의하기 위해서는 함수 선언 앞에 async 키워드를 붙여야 합니다. 비동기 함수는 await 키워드를 사용하여 다른 비동기 함수나 작업이 완료될 때까지 기다릴 수 있습니다. 예를 들어, 데이터베이스에서 데이터를 읽고 반환하는 비동기 함수는 다음과 같이 정의할 수 있습니다.

async def read_data_from_db():
    # 데이터베이스에서 데이터 읽기
    await db.read()
    # 데이터 반환
    return data

비동기 함수 사용하기

FastAPI에서 비동기 함수를 사용하기 위해 router 데코레이터나 @app.route 데코레이터 앞에 async 키워드를 붙여야 합니다. 예를 들어, GET 요청을 처리하는 핸들러 함수가 있다고 가정해봅시다. 이 함수에서는 비동기 함수를 사용하여 데이터를 가져오고 반환합니다.

from fastapi import FastAPI

app = FastAPI()

@app.get("/data")
async def get_data():
    data = await read_data_from_db()
    return data

비동기 작업을 위한 라이브러리 사용하기

FastAPI에서 비동기 작업을 수행하기 위해 asyncio 라이브러리를 사용할 수 있습니다. asyncio는 비동기 작업을 관리하는 데 필요한 도구와 유틸리티 함수를 제공합니다. 예를 들어, asyncio.sleep 함수를 사용하여 비동기 코드에서 지연을 발생시킬 수 있습니다.

import asyncio

async def some_async_function():
    await asyncio.sleep(1) # 1초 대기

    # 비동기 작업 수행

    return result

결론

FastAPI에서 비동기 처리를 위해 asyncawait 키워드를 사용할 수 있으며, asyncio와 함께 비동기 작업을 관리할 수 있습니다. 이를 통해 FastAPI 웹 애플리케이션의 성능과 확장성을 향상시킬 수 있습니다. 비동기 처리를 활용하여 웹 애플리케이션을 작성할 때 FastAPI는 좋은 선택지가 될 수 있습니다.

참고 자료