- Published on
FastAPI, Starlette, Uvicorn, 그리고 Thread에 대한 이해
- Authors
- Name
- devnmin
🚀 FastAPI, Starlette, Uvicorn, 그리고 Thread에 대한 이해
FastAPI는 현대적인 Python 웹 프레임워크로, 비동기 처리를 쉽게 구현할 수 있는 기능을 제공합니다. 이 글에서는 FastAPI의 핵심 구성 요소인 Starlette, Uvicorn, 그리고 Thread 활용법에 대해 알아보겠습니다.
1. FastAPI란?
FastAPI는 Python의 비동기 기능을 활용하여 빠르고 효율적인 API 서버를 구축할 수 있는 프레임워크입니다.
🎯 주요 특징
- 빠른 성능: Starlette과 Pydantic을 활용하여 뛰어난 속도를 자랑합니다.
- 비동기 지원:
async
및await
을 기본적으로 활용 가능 - 자동 문서화: 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 비교 정리
항목 | 역할 |
---|---|
FastAPI | API 개발을 위한 프레임워크 |
Starlette | ASGI 애플리케이션 관리, 미들웨어 제공 |
Uvicorn | FastAPI 실행을 위한 ASGI 서버 |
Thread | 비동기 작업과 별개로 동기 작업을 병렬 처리 |
✨ 결론
FastAPI는 Starlette과 Uvicorn을 활용하여 빠르고 강력한 API 서버를 구축할 수 있습니다. 또한, 특정 상황에서는 Thread를 활용하여 백그라운드 작업을 효율적으로 실행할 수도 있습니다.
FastAPI를 활용하여 비동기 프로그래밍을 마스터해 보세요! 🚀