구니콘(Gunicorn)이란?

uuuu.jini·2022년 7월 29일
1

구니콘? 구니콘이 뭐지 ? 난 생 처음 들어봐서 공부해본다

구니콘

구니콘이란 파이썬의 Web Server Gateway interface (WSGI)를 구현하는 HTTP server이다. 구니콘은 GreenUnicorn의 약자이며 jee-unicorn 또는 gun-i-corn이라 발음하기도 한다. 구니콘 서버는 다수의 web 프레임워크와 널리 호환되며 구현이 심플하고, 서버 리소스가 적으며, 빠른 속도로 동작한다.

웹 서버에서 파이썬 장고 애플리케이션을 호출하기 위 필요한 WSGI 서버이다.

WSGI

Web Server Gateway Interface는 웹 서버 소프트웨어와 파이썬으로 작성된 웹 응용 프로그램 간의 표준 인터페이스이다. 표준 인터페이스는 여러 웹 서버에서 WSGI를 지원하는 응용 프로그램을 쉽게 사용할 수 있도록 한다.

파이썬에서 어플리케이션, 즉 파이썬 스크립트(웹 어플리케이션)가 웹 서버와 통신하기 위한 인터페이스이다. WSGI는 서버와 앱 양단으로 나뉘어져 있다. WSGI 리퀘스트를 처리하려면 서버에서 환경정보와 콜백함수를 앱에 제공해야 한다. 앱은 그 요청을 처리하고 콜백함수를 통해 서버에 응답한다.
요청 -> 웹서버 -> WSGI Server -> WSGI를 지원하는 웹 어플리케이션

예. Gunicorn, uWSGI

uWSGI : WSGI 규칙을 따라서 만들어진 소프트웨어이며 정적인 웹서버와 python으로 작성된 Web Framework(Flask/Django) 사이의 통신을 도와주는 역할을 한다.

ASGI

WSGI의 경우에는 비동기적인 요청 처리에 단점이 있다. 하나의 동기적인 callable이 요청을 받아 응답을 리턴하는 방식이었는데, 이런 방식은 길게 유지되어야 하는 연결에는 적합하지 않다.

ASGI는 이를 개선하기 위해 만들어졌으며, 파이썬 웹 서버, 프레임워크, 어플리케이션 사이에 비동기적인 표준 인터페이스를 제공한다.

즉, WSGI가 파이썬 앱에 대한 동기성에 대한 표준을 제공했다면 ASGI는 동기성과 비동기성 모두에 대한 표준을 제공한다.

예. Uvicorn

CGI [Common Gateway Interface]

웹 서버에서 어플리케이션을 작동시키기 위한 인터페이스이다. 정적인 웹서버를 동적으로 기능하게 하기 위해서 등장하였다. 서버 프로그램과 외부 프로그램 간의 인터페이스가 바로 CGI이다.

요청 -> 웹서버(아파치,ngnix 등) -> (웹서버가 직접실행)프로그램

웹서버와 프로그램 사이의 정보를 주고받는 규칙을 의미한다.

웹 어플리케이션이 서버에서 실행되어 어떤 동작을 처리하고 그에 맞는 html을 리턴할 때 이를 위해 서버로 들어온 요청을 웹 어플리케이션으로 넘겨줄 수 있어야 한다. 이때 만약 서버마다 애플리케이션 언어가 다르다면 번거로운 일이 일어나므로 공통의 표준 인터페이스를 제공해준다. 이 인터페이스가 CGI이다.

WAS(Web Application Server)

웹서버가 동적으로 기능하면 WAS이다. 즉, Web Server + CGI 가 WAS이다. 간단하게 웹서버 위에 서버 어플리케이션을 얹은 것이 WAS이다.

요청 -> 웹서버 -> WAS -> (웹어플리케이션 서버가 실행)프로그램

어플리케이션 서버가 프로그램의 실행결과를 웹 서버에 전달해주며 웹 서버는 전달 받은 결과를 웹 브라우저에 전송한다.

WAS vs. Wev Server

  • Static Pages : Web Server 는 파일 경로 이름을 받아 경로와 일치하는 file contents를 반환한다. 항상 동일한 페이지를 반환하며 image,html,css,js 파일과 같이 컴퓨터에 저장되어 있는 파일을 의미한다.
  • Dynamic Pages : 인자의 내용에 맞게 동적인 contents를 반환한다. 즉, 웹 서버에 의해서 실행되는 프로그램을 통해서 만들어진 결과물을 말한다.
  • Web Server : 하드웨어(Web Server가 설치된 컴퓨터), 소프트웨어(웹 브라우저 클라이언트로부터 HTTP 요청을 받아 **정적인 컨텐츠(.html,.jpeg,.css등)**를 제공하는 프로그램), 정적인 컨텐츠를 제공하거나, 동적인 컨텐츠 제공을 위한 요청을 WAS에 전달하여 WAS가 처리한 결과를 클라이언트에게 전달한다. (예.Apache Server, Nginx, IIS 등)
  • Web Application Server : `DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 어플리케이션 서버이다. HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어 이다. 프로그램 실행 환경과 DB 접속 기능을 제공하여 여러개의 트랜잭션을 관리하고 비즈니스 로직을 수행한다. (예, Tomcat, JBoss, Jeus, Wev Sphere 등)

Web Server와 WAS 분리 이유?
: WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있다. 간단한 정적 파일(이미지)을 Application Server까지 가지 않고 앞단에서 빠르게 보내줄수 있다.
: 기능을 분리하여 서버의 부하를 방지하고 물리적으로 분리하여 보안 강화하는 등의 이유

profile
멋쟁이 토마토

0개의 댓글