Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스레드풀
- uvicorn
- 싱글톤 디자인 패턴
- 2022년
- 분산처리
- 캐시서버
- 로드밸런서
- golang
- 쿠베네티스
- Django
- FastAPI
- K8S
- CPU스케쥴링
- 멀티스레드
- 스케줄링
- SQLAlchemy
- nestjs
- EKS
- 백엔드 개발자
- 가비지컬렉션
- nodejs
- 쿠버네티스
- Alembic
- Python
- alb
- AWS
- gunicorn
- 글또
- 회고
- 메모리구조
Archives
- Today
- Total
서버에서 살아남기
이해가 안가서 정리하는 FastAPI 동작 원리 본문
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 |