Published on

FastAPI, Starlette, Uvicorn, 그리고 Thread에 대한 이해

Authors
  • avatar
    Name
    devnmin
    Twitter

🚀 FastAPI, Starlette, Uvicorn, 그리고 Thread에 대한 이해

FastAPI는 현대적인 Python 웹 프레임워크로, 비동기 처리를 쉽게 구현할 수 있는 기능을 제공합니다. 이 글에서는 FastAPI의 핵심 구성 요소인 Starlette, Uvicorn, 그리고 Thread 활용법에 대해 알아보겠습니다.

1. FastAPI란?

FastAPI는 Python의 비동기 기능을 활용하여 빠르고 효율적인 API 서버를 구축할 수 있는 프레임워크입니다.

🎯 주요 특징

  • 빠른 성능: Starlette과 Pydantic을 활용하여 뛰어난 속도를 자랑합니다.
  • 비동기 지원: asyncawait을 기본적으로 활용 가능
  • 자동 문서화: Swagger UI 및 ReDoc을 통해 API 문서를 자동 생성
  • 타입 검사 지원: Python 타입 힌트를 활용하여 자동 검증 수행

✨ FastAPI 예제 코드

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"message": "Hello, FastAPI!"}

위 코드를 실행하면 http://127.0.0.1:8000에서 API를 사용할 수 있습니다.

2. Starlette이란?

FastAPI는 내부적으로 Starlette이라는 ASGI 프레임워크를 기반으로 동작합니다.

🛠 Starlette의 역할

  • 비동기 요청 처리
  • 미들웨어 지원
  • WebSocket, GraphQL, 백그라운드 작업 처리

즉, FastAPI는 Starlette을 활용하여 API 요청을 관리하고 있습니다.

3. Uvicorn이란?

FastAPI 애플리케이션을 실행하려면 ASGI 서버가 필요하며, 대표적으로 Uvicorn을 사용합니다.

🚀 Uvicorn의 특징

  • 고성능 ASGI 서버: 비동기 이벤트 루프 기반으로 빠른 요청 처리 가능
  • 멀티 프로세스 지원: --workers 옵션으로 여러 프로세스를 활용 가능

🏃‍♂️ FastAPI 실행하기 (Uvicorn 사용)

uvicorn main:app --host 0.0.0.0 --port 8000 --reload

위 명령어를 실행하면 FastAPI 서버가 8000번 포트에서 실행됩니다.

4. FastAPI에서 Thread 활용

FastAPI는 비동기 방식으로 동작하지만, 특정 작업에서는 Thread를 활용한 동기 처리가 필요할 수 있습니다.

🔥 Thread 활용 예제

import threading
import time
from fastapi import FastAPI

app = FastAPI()

def blocking_task():
    time.sleep(5)
    print("작업 완료!")

@app.get("/run-thread")
def run_thread():
    thread = threading.Thread(target=blocking_task)
    thread.start()
    return {"message": "비동기 작업 실행 중"}

🧐 Thread가 필요한 경우

  • I/O 바운드 작업 (파일 읽기/쓰기, 데이터베이스 쿼리)
  • 백그라운드에서 실행해야 하는 작업 (예: 이메일 전송, 데이터 처리)

5. FastAPI, Starlette, Uvicorn, Thread 비교 정리

항목역할
FastAPIAPI 개발을 위한 프레임워크
StarletteASGI 애플리케이션 관리, 미들웨어 제공
UvicornFastAPI 실행을 위한 ASGI 서버
Thread비동기 작업과 별개로 동기 작업을 병렬 처리

✨ 결론

FastAPI는 StarletteUvicorn을 활용하여 빠르고 강력한 API 서버를 구축할 수 있습니다. 또한, 특정 상황에서는 Thread를 활용하여 백그라운드 작업을 효율적으로 실행할 수도 있습니다.

FastAPI를 활용하여 비동기 프로그래밍을 마스터해 보세요! 🚀