Day 9: FastAPI의 비동기 프로그래밍으로 성능 극대화
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
FastAPI를 사용하는 백엔드 개발자 및 API 성능 최적화를 원하는 개발자
핵심 요약
- 비동기 프로그래밍(async)은
async def
와httpx
를 통해 I/O-보장 작업(API 호출, DB 조회)을 병렬 처리하여 성능 향상 가능 - 동기 코드(requests)는 작업 순차 처리로 8초 소요, 비동기 코드(httpx + asyncio.gather)는 6초 소요
- 비동기의 장점: 동시 처리, 리소스 최적화, 대규모 트래픽 대응
- 제한사항: CPU 집약적 작업(이미지 처리 등)은 Celery나 백그라운드 워커 사용 권장
섹션별 세부 요약
1. 비동기 프로그래밍의 개념
- 비동기(async)는 작업 실행 중 다른 작업 처리 가능
- 예: 류의 끓는 동안 채소 다듬기
- FastAPI는
async def
를 통해 비동기 라우트 지원
2. 동기 vs 비동기 코드 비교
- 동기 코드(requests):
requests.get()
사용- API 요청 순차 처리
- 총 처리 시간: 8초
- 비동기 코드(httpx + asyncio):
httpx.AsyncClient()
및asyncio.gather()
사용- 총 처리 시간: 6초
- 병렬 처리로 성능 향상
3. 비동기의 장점과 제한
- 장점:
- I/O-보장 작업 최적화
- 고 동시성 처리 가능
- 서버 리소스 효율적 사용
- 제한:
- CPU 집약적 작업(예: 이미지 처리)에는 비효율
- Celery 또는 백그라운드 워커 사용 권장
결론
- 비동기(async)는 I/O-보장 작업에 강점,
httpx
와asyncio.gather()
사용으로 성능 극대화 가능 - 동기 코드는 대규모 트래픽 시 확장성 저하
- 비동기 vs 동기 비교 예제를 통해 실무 적용 가능성 검증
- CPU 집약적 작업은 Celery로 분리 처리 권장