서버에서 살아남기

이해가 안가서 정리하는 FastAPI 동작 원리 본문

python

이해가 안가서 정리하는 FastAPI 동작 원리

개발롬 2023. 7. 24. 17:04

FastAPI를 사용함에도 FastAPI의 동작 원리에 대해 깊숙히 이해하지 못하고 있는 부분이 있어서 정리하려고 합니다.

1. FastAPI

  • ASGI 서버와 함께 사용되는 비동기 웹 애플리케이션입니다.

2. ❓ ASGI란?

  • 비동기 웹 서버와 웹 애플리케이션(ex. FastAPI) 간의 통신을 위한 표준 인터페이스
  • ASGI의 서버의 구현체인 uvicorn과 함께 사용됩니다.
* 비동기는?
하나의 작업의 결과를 기다리지 않고 다른 작업을 동시에 진행하는 것
* 비동기 vs 병렬
비동기 : 하나의 스레드에서 여러 작업을 처리
병렬 : 여러 스레드나 프로세스에서 각각의 작업을 독립적으로 동시에 실행하는 것

3. ❓ uvicorn이란?

  • ASGI 서버의 한 종류로서, ASGI 애플리케이션을 구동시켜 웹 서버로 동작하게 됩니다.

4. gunicorn vs uvicorn

1) gunicorn

  • WSGI의 서버로 웹 애플리케이션에 들어오는 요청을 처리하기 위해 워커를 생성하는 역할을 합니다.
  • ASGI 애플리케이션을 실행하게 하기 위해서는 uvicorn과 같은 ASGI 서버와 함께 사용해야합니다.

2) uvicorn

  • ASGI서버로서 비동기 웹 프레임워크(FastAPI)를 실행하기 위한 서버입니다.
  • 단일 프로세스에서 비동기 요청을 처리하며, uvicorn만으로는 멀티 프로세스를 지원하지 않고, 병렬처리를 할 수 없습니다.

Gunicorn과 같은 프로세스 관리자를 사용하여 각각 자체 프로세스에서 실행되는 여러 Uvicorn 작업자를 생성할 수 있습니다. 이를 통해 다중 프로세스 환경을 만들고 여러 요청을 병렬로 처리할 수 있습니다.

질의

1) gunicorn을 안쓰고 uvicorn만 쓰면 안되는지

  • 기본적으로 uvicorn만으로도로 FastAPI를 실행하는데는 문제없습니다. 다만, 더 복잡한 성능 개선을 위해서는 gunicorn을 사용하는게 좋습니다.

2) gunicorn을 왜 쓰는지?

  • 성능향상 : Gunicorn이 uvicorn을 여러 워커로 확장하여 성능을 개선할 수 있습니다. gunicorn의 워커 기능을 이용하여 요청을 병렬로 처리하는 것이 가능해져 많은 동시 접속자를 처리할 수 있습니다.
  • 프로세스 관리 : 워커의 동작 상태를 모니터링 하는 기능이 있습니다.
  • 다양한 설정 옵션 : gunicorn은 워커의 개수, 타임아웃, 요청 대기 큐 등을 설정 할 수 있어 웹 애플리케이션의 동작을 유연하게 제어합니다.

결론

  • uvicorn은 ASGI 서버로 동작하며 기본적으로 단일 프로세스에서 실행됩니다. 하지만 제대로 된 병렬 처리를 하기 위해서는 여러 개의 프로세스에서 실행해야합니다. 이를 가능하게 하기 위해 guicorn 과 같은 프로세스 관리자를 사용하여 여러개의 uvicorn 워커를 생성할 수 있습니다. 그럼 각각의 워커는 독립적인 프로세스에서 실행되기 때문에 병럴처리가 가능해집니다.

gunicorn과 uvicorn의 구분이 명확히 이해가 가지 않아서 ChatGPT 랑 여러번 대화하면 정리한 내용입니다. 틀린 부분이 있다면 알려주시면 감사하겠습니다!

'python' 카테고리의 다른 글

디자인 패턴 - 프록시 디자인 패턴  (0) 2023.08.09
디자인 패턴 - 싱글톤 디자인 패턴  (0) 2023.08.01
Garbage Collection 이란?  (0) 2023.07.22
SQLAlchemy + alembic 마이그레이션  (0) 2023.07.22
python 파일  (2) 2023.03.11