[python] FastAPI에서 async/await으로 비동기 API 만들기 - 느린 작업도 빠르게 처리하기

2025. 3. 20. 18:49·프로그래밍/Python

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:

  • http://127.0.0.1:8000/sync-task
  • http://127.0.0.1:8000/async-task

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
'프로그래밍/Python' 카테고리의 다른 글
  • [Python] 나만의 명언 봇 만들기 – JSON으로 랜덤 출력하기
  • [Python] 파이썬으로 PDF 내용 추출하는 방법 – PyMuPDF(fitz) 활용
  • FastAPI에서 POST 요청 처리하기 - 사용자 입력 데이터 받기 예제
  • FastAPI로 빠르고 간단한 파이썬 API 서버 만들기 - 설치부터 기본 예제까지
큐레이트
큐레이트
저의 일상을 기록하는 블로그입니다.
  • 큐레이트
    큐레이트의 기록
    큐레이트
  • 전체
    오늘
    어제
    • 분류 전체보기 (193) N
      • 국내여행 (37)
        • 애견여행 (33)
        • 맛집여행 (2)
      • 프로그래밍 (85) N
        • C# (24)
        • Python (24)
        • Flutter (5)
        • .NET (4)
        • ASP (7)
        • Next.js (3) N
        • Html (5)
        • Tomcat (2)
        • typescript (3)
        • etc (8)
      • 일상생활 (71)
        • 다이어트일지 (70)
        • 기타 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 복이랑스마트스토어
    • 복이랑블로그
  • 공지사항

    • 블로그 소개
  • 인기 글

  • 태그

    티스토리챌린지
    식단관리
    오블완
    제주도
    웹개발
    헬스
    다이어트
    애견여행
    pt
    DevExpress
    오운완
    애견동반
    자동화
    식단
    다이어트 일지
    다이어트일지
    파이썬
    국내여행
    체중기록
    Python
    애견동반여행
    C#
    HTML
    일상생활
    제주도애견동반여행
    운동일지
    iis
    Flutter
    자동매매
    FastAPI
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
큐레이트
[python] FastAPI에서 async/await으로 비동기 API 만들기 - 느린 작업도 빠르게 처리하기
상단으로

티스토리툴바