인공지능 개발자 수다(유튜브 바로가기) 자세히보기

Fastapi

[FastAPI] Uvicorn 과 Gunicorn 사용하기

Suda_777 2024. 11. 14. 02:02

목차

    반응형

    1. 설명

    1.1. Gunicorn

    • WSGI(Web Server Gateway Interface) 서버
    •  HTTP 요청(클라이언트의 요청)을 애플리케이션(FastAPI)에 전달하고, 애플리케이션의 응답을 클라이언트로 다시 전송하는 역할을 합니다.
    • 동기 프레임워크를 실행할 때 주로 사용. 비동기 I/O를 지원하지 않기 때문에, FastAPI와 같은 ASGI 프레임워크를 직접 실행할 수는 없다
    • FastAPI와 같이 비동기 지원이 필요한 경우 Uvicorn을 Gunicorn의 워커로 사용하는 방식으로 함께 사용하여, 다중 프로세스의 이점을 살리면서 비동기 처리 성능을 향상시킵니다.

    1.2. Uvicorn

    • ASGI(Asynchronous Server Gateway Interface) 서버
    • 비동기 프레임워크에 최적화
    • FastAPI, Starlette 같은 ASGI 기반 애플리케이션을 직접 실행할 때 사용
    • 대규모 프로덕션 환경에서는 다중 프로세스를 지원하는 Gunicorn과 함께 사용

    결론, Uvicorn을 Gunicorn의 워커로 사용하는 방식으로 함께 사용

     


    2. 사용 방법

    2.1. 기본 사용법

    gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
    • - w <int>: 워커 프로세스 수를 설정
      • 워커 수는 CPU 코어 수에 따라 설정합니다. 일반적으로 (CPU 코어 수 * 2) + 1로 설정
    • -k <worker class>: 워커 클래스를 지정합니다. 
      • uvicorn.workers.UvicornWorker를 사용하여 ASGI 지원을 활성화

    2.2. 파라미터

    gunicorn -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:443 --timeout 60 --daemon --access-logfile access.log --error-logfile error.log main:app
    • --bind <address>: 서버 바인딩 주소를 지정합니다. 예: --bind 0.0.0.0:8000
      • 예를 들어, 0.0.0.0는 FastAPI 서버가 모든 네트워크 인터페이스에서 들어오는 요청을 수신
      • 127.0.0.1은 로컬호스트로, 해당 서버 내부에서만 접근이 가능
    • --timeout <int>: 요청 타임아웃을 설정합니다(기본값은 30초)
      • 서버가 클라이언트의 요청을 처리하는 데 허용된 최대 시간
    • --daemon
      • 백그라운드에서 실행하도록 설정합니다.
    • --access-logfile <path> 및 --error-logfile <path>: 로그 파일 경로를 설정하여 접근 로그와 에러 로그를 파일로 기록할 수 있습니다.
    • --worker-connections <int>: 각 워커가 동시에 처리할 수 있는 최대 연결 수를 설정합니다. (비동기 작업에서 유용)
      • 비동기 서버의 병렬 처리 성능을 제어
      • 100으로 설정하면, 각 워커가 동시에 최대 100개의 클라이언트 요청을 유지

     

    마치며, FastAPI 내부 코드에서 따로 설정해 줄 일이 없기 때문에 

    실행 할 때에만 코드를 만들어 준다는 점에 있어서

    사용하기는 참 편하다! 라고 생각이 든다.

     

    반응형