본문 바로가기
프로그램 (PHP,Python)

FastAPI와 Celery에 대한 개념과 예제를 통한 이해

by 날으는물고기 2024. 1. 16.

FastAPI와 Celery에 대한 개념과 예제를 통한 이해

FastAPI와 Celery에 대한 기본 개념을 설명하고 간단한 예제를 통해 이해를 해보고자 정리합니다.

FastAPI와 Celery 소개

  1. FastAPI 소개
    • FastAPI는 파이썬으로 작성된 빠르고 현대적인 웹 프레임워크로, API를 빠르게 개발할 수 있도록 도와줍니다.
    • Pydantic이라는 데이터 유효성 검사 및 직렬화를 위한 강력한 도구를 사용하여 타입 힌팅을 기반으로 하는 형식 체크를 지원합니다.
    • 비동기 프로그래밍을 지원하여 성능 향상이 가능합니다.
  2. Celery 소개
    • Celery는 분산 작업 큐 시스템으로, 비동기 작업을 처리하는 데 사용됩니다.
    • 백그라운드에서 작업을 비동기적으로 실행하고, 작업을 분산하여 여러 워커(worker)에서 병렬로 처리할 수 있습니다.

FastAPI와 Celery를 함께 사용하는 이유

  • FastAPI는 빠르게 API를 개발할 수 있지만, 몇 가지 작업은 시간이 오래 걸릴 수 있습니다. 이런 경우 Celery를 사용하여 비동기적으로 처리함으로써 API의 응답 시간을 향상시킬 수 있습니다.

간단한 FastAPI 및 Celery 예제

  1. FastAPI 작성
    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    def read_root():
        return {"Hello": "World"}
  2. Celery 작성
    from celery import Celery
    
    celery = Celery(
        "tasks",
        broker="pyamqp://guest:guest@localhost//",
        backend="rpc://",
    )
    
    @celery.task
    def add(x, y):
        return x + y
  3. 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의 기본 구성 요소

  1. Task: 실행할 작업. 함수 형태로 정의됩니다.
  2. Worker: Task를 실행하는 프로세스. 여러 대의 서버에서 동시에 실행될 수 있습니다.
  3. Broker: Task 메시지를 보관하는 중앙 메시지 서버. Celery는 RabbitMQ, Redis 등 다양한 메시지 브로커를 지원합니다.
  4. Backend: Task의 결과를 저장하는 곳. 결과 저장 및 조회를 위해 사용됩니다.

Celery 사용을 위한 환경 구성

  1. Celery 설치: pip install celery
  2. 메시지 브로커 설치: RabbitMQ 또는 Redis 중 하나를 선택하여 설치합니다.
    • RabbitMQ 설치 예: sudo apt-get install rabbitmq-server
    • Redis 설치 예: sudo apt-get install redis-server
  3. 결과 백엔드 선택: 결과를 저장할 백엔드로, 보통 메시지 브로커와 같은 시스템을 사용합니다.

Celery 사용 예시

  1. Celery 인스턴스 생성
    from celery import Celery
    
    app = Celery('myapp', broker='pyamqp://guest@localhost//')
  2. Task 정의
    @app.task
    def add(x, y):
        return x + y
  3. Worker 실행
    • 커맨드 라인에서 Celery 워커를 시작합니다.
    • 예: celery -A myapp worker --loglevel=info
  4. Task 호출
    • Python 코드 내에서 Task를 호출하여 비동기적으로 실행합니다.
    • 예: result = add.delay(4, 4)
  5. 결과 확인
    • Task가 완료되면, 결과를 확인할 수 있습니다.
    • 예: print(result.get())

주의사항

  • Celery는 분산 환경에서 강력한 성능을 발휘하지만, 설정과 관리가 복잡할 수 있습니다.
  • 메시지 브로커와 결과 백엔드의 선택 및 설정에 주의를 기울여야 합니다.
  • 실제 운영 환경에서는 보안, 에러 핸들링, 모니터링 등 추가적인 고려사항이 있습니다.

 

Celery는 이러한 기본 개념과 설정을 통해 Python에서 강력한 비동기 처리 능력을 제공하며, 다양한 배경의 시스템에서 확장성 있는 솔루션을 구현할 수 있도록 도와줍니다.

728x90

댓글