FastAPI:비동기 지원

김지우·2025년 7월 26일

Starlette 이란?

FastAPI는 톰 크리스티가 제작한 Starlette 패키지를 기반으로 한다. Starlette은 일반적인 HTTP요청과 응답을 처리한다.

해당 패키지는 파이썬 비동기 웹 표준인 ASGI를 지원한다. 다른 주요 파이썬 웹프레임워크는 전통적인 동기식 WSGI를 지원하지만 FastAPI는 ASGI를 지원하기 때문에 FastAPI는 블로킹이 걸리거나 대기하는데 낭비하는 시간을 줄일 수 있다.

동시성 유형

비동기를 지원하는 패키지를 공부하기 전에 동시성을 구현하는 방법을 알아보자

  • 병렬 컴퓨팅
    • 하나의 작업을 여러개의 CPU에 동시에 분산
  • 동시 컴퓨팅
    • 각 CPU가 여러가지 작업을 전환한다.

async, await, asyncio

동기 코드 예시

import time 

def q():
	print("지우: 집에 있지만 집에 가고 싶다")
    time.sleep(3)
    
def a():
	print("천사: 앞으로도 그럴거야")
    
def  main():
	q()
    a()

비동기 코드 예시

import asyncio

async def q():
    print("지우: 집에 있는데도 집에 가고 싶다")
    await asyncio.sleep(3)

async def a():
    print("천사: 앞으로도 평생 그럴거야")

async def main():
    await asyncio.gather(q(), a())

asyncio.run(main())

동기 코드와 달리 비동기 코드에서는 3초 안걸리고 파박 둘다 됨

FastAPI와 Async

FastAPI는 Starlette을 기반으로 돌아가기 때문에 동시 컴퓨팅의 의미에서의 비동기를 지원할 수 있다. 예시로는 대충 이렇게

from fastapi import FastAPI
import asyncio

app = FastAPI()

@app.get("/hi")
async def greet():
    await asyncio.sleep(1)
    return "Hello, World!"

개인적으로 비동기를 아무데나 붙이는게 속도 향상에 항상 도움이 된다는 생각이 들지 않는다. 명확하게 동시 컴퓨팅을 하는 상황에나 써야지 아무데나 간단한 부분까지 적용하면 오히려 비동기에 따른 오버헤드 때문에 느려질 수 있다고도 생각한다.

따라서 낄끼빠빠를 잘해야 하지 않을 까 싶다

profile
프로그래밍 기록 + 공부 기록

0개의 댓글