1. 글을 쓰게 된 계기
이전에 작고 큰 API들을 많이 개발했었다.
이전에는 flask나 django를 많이 사용했다면
최근에는 오히려 더 빠르게 개발할 수 있는 fastapi를 자주 사용하곤 한다.
그럴 때마다 gunicorn과 uvicorn을 이용해서
배포를 하곤하는데 이를 이론적으로 정리하고자 해서 글을 작성하게 되었다.
2. WSGI란 무엇인가?
gunicorn을 알기 전 WSGI에 대해서 먼저 알아보도록 하자.
WSGI, 즉 Web server Gateway Interface는 파이썬 웹 애플리케이션과 웹 서버 사이의 표준 인터페이스로
웹 애플리케이션 개발과 배포를 단순화하는데 중요한 역할을 한다.
WSGI는 파이썬 웹 개발의 핵심 구성 요소이며, 다양한 웹 서버와 애플리케이션 간의 통합을 용이하게 한다.
예를 들자면 개발자가 fastapi 또는 Django와 같은 프레임워크를 사용하여 애플리케이션을 개발한 경우,
WSGI를 지원하는 어떤 웹 서버와도 해당 애플리케이션을 호스팅할 수 있게 해주는 역할을 하는 것이다.
쉽게 말하면 웹 서버에서의 요청을 해석해 파이썬 애플리케이션 쪽으로 던지는 역할을 하는 것이다.
3. Gunicorn은 무엇인가? 왜 쓰는것인가?
Gunicorn이 바로 앞서 설명한 python WSGI이다.
Web Server(Nginx)로 부터 요청을 받으면 웹 애플리케이션(Django)로 전달해주는 역할을 수행한다.
(참고 : Django의 runserver 역시 똑같은 역할을 수행하지만 보안적으로나 성능적으로 검증이 되지 않았기 때문에 production 환경에서는 사용할 수 없다.) - 개발용으로는 유용하다.
하지만 WSGI는 멀티 쓰레드를 만들 수 있기 때문에 Request가 많아지더라도 효율적으로 처리할 수 있다.
즉, production(제품) 환경에 적합하다.
4. 결론
웹서버와 애플리케이션 사이에서 Request를 처리해주는 역할을 하는 것이 Gunicorn이다.
파이썬에서는 대표적인 WSGI는 uWSGI, gunicorn이 존재하지만,
gunicorn의 퍼포먼스가 조금 더 좋고 가볍다는 의견이 다수이기 때문에 많은 이들이 gunicorn을 사용한다.
물론 나도 gunicorn을 사용한다.
'Python > API' 카테고리의 다른 글
Celery 란 무엇인가? (0) | 2024.04.04 |
---|---|
uvicorn 이란 무엇인가? (feat. ASGI) (0) | 2024.04.03 |
동일 API 호출에 대한 처리 방법(feat. asyncio) (0) | 2023.09.05 |
기존 database를 가져와서 ORM 만들기 (0) | 2022.12.11 |
[FastAPI] FastAPI와 DB(MySQL) 연결하기 (0) | 2022.11.30 |