본문 바로가기
Python/API

gunicorn은 무엇인가? (feat. WSGI)

by JONGSKY 2024. 4. 3.
728x90
SMALL

1. 글을 쓰게 된 계기

 

이전에 작고 큰 API들을 많이 개발했었다.

이전에는 flask나 django를 많이 사용했다면

최근에는 오히려 더 빠르게 개발할 수 있는 fastapi를 자주 사용하곤 한다.

 

그럴 때마다 gunicorn과 uvicorn을 이용해서

배포를 하곤하는데 이를 이론적으로 정리하고자 해서 글을 작성하게 되었다.

 

2. WSGI란 무엇인가?

 

gunicorn을 알기 전 WSGI에 대해서 먼저 알아보도록 하자.

WSGI, 즉 Web server Gateway Interface는 파이썬 웹 애플리케이션과 웹 서버 사이의 표준 인터페이스로

웹 애플리케이션 개발과 배포를 단순화하는데 중요한 역할을 한다.

 

https://medium.com/@serdarilarslan/what-is-gunicorn-5e674fff131b

 

WSGI는 파이썬 웹 개발의 핵심 구성 요소이며, 다양한 웹 서버와 애플리케이션 간의 통합을 용이하게 한다.

예를 들자면 개발자가 fastapi 또는 Django와 같은 프레임워크를 사용하여 애플리케이션을 개발한 경우,

WSGI를 지원하는 어떤 웹 서버와도 해당 애플리케이션을 호스팅할 수 있게 해주는 역할을 하는 것이다.

 

쉽게 말하면 웹 서버에서의 요청을 해석해 파이썬 애플리케이션 쪽으로 던지는 역할을 하는 것이다.

 

3. Gunicorn은 무엇인가? 왜 쓰는것인가?

 

Gunicorn이 바로 앞서 설명한 python WSGI이다.

Web Server(Nginx)로 부터 요청을 받으면 웹 애플리케이션(Django)로 전달해주는 역할을 수행한다.

 

(참고 : Django의 runserver 역시 똑같은 역할을 수행하지만 보안적으로나 성능적으로 검증이 되지 않았기 때문에 production 환경에서는 사용할 수 없다.) - 개발용으로는 유용하다.

https://docs.djangoproject.com/en/4.1/ref/django-admin/#runserver

 

 

하지만 WSGI는 멀티 쓰레드를 만들 수 있기 때문에 Request가 많아지더라도 효율적으로 처리할 수 있다.

즉, production(제품) 환경에 적합하다.

 

4. 결론

 

웹서버와 애플리케이션 사이에서 Request를 처리해주는 역할을 하는 것이 Gunicorn이다.

파이썬에서는 대표적인 WSGI는 uWSGI, gunicorn이 존재하지만,

gunicorn의 퍼포먼스가 조금 더 좋고 가볍다는 의견이 다수이기 때문에 많은 이들이 gunicorn을 사용한다.

 

물론 나도 gunicorn을 사용한다.

728x90
LIST