ASGI Server와 ASGI App

정지웅·2025년 4월 24일

FastAPI는 현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 Python의 API를 빌드하기 위한 웹 프레임워크입니다.

ASGI

Python 비동기 웹 프레임워크를 위한 표준 인터페이스. ASGI는 웹 소켓, 비동기 요청, 실시간 통신과 같은 요구사항을 충족시키기 위해 만들어진 인터페이스입니다. ASGI Server(ex:Uvicorn)에서 ASGI App(ex: FastAPI 기반으로 작성된 App)을 실행시킵니다. 아래는 ASGI Server가 ASGI App을 실행시키는 가장 로우 레벨단의 코드입니다.

async def app(scope, receive, send):
	...
  1. Uvicorn 서버가 가동되면 app이라는 ASGI 콜러블을 메모리에 올리고, asyncio 이벤트 루프를 시작합니다.
  2. Uvicorn 서버가 클라이언트의 요청을 수신하면, 요청 내용을 파싱해서 scope 딕셔너리를 생성합니다.
scope: {
	"type": "http",
    "http_version": "1.1",
    ...
}

그리고 receive, send 함수도 정의하여 app 함수를 실행합니다.
** receive 함수는 클라이언트가 보낸 body를 읽기 위한 함수입니다. 클라이언트가 보낸 body는 receive()를 통해 조각조각 들어오게 됩니다.

  1. 개발자가 작성한 FastAPI 코드들이 실행되어 리턴 값을 받고, FastAPI 내부적으로 2번에서 Uvicorn 서버가 정의해줬던 send, receive 함수들을 실행합니다.
await send({
	"type": "http.response.body",
    "body": { "message": "Bye, JW" }
})
  1. Uvicorn 서버가 값을 받아 클라이언트에게 리턴해줍니다.

0개의 댓글