FastAPI에서 async/await으로 비동기 API 만들기 - 느린 작업도 빠르게 처리하기
FastAPI는 Python의 async/await
구문을 완벽하게 지원하는 웹 프레임워크입니다.
이를 통해 느린 작업(예: 파일 처리, 외부 API 호출, 데이터베이스 쿼리 등)도 효율적이고 빠르게 처리할 수 있습니다.
✅ 비동기 함수란?
async def
로 선언된 함수는 비동기 함수이며, await
를 통해 다른 작업이 완료될 때까지 기다리는 동안 블로킹 없이 다른 요청을 처리할 수 있습니다.
즉, 하나의 요청이 처리되는 동안 서버가 멈추지 않고 동시에 여러 요청을 병렬로 처리할 수 있습니다.
✅ FastAPI 비동기 예제
느린 작업(예: 3초 대기)을 시뮬레이션한 API를 만들어봅니다.
from fastapi import FastAPI
import asyncio
app = FastAPI()
@app.get("/sync-task")
def sync_task():
import time
time.sleep(3) # 동기 처리: 서버가 멈춤
return {"message": "동기 작업 완료"}
@app.get("/async-task")
async def async_task():
await asyncio.sleep(3) # 비동기 처리: 다른 요청 병렬 처리 가능
return {"message": "비동기 작업 완료"}
🔍 주요 차이점
항목 | /sync-task | /async-task |
---|---|---|
서버 응답 대기 | 3초 동안 멈춤 | 다른 요청 동시에 처리 가능 |
async/await 사용 | ❌ | ✅ |
동시 처리 능력 | 낮음 | 높음 |
✅ 테스트 방법
서버 실행:
uvicorn main:app --reload
테스트 URL:
Postman이나 Swagger UI(/docs)에서 동시에 여러 요청을 보내보면, 비동기 엔드포인트는 지연 없이 처리되는 걸 확인할 수 있습니다.
✅ 언제 async/await을 써야 할까?
- ⏳ 외부 API 호출
- 💾 대기 시간이 긴 데이터베이스 쿼리
- 📁 파일 업로드/다운로드
- 📨 메일 전송, 슬랙/카카오톡 알림
즉, CPU 연산이 아닌 I/O 바운드 작업에서는 비동기를 사용하면 서버 응답성과 처리량이 눈에 띄게 향상됩니다.
✅ 정리
async def
로 선언된 비동기 함수는 동시에 여러 요청을 처리할 수 있습니다.await
는 느린 작업이 완료될 때까지 기다리며, 그 사이 다른 요청이 처리됩니다.- FastAPI는 Python의 비동기 기능을 적극 활용해 높은 성능의 API 서버를 만들 수 있도록 도와줍니다.
FastAPI의 async/await을 적절히 활용하면, 느린 작업도 빠르게 처리되는 고성능 API를 구축할 수 있습니다.
※ 본 예제는 Python 3.12 + FastAPI 최신 버전에서 테스트되었습니다.
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 나만의 명언 봇 만들기 – JSON으로 랜덤 출력하기 (2) | 2025.03.28 |
---|---|
[Python] 파이썬으로 PDF 내용 추출하는 방법 – PyMuPDF(fitz) 활용 (0) | 2025.03.26 |
FastAPI에서 POST 요청 처리하기 - 사용자 입력 데이터 받기 예제 (0) | 2025.03.20 |
FastAPI로 빠르고 간단한 파이썬 API 서버 만들기 - 설치부터 기본 예제까지 (0) | 2025.03.20 |
파이썬 로그 관리, loguru로 더 쉽게! 설정부터 파일 저장까지 정리 (0) | 2025.03.20 |