안녕하세요.
이전 글에서는 FastAPI를 사용해서 api서버를 만들고 의존성 주입을 활용하는 방법에 대해 알아보았습니다.
2025.05.01 - [Python] - [Python] FastAPI 프레임워크로 api서버 만들기
[Python] FastAPI 프레임워크로 api서버 만들기
1. FastAPI란?FastAPI는 Python으로 작성된 최신 웹 프레임워크입니다. 주로 API 서버를 만들 때 사용합니다. 이름에서 알 수 있듯이 빠르고, 사용하기 쉽습니다.특히 자동으로 문서를 생성해주기 때문
stickode.tistory.com
2025.05.08 - [Python] - [Python]FastAPI의 의존성 주입(Dependency Injection) 활용하기
[Python]FastAPI의 의존성 주입(Dependency Injection) 활용하기
안녕하세요.이전 글에서는 FastAPI를 활용해 API서버를 생성해보았습니다.2025.05.01 - [Python] - [Python] FastAPI 프레임워크로 api서버 만들기 [Python] FastAPI 프레임워크로 api서버 만들기1. FastAPI란?FastAPI는 P
stickode.tistory.com
FastAPI는 파이썬의 최신 비동기 기능을 쉽고 강력하게 활용할 수 있는 웹 프레임워크입니다.
이 글에서는 FastAPI에서 비동기 엔드포인트를 만드는 방법과 비동기의 장점 및 주의사항에 대해 알아보겠습니다.
1. 비동기(Asynchronous)란?
비동기란, 프로그램이 어떤 작업을 처리하는 동안 다른 작업도 동시에 진행할 수 있도록 하는 방식입니다.
- 동기(Synchronous):
한 작업이 끝날 때까지 다음 작업을 시작하지 않음 - 비동기(Asynchronous):
대기 시간이 발생하는 작업(I/O 등) 중에도
다른 작업을 병렬로 처리 가능
비동기 처리는 주로 네트워크 요청, 파일 입출력, 데이터베이스 쿼리 등 외부 자원과의 통신에서 효율성을 극대화할 수 있습니다.
2. FastAPI에서 비동기 엔드포인트 만들기
FastAPI에서는 엔드포인트 함수를 async def로 선언하면 비동기 처리가 가능합니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/hello")
async def hello():
return {"message": "비동기 엔드포인트 예시입니다."}
- 함수 앞에 async를 붙이면 비동기 함수가 됩니다.
- FastAPI는 내부적으로 비동기 처리를 지원하는 서버(Uvicorn 등)와 함께 동작합니다.
3. 동기 함수와의 차이
동기 함수는 일반적으로 def로 선언합니다.
@app.get("/sync-hello")
def sync_hello():
return {"message": "동기 엔드포인트 예시입니다."}
비동기 함수와 동기 함수 모두 FastAPI에서 동작하지만, I/O 작업이 많은 경우 비동기 함수가 더 많은 요청을 효율적으로 처리할 수 있습니다.
4. 비동기 엔드포인트의 실전 예시
아래는 비동기 함수에서 실제로 대기 작업을 처리하는 예시입니다.
import asyncio
from fastapi import FastAPI
app = FastAPI()
@app.get("/wait")
async def wait_example():
await asyncio.sleep(3) # 3초 대기 (비동기)
return {"message": "3초 후 응답"}
- await asyncio.sleep(3)은 3초 동안 대기하지만, 서버는 이 시간 동안에도 다른 요청을 동시에 처리할 수 있습니다.
import time
@app.get("/sync-wait")
def sync_wait_example():
time.sleep(3) # 3초 동안 대기
return {"message": "3초 후 응답 (동기)"}
- 동기 함수에서는 time.sleep(3)을 사용하지만, 이 경우 서버 전체가 3초 동안 멈춰서 다른 요청을 처리할 수 없습니다.
5. 언제 비동기를 사용해야 하는가?
- 외부 API 호출, 데이터베이스 쿼리, 파일 입출력 등
대기 시간이 발생하는 작업이 있을 때 비동기 처리가 효과적입니다. - 계산량이 많은 작업(CPU 바운드)은 비동기보다는 멀티프로세싱 등
다른 방식이 더 적합할 수 있습니다.
5. 비동기 엔드포인트 사용 시 주의사항
- 외부 API 호출, 데이터베이스 쿼리, 파일 입출력 등 대기 시간이 발생하는 작업이 있을 때 비동기 처리가 효과적입니다.
- CPU 바운드 작업(예: 복잡한 계산)은 비동기보다 별도의 워커나 멀티프로세싱이 더 적합합니다.
- 엔드포인트 함수 내에서 동기 라이브러리(예: requests, sqlite3 등)를 사용하면 비동기의 장점이 사라질 수 있습니다.
→ 비동기 라이브러리(예: httpx, asyncpg 등) 사용 권장
'Python' 카테고리의 다른 글
[Python]FastAPI의 의존성 주입(Dependency Injection) 활용하기 (2) | 2025.05.08 |
---|---|
[Python] 텍스트 데이터 전처리- 불용어 제거 (0) | 2025.05.07 |
[Python] FastAPI 프레임워크로 api서버 만들기 (0) | 2025.05.01 |
[Python] 파일 자동 정리 프로그램 만들기 (0) | 2025.02.21 |
[Python] smtplib로 이메일 발송하기 (0) | 2025.02.18 |