파이썬 서버 선택 - NginX, Gunicorn ,Flask

목록으로

* 웹서비스를 위한 설치및 설정(ubuntu 서버)

웹서버 : 엔진엑스( nginx )

WSGI서버: 구니콘 ( gunicorn )

WSGI어플리케이션: ( Flask - Jinja2 )

 

* 이론

정적요청과 동적 요청

- 정적 요청

요청한 파일 아무 처리 없이 그대로 보내 주는 것( 정적 :상태가 변하지 않는)

일반적으로 /static 폴더에 있는 파일 .css , .js , .jpg ...

 

- 동적 요청

URL 을 요청했을때 서버에서 처리후 처리한 결과를 보여 주는 것

( html ,php, asp,jsp ...)

예 : 날씨를 조회하는 .php 파일을 요청하면 서버에서 날씨관련 처리 후

처리 결과를 보내줌

 

* 웹서버 동작 방식

. 정적 요청 : 웹서버(nginx)에서 정적 파일을 찿아 그대로 보내 줌

  (일반적으로 static 폴더에 있는 파일)

. 동적요청 처리

동적요청을 처리 하려면 웹서버는 파일을 그대로 보내주는 역할만 하므로

서버단에서 요청을 처리할 서버가 필요(WSGI서버) 즉, 동적 요청이 들어오면

웹서버(NginX)는 파이썬 프로그램을 어떻게 호출해야 할지 모르므로 파이썬

프로그램을 호출하는 WSGI(Web Server Gateway Interface)서버 를 호출

하고 WSGI(Gunicorn)서버 는 WSGI어플리케이션(Flask)을 이용해 동적요청

을 처리

 

* 동적요청 처리 과정

NginX : 사용자와 통신, 필요시 WSGI (Gunicorn) 호출

Gunicorn : WSGI 어플리케이션(Flask, DJango, tonator)호출해

   파이썬 프로그램 실행

Flask : 파이썬코드 실행, Jinja2 를 이용해 html내의 데이타 처리

 

  사용자 페이지 요청 -> 웹서버(NginX) -> WSGI서버(Gunicorn) ->

   -> WSGI어플리케이션(템플릿엔진,Flask) -> 처리된 페이지 돌려줌

 



* 구니콘만으로 서버구동이 가능한데 엔진엑스와 구니콘을 함께사용하는 이유

- 엔진엑스(Nginx는)는  정적 파일 처리 및 요청 로드 밸런싱에 최적화 되어 있음

- 구니콘(gunicorn)은 동적요청처리에 최적화 되어 있음

 동시에 사용하면 정적파일엔진엑스구니콘을 거치지 않고 그대로 전송

 동적요청처리가 필요한 경우만 구니콘호출 - 서버 부하가 줄어듬

 

* Python 서버

- 웹서버 : 엔진엑스(Ngin) 가 가장 성능이 좋다고함.

- WSGI서버 : Gunicorn 엔진엑스와 가장 가장 궁합이 잘맟음

- WSGI어플리케이션 : DJango, Flask 등을 많이 쓰는데 둘다 써봤지만

다루기 쉽고 가장 간단하게 원하는 결과를 얻기에는 Flask가 좋음.

- 템플릿엔진 : Flask - Jinja2 엔진을 사용해서 HTML과 데이터를 동적으로 결합

 

* Flask

불필요한 기능없어 배우는데 시간이 적게 걸리고 원하는 방식 구조 설계가능

Jinja2템플릿엔진을  사용해 HTML과 내에서 데이터 처리

 

* 데이타베이스 : Sqlte

작고 성능 좋은 파일기반 데이타베이스

적절한 index 사용과 최적화로 대형 db급 성능 구현가능

파일기반이므로 백업이 간단 함.

500만건의 이상의 데이타 처리 테스트에서 sql 문 최적화로 무리없이 작동

 

* 결정

 웹서버 : 엔진엑스( NginX )

 WSGI서버 : 구니콘 ( Gurnicorn )

 웹어프리케이션 : 플라스크 ( Flask )



수정일
25-01-27 14:39
관리자
25-01-27 10:40
댓글 추가 ..
0 개의 답변이 있습니다.
Server 이론


4 sqlite 입력,수정,삭제함수를 만들기 관리자 38 2025-01-27
3 파이썬 서버 선택 - NginX, Gunicorn ,Flask 관리자 52 2025-01-27
2 Python 에서 sqlite 사용하기 관리자 53 2025-01-27