본문 바로가기

백앤드 개발

파이썬 백엔드 개발 시작시 고려할 점

반응형

 

 

기본적으로 백엔드를 개발할 때 덜렁 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 역할

 

복잡하게는 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를 써보고 있는데

신세계이다....

일단 문서가 너무 잘 되어있고, 개발 및 디버깅은 진심 쩐다.

장고 플라스크만 해보지 말고, 딱 한번만 해보시길

반응형