기본적으로 백엔드를 개발할 때 덜렁 flask나 django만 써도 돌아간다
하지만 생각보다 복잡하게 구성을 하는 것이 일반적이다.
예를 들어
nginx -> gunicorn or uWSGI -> flask or Django
이런 식으로 말이다 왜그럴까?
Nginx는 바깥 세상과 맞닿아있어
image, CSS와 같은 파일 시스템을 직접 다루며 static request를 다루는 것을 목표로 한다.
하지만 nginx는 장고 앱과는 직접 소통할 수 없고,
앱을 구동해주고, 요청을 넣어주고, 결과를 리턴받는 무언가가 필요하다.
이것이 바로 gunicorn 으로
이것은 unix소켓을 만들고 wsgi 프로토콜에 기반한 응답을 nginx에 전달한다
The outside world <-> Nginx <-> The socket <-> Gunicorn
nginx(엔진엑스) - 웹서버
일단 순서대로 nginx의 역할은
"더 작은 자원으로 빠르게 하는 서비스이다 "
좀더 자세히 말하자면
로드 밸런싱, 기본인증, 간단한 처리(static request)를 위한 서버라고 생각하면 될듯하다.
더 자세히는
트래픽이 많은 웹사이트를 위해 확장성을 위해 설계한 비동기 이벤트 기반구조의 웹서버 소프트웨어이다.
대표적인 대체제는 Apache가 있으나
요즘(20년 하반기 기준)에는 34% 정도로 nginx가 대세인듯하다
게다가 이 점유율은 점점 높아지고 있다.
nginx로는 python app 구동시킬수도, WSGI 요청으로 변환할 수도 없기에 WSGI서버가 필요로하다.
uWSGI or Gunicorn - WSGI 서버
간단히 설명하자면
파이썬으로 요청을 처리해야하지만, 파이썬은 이를 처리하기 위해 그리 뛰어나지 않기때문에 일종의 서버, 앱 사이 다리라고 생각하면 된다.
즉, 이 역시 성능을 높이기 위한 것이라 생각하면 된다.
복잡하게는 WSGI 는
Web서버와 Python 어플리케이션 사이의 통신 규약이다
운영환경에서 사용하면 성능상 문제를 겪게 됩니다.
운영모드에서 Gunicorn 같은 WSGI(Web Server Gateway Interface) 미들웨어와 연동이 필요합니다.
성능 비교는 다음과 같다
www.appdynamics.com/blog/engineering/a-performance-analysis-of-python-wsgi-servers-part-2/
Bjoern: 압도적인 처리량을 자랑함, 적은 메모리 사용량,적은 에러
CherryPy: 괜찮은 처리량, 매우 빠른 latency, 0에러
Gunicorn: 적은 에러,
Meinheld: 적은 메모리 사용량, 넘치는 에러
mod_wsgi:
uWSGI: 느린 처리량, 끔찍한 latency, 메모리를 메우 잡아먹음,
결론은
Bjoern(가볍고 빠름-github.com/jonashaag/bjoern), Cherrypy(가볍고 빠르고 순수 파이썬- github.com/cherrypy/cherrypy), Gunicorn(적당한 로드에서는 괜찮음) 정도가 쓸만한거 같다
요즘 제일 많이 쓰는건 Gunicorn이다.
gunicorn는
외부 공격등에 취약하고, https 처리가 불가능하며, 엔진엑스가 할 수 있는 일들을 할 수 있으나 성능이 부족하여 앞단에 nginx를 붙인다.
git star 기준 순위는
1. Gunicorn
2. bjoern
3. meinheld
4.waitress
django, flask, tornado.... - 파이썬 웹 프레임워크
여기에도 여러가지가 있지만 대표적인건 딱 2가지다
django: 컨텐츠 기반 웹사이트를 위한 프레임워크로 무겁지만, 다소 복잡한 처리를 위해 좋다
flask: 작은 앱, api, 웹서비스 용으로 적합한 가벼움 프레임워크이다. 기본적인것만 제공하며 URL 루팅, 요청과 응답, 템플렛 응답들을 처리하기에 적합.
요약하면 무거운(컨텐츠 기반) 웹사이트 짤거면 장고, 아니면 플라스크이다.
git star기준 순위로는
1위 장고,
2위 플라스크
3위 fastAPI(github.com/tiangolo/fastapi)
4위 토네이도
5위 사닉
fastapi는 2018년 말에 처음 만들어진것 치고는 스타 숫자가 무시무시하다 신흥강자인듯 하다
이번에 개발은 FastApi를 써보고 있는데
신세계이다....
일단 문서가 너무 잘 되어있고, 개발 및 디버깅은 진심 쩐다.
장고 플라스크만 해보지 말고, 딱 한번만 해보시길
'백앤드 개발' 카테고리의 다른 글
커멘트 라인, 쉘에서 한번에 여러 명령어 실행하기 (0) | 2020.03.11 |
---|---|
Git 필수 명령어(코멘드) 콤비네이션 (0) | 2019.07.09 |
웹 서비스 구성 형태(파이썬 기준) (0) | 2017.11.02 |
보초를 위한 Git 이용한 프로젝트 관리 방법 (0) | 2017.09.01 |
git 새 브랜치 만드는 법 (0) | 2017.08.16 |