dogo_ day

Nginx 그리고 Gunicorn 본문

IT/DevOps_

Nginx 그리고 Gunicorn

dogo_ 2023. 6. 16. 09:55

 

https://www.youtube.com/watch?v=D-tmr5hhrBE

개인적인 생각이지만 IT용어에 대한 개념을 배울 땐 역시나 등장배경을 알면 좋은 것 같다.

 

Nginx에 대해서는 이미 글을 올려두었으니 보고 오는 것을 추천한다.

 

Nginx 란?

Nginx 란? 높은 성능과 확장성을 갖춘 오픈 소스 웹 서버 소프트웨어이다. Igor Sysoev에 의해 개발되었으며, 현재는 Nginx Inc.가 관리하고 있다. Nginx는 경량화된 디자인과 이벤트 기반 아키텍처를 가

lucky-dev.tistory.com

 

등장배경

초창기에는 웹서버로 정적파일들만 주고받았다.

이후 클라이언트의 요청이 다양해지고 복잡해지면서 동적 파일에 대한 요청이 발생했다. 그래서 스크립트를 서버에 저장하고 요청에 따라 스크립트를 실행시켜 결과를 반환해주는 아키텍처가 필요했고 웹 어플리케이션 서버라는 개념이 생겼다. 데이터 파일을 저장해두는 대신 소스 스크립트를 서버에 저장해놓고 요청이 올 때마다 스크립트를 실행시켜 결과를 반환해주는 것이다.

 

여기서 잠깐🧐

웹 서버? 웹 어플리케이션 서버?
둘 다 웹 어플리케이션을 실행하고 관리하는 데 사용되는 서버 소프트웨어이다.
약간 다른 역할을 하고 있으니 지금 확실히 알아두자
웹 서버(Web Server)
웹 서버는 클라이언트(일반적으로 웹 브라우저이다)로부터 HTTP 요청을 받아들이고, 해당 요청에 대한 정적인 웹 페이지나 파일을 제공하는 역할을 한다. 웹 서버는 클라이언트와 직접 상호작용하여 웹 페이지를 전달하며, 주로 정적인 콘텐츠(HTML, CSS, 이미지 파일 등)를 제공한다. 일반적으로 Apache, Nginx, Microsoft IIS와 같은 서버 소프트웨어가 웹 서버로 사용된다.

웹 어플리케이션 서버(Web Application Server)
웹 어플리케이션 서버는 동적인 웹 어플리케이션을 실행하고 관리하는 역할을 한다. 데이터베이스 조회, 로직 처리 등의 동적인 작업을 수행한다. 웹 어플리케이션을 실행하기 위한 환경을 제공하고, 웹 서버와 통신하여 위와 같은 클라이언트 요청(ex. 데이터베이스 조회)을 처리한다. 일반적으로 Tomcat, JBoss, WebSphere, Gunicorn과 같은 서버 소프트웨어가 웹 어플리케이션 서버로 사용된다.

 

클라이언트 - 웹 서버 - 웹 어플리케이션 서버로 머릿속으로 그림을 그리면 된다.

클라이언트의 요청에 따라 정적 처리는 웹 서버가 할 것 이다.

동적 처리는 웹 어플리케이션 서버가 할 것이다.

 

여기서 문제가 발생 한다.

파이썬 스크립트가 어떻게 HTTP요청을 받을 것인가?

HTTP 요청은 기본적으로 GET /dogo.html HTML/1.1 과 같은 텍스트이고 파이썬 앱이 받는 request object의 형식과는 다르기 때문이다.

 

클라이언트 HTTP 요청 -> 파이썬 스크립트가 읽을 수 있는 데이터 형식으로 변환 -> 처리 -> 파이썬 데이터를 HTTP 형식으로 변환 -> 응답

 

이런 작업이 필요하여 CGI(Common Gateway Interface)방식이 처음 나왔으며 여러가지 단점을 보완하여 현재는 WSGI를 사용하고 있는 것 이다.

WSGI(Web Server Gateway Interface)
파이썬 웹 어플리케이션과 웹 서버 간의 표준화된 인터페이스이다.
WSGI는 파이선 어플리케이션과 웹 서버 사이에 위치한다. HTTP 요청과 응답을 전달하고 처리하는 역할이다.
왜 사이에 위치하냐면 HTTP요청의 기본형식이 파이썬의 request object와 형식이 다르기 때문이다.
그래서 변환과정이 필요했고 여러 과정들을 거쳐 현재 WSGI가 표준 인터페이스가 되었다.
즉, 웹 서버와 웹 어플리케이션 간의 호환성을 제공하며, 파이썬 웹 어플리케이션을 다양한 환경에서 실행할 수 있도록 한다.
Django, Flask, Pyramid 같은 웹 어플리케이션 프레임워크는 WSGI를 준수하고 있다.
WSGI는 파이썬 웹 어플리케이션의 표준 인터페이스로서 사용되고 있으며, 웹 서버와 웹 어플리케이션 간의 상호 운용성과 이식성을 보장하는데 큰 역할을 하고 있다.

 

자 그래서 Gunicorn이 뭐냐?

한마디로 웹 어플리케이션 서버이다.

정확하게는 파이썬 웹 어플리케이션을 실행하기 위한 WSGI(웹 서버 게이트웨이 인터페이스)서버이다.

 

블로그를 검색하다보니 좋은 그림이 있어서 첨부해본다. 당연히 출처는 남겨야한다.

https://velog.io/@jimin_lee/Nginx와-Gunicorn-둘-중-하나만-써도-될까

 

흐름이 눈에 들어오는가?

 

클라이언트 <-> Nginx <-> Gunicorn(WSGI) <-> Django

 

각자 특출한 기능이 있고 적재적소 우리는 사용하면 된다.

그리고..

Gunicorn을 사용하지않고 Nginx만 사용한다던지

Nginx만 사용하지않고 Gunicorn만 사용한다던지

할 수 있다.

 

그 이유는?

단순히 생각하자

Nginx가 Gunicorn역할 까지 하면 되는 것이다.(물론 Nginx 에서 기능을 추가해줘야하겠지만)

실제로 Flask나 Django같은 프레임워크가 WSGI의 기능을 어느정도 구현해두었다고 한다.

그래서 Nginx만 사용해도 된다.

물론 WSGI의 특출한 어떤 기능들을 모두 사용하지는 못하겠지만..

 

IT 생태계가 조금씩 보이기 시작한다.😎

 

'IT > DevOps_' 카테고리의 다른 글

REST API 란?  (0) 2023.06.16
Nginx 란?  (0) 2023.06.15
Docker 란?  (0) 2023.06.15