[230922] 졸업프로젝트

⭐️·2023년 9월 22일
0

졸업프로젝트

목록 보기
3/4

Gunicorn 비동기 작업 적용

응답 속도 느림

클라이언트에서 비동기적으로 동화책 커버 일러스트와 여러 페이지의 일러스트들을 동시에 호출하지만 응답 속도가 3분 이상으로 너무 느린 문제 상황이 있었다.
FastAPI에서 비동기적으로 응답하도록 설정했지만, 하나의 작업자에서만 실행되어 동기적으로 작업하는 것이 문제였다.

기존에는 ASGI 서버인 uvicorn을 사용하여 네트워크 I/O 처리를 최적화하였다.

uvicorn main:app --reload

main은 Python 파일을 의미하고, app은 FastAPI 인스턴스를 나타낸다.
--reload는 개발 중 코드 변경을 감지하고 서버를 자동으로 재시작하는 기능이다.

하지만, uvicorn은 하나의 작업자에서만 실행되는 한계가 있다. 그래서 병렬처리를 위해서 WSGI 서버인 gunicorn을 적용하였다.
gunicorn과 uvicorn을 함께 사용하면, FastAPI 애플리케이션을 여러 작업자로 분산하여 처리하고, 동시에 다수의 HTTP 요청을 빠르게 처리할 수 있다.

gunicorn main:app -w 8 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000

-w는 사용할 워커의 개수이다. 8개는 서버의 cpu의 코어 수를 확인하여 설정하였다.
-k는 사용할 워커의 종류이다. 여기서는 uvicorn 워커를 사용하겠다는 의미이다.
--bind 0.0.0.0:8000에서 0.0.0.0은 IP인데 외부에서 접근 가능하도록 배포한다는 의미이고, 8000은 port이다.

타임아웃 오류가 나서 default 30초에서 10분으로 타임아웃 시간을 늘려주었다.
[2023-09-18 00:54:47 +0900] [97794] [CRITICAL] WORKER TIMEOUT (pid:97798)

gunicorn main:app -w 8 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000 --timeout 600

개선된 속도
gunicorn 적용 후, 3분 이상에서 30초 정도로 응답 속도가 개선되었다.

0개의 댓글