FastAPI와 Celery에 대한 기본 개념을 설명하고 간단한 예제를 통해 이해를 해보고자 정리합니다.
FastAPI와 Celery 소개
- FastAPI 소개
- FastAPI는 파이썬으로 작성된 빠르고 현대적인 웹 프레임워크로, API를 빠르게 개발할 수 있도록 도와줍니다.
- Pydantic이라는 데이터 유효성 검사 및 직렬화를 위한 강력한 도구를 사용하여 타입 힌팅을 기반으로 하는 형식 체크를 지원합니다.
- 비동기 프로그래밍을 지원하여 성능 향상이 가능합니다.
- Celery 소개
- Celery는 분산 작업 큐 시스템으로, 비동기 작업을 처리하는 데 사용됩니다.
- 백그라운드에서 작업을 비동기적으로 실행하고, 작업을 분산하여 여러 워커(worker)에서 병렬로 처리할 수 있습니다.
FastAPI와 Celery를 함께 사용하는 이유
- FastAPI는 빠르게 API를 개발할 수 있지만, 몇 가지 작업은 시간이 오래 걸릴 수 있습니다. 이런 경우 Celery를 사용하여 비동기적으로 처리함으로써 API의 응답 시간을 향상시킬 수 있습니다.
간단한 FastAPI 및 Celery 예제
- FastAPI 작성
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"}
- Celery 작성
from celery import Celery celery = Celery( "tasks", broker="pyamqp://guest:guest@localhost//", backend="rpc://", ) @celery.task def add(x, y): return x + y
- FastAPI에서 Celery 사용
from fastapi import FastAPI, Depends from tasks import add app = FastAPI() @app.get("/") async def read_root(): result = add.delay(4, 4) return {"task_id": result.id}
이 예제에서는 FastAPI로 간단한 API를 생성하고, Celery를 사용하여 비동기 작업을 정의하고 호출합니다. FastAPI에서 Celery 작업을 호출한 후 해당 작업의 ID를 반환하는 예제입니다. 이를 통해 API의 응답 시간이 향상되는 것을 확인할 수 있습니다.
FastAPI와 Uvicorn을 사용하여 Python에서 REST API를 구축하는 과정은 다음과 같은 단계로 이루어집니다.
1단계: 설치
먼저 FastAPI와 Uvicorn을 설치해야 합니다. Uvicorn은 FastAPI 애플리케이션을 실행하는데 사용되는 ASGI 서버입니다.
poetry add fastapi
poetry add 'uvicorn[standard]'
2단계: FastAPI 애플리케이션 생성
main.py
파일을 생성하고 기본 FastAPI 애플리케이션을 정의합니다.
# main.py
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def index():
return {'message': 'Hello World'}
3단계: Uvicorn을 이용한 서버 실행
개발 모드에서 FastAPI 애플리케이션을 실행하려면 Uvicorn을 사용합니다. --reload
옵션을 추가하면 코드 변경시 자동으로 서버가 재시작됩니다.
uvicorn main:app --reload
위 명령은 main.py
파일의 app
객체를 사용하여 서버를 시작합니다.
4단계: API 테스트
브라우저나 curl
명령어를 사용하여 생성된 API를 테스트할 수 있습니다.
브라우저에서:
http://localhost:8000
또는 curl
을 사용하여:
curl http://localhost:8000
5단계: 문서화
FastAPI는 Swagger UI(/docs
)와 ReDoc(/redoc
)을 통해 자동 문서화를 제공합니다. 이를 통해 API를 쉽게 테스트하고 문서를 확인할 수 있습니다.
- Swagger UI:
http://localhost:8000/docs
- ReDoc:
http://localhost:8000/redoc
이 단계들을 통해 FastAPI와 Uvicorn을 설치하고, 간단한 FastAPI 애플리케이션을 생성 및 실행하며, API를 테스트하고 문서화하는 방법을 배울 수 있습니다. FastAPI는 개발자가 빠르고 쉽게 REST API를 구축할 수 있도록 도와줍니다.
Celery는 Python에서 널리 사용되는 분산 작업 대기열 시스템으로, 비동기적인 작업 처리를 가능하게 해줍니다. 이를 통해 긴 처리 시간이 필요한 작업을 백그라운드에서 실행할 수 있으며, 이는 웹 애플리케이션의 성능과 사용자 경험을 크게 향상시킬 수 있습니다.
Celery의 기본 구성 요소
- Task: 실행할 작업. 함수 형태로 정의됩니다.
- Worker: Task를 실행하는 프로세스. 여러 대의 서버에서 동시에 실행될 수 있습니다.
- Broker: Task 메시지를 보관하는 중앙 메시지 서버. Celery는 RabbitMQ, Redis 등 다양한 메시지 브로커를 지원합니다.
- Backend: Task의 결과를 저장하는 곳. 결과 저장 및 조회를 위해 사용됩니다.
Celery 사용을 위한 환경 구성
- Celery 설치:
pip install celery
- 메시지 브로커 설치: RabbitMQ 또는 Redis 중 하나를 선택하여 설치합니다.
- RabbitMQ 설치 예:
sudo apt-get install rabbitmq-server
- Redis 설치 예:
sudo apt-get install redis-server
- RabbitMQ 설치 예:
- 결과 백엔드 선택: 결과를 저장할 백엔드로, 보통 메시지 브로커와 같은 시스템을 사용합니다.
Celery 사용 예시
- Celery 인스턴스 생성
from celery import Celery app = Celery('myapp', broker='pyamqp://guest@localhost//')
- Task 정의
@app.task def add(x, y): return x + y
- Worker 실행
- 커맨드 라인에서 Celery 워커를 시작합니다.
- 예:
celery -A myapp worker --loglevel=info
- Task 호출
- Python 코드 내에서 Task를 호출하여 비동기적으로 실행합니다.
- 예:
result = add.delay(4, 4)
- 결과 확인
- Task가 완료되면, 결과를 확인할 수 있습니다.
- 예:
print(result.get())
주의사항
- Celery는 분산 환경에서 강력한 성능을 발휘하지만, 설정과 관리가 복잡할 수 있습니다.
- 메시지 브로커와 결과 백엔드의 선택 및 설정에 주의를 기울여야 합니다.
- 실제 운영 환경에서는 보안, 에러 핸들링, 모니터링 등 추가적인 고려사항이 있습니다.
Celery는 이러한 기본 개념과 설정을 통해 Python에서 강력한 비동기 처리 능력을 제공하며, 다양한 배경의 시스템에서 확장성 있는 솔루션을 구현할 수 있도록 도와줍니다.
댓글