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 랑 여러번 대화하면 정리한 내용입니다. 틀린 부분이 있다면 알려주시면 감사하겠습니다!