ㅍㅍㅋㄷ

Django 와 Flask 비교 본문

Programming/Django

Django 와 Flask 비교

클쏭 2016. 5. 30. 18:17

Python Framework - Django 와 Flask 비교 및 사용 사례



Python Framework 도 여러가지가 있다. 

하지만 Open source 의 세계는 참으로 냉정하게도. 결국 선택 받은 몇몇만 살아 남는 그런곳이지 않은가.  (강한자가 살아남는 레알 Jungle) 

 

역시나 마찬가지로 Python Framework의 세계도 그러한듯 하다. 

 

개인적인 생각으로는 결국 Django와 Flask 두개로 정리 되는 걸로 보인다. 

오늘은 정글 속에서 살아남은 Django와 Flask에 대한 간단히 비교해보려고 한다.  







1. Django (한글로 치면 어무해)





Django는 python 기반 web application framework 중 가장 많이 사용되고 있다. 이유는 간단하다. 

기능이 많고 강력하기 때문. 


Django는 web application을 개발하기 위한 대부분의 기능들을 제공하기 때문에 규모가 있는 application 개발도 Django로 충분히 소화가 가능하다. 


MVC 기반 패턴대로 개발할 수 있도록 이미 구조화 되어 있어서 프레임워크 가이드 대로 하면 손쉽게 개발이 가능하다.

단지 처음 배울때가 좀 빡셀 뿐.

ORM 기능도 내장되어 있으며 MySQL, PostgreSQL, Oracle 등 다양한 DBMS에 대해서도 Driver 형태로 손쉽게 붙일 수 있다. 

Viewing 또한 template 엔진을 제공한다. 웹 개발에 필요한 session 관리도 지원해 준다. 


그 외 추가 기능 또한 plugin 형태로 손쉽게 설치후 사용할 수 있게 지원한다. 


개인 경험으로 가장 많이 사용한 plugin 기능은 restframework. 

Web API 서버를 개발하기 위한 toolkit 인데, 복잡하긴 하지만 다양하고 강력한 기능을 제공하기 때문에 python 기반의 API 서버 개발로 쓰면 좋다. 

 

결론은, 

개발하기 위해 필요한 귀찮은 작업들을 거의 대부분 Framework 레벨에서 지원해준다는 것이 강점이라 하겠다.


그리고 Python 기반 Framework 중 사용자가 가장 많으며 community 도 가장 크다는 것이 장점이라고 볼 수 있다. 

결국 Open source는 Community power 가 가장 중요하기 때문. 


그리고, 

Django 기반의 유명한 site reference도 많이 있다. 그만큼 안정성도 검증 되었다고 볼 수 있다. 

아래는 Django 기반으로 개발된 서비스 들이다.




 Django Reference Site



  1) Instagram


  


  

  Instagram의 application 서버로 Django 가 사용되었다고 한다. 재미있는 점은 WSGI 서버로 Apache + mode_wsgi 조합을 사용하였다가  Gunicorn 으로 갈아 탔다고. CPU 부하를 줄이기 위해서 였다나.


Application Servers


 Next up comes the application servers that handle our requests. We run Django on Amazon High-CPU Extra-Large machines, and as our usage grows we’ve gone from just a few of these machines to over 25 of them (luckily, this is one area that’s easy to horizontally scale as they are stateless). We’ve found that our particular work-load is very CPU-bound rather than memory-bound, so the High-CPU Extra-Large instance type provides the right balance of memory and CPU.


 We use http://gunicorn.org/ as our WSGI server; we used to use mod_wsgi and Apache, but found Gunicorn was much easier to configure, and less CPU-intensive. To run commands on many instances at once (like deploying code), we use Fabric, which recently added a useful parallel mode so that deploys take a matter of seconds.





  2) Pinterest


  


  디자인계통 사람들이 많이 사용한다는 이미지 기반 SNS 서비스.

  Pinterest의 application layer 로 Django를 사용하였다고 한다. web server는 node.js 와 일부를 tornado 로 사용하였다고 한다. 

  

 We use python + heavily-modified Django at the application layer.  Tornado and (very selectively) node.js as web-servers.  Memcached and membase / redis for object- and logical-caching, respectively.  RabbitMQ as a message queue.  Nginx, HAproxy and Varnish for static-delivery and load-balancing.  Persistent data storage using MySQL.  MrJob on EMR for map-reduce.




  3) BitBucket


  



   Private Git repository 서비스 BitBucket.

   강력한 Framework를 무료로 이용할 수 있는 장점 때문에 Django를 선택하였다고 한다. 


Why did you choose Django?

We chose Django for several reasons: We have worked with it for years before deciding to do Bitbucket, and it's a wonderful framework where you get a lot of things for free, such as URL mappings, form generation/validation, and it of course encourages DRY. It turned out to be an excellent choice, and we've overcome most of the bottlenecks without having to coerce the framework itself.


 

 그 외에도 언론사 사이트 Washington Post, 프레젠테이션 서비스로 유명한 Prezi, 음악 스트리밍 서비스인 Sportify 또한 Django를 기반으로 개발되었다고 한다. 





   



2. Flask






  Flask는 Python 기반 Micro Framework를 표방하면서 나타났다. 

  즉, 매우 가볍고 심플한 Framework를 지향하는 점이 특징이다. 


  이러한 철학 때문에 처음 설치하면 딱히 뭐가 없다. 

  하나하나 필요한 부분을 추가하면서 만들어 나가야 한다. 처음부터 만들어가는 재미라고 할까.  


  이러한 구조의 가장 큰 장점이라고 한다면,
  자유도가 아주 높다는 것.

  내가 원하는 라이브러리와 패키지로 내가 필요한 것만 붙여서 만들어 나갈 수 있다. 
  Django의 경우에는 강력한 기능을 제공해 주는 대신, Framework 자체적으로 설계한 개발 패턴에서 크게 벗어날 수 없는 구조라면 

  Flask는 처음부터 주어진 기능이 없지만, 내가 원하는 설계 방향대로 framework를 구축해 나갈 수 있다는 점이 매력이라고 하겠다. 

  예를 들면, 
  Flask에는 DB ORM 구조가 따로 존재 하지 않는다.  Django의 대표적인 특징인 ORM도 Flask 에는 따로 없으며, 
  개발자가 원한다면 ORM 지원 패키지를 선택해서 사용하면 된다. (보통 SQLAlchemy 를 사용한다)


  Flask의 내부 구성을 살펴보면,

  크게 WSGI 용 Library인 Werkzeug(http://werkzeug.pocoo.org/) 와 HTML에 데이터를 렌더링하는 엔진인 Jinja2 template(http://jinja.pocoo.org/) 으로 구성되어 있다. 


 Flask 또한 여러 site에서 사용하고 있는 Framework 이고, Community도 활성화 되어 있기 때문에 사용하는데 큰 지장이 없다.

 아래는 Flask를 사용하고 있는 서비스들. 




 Flask Reference Site




 1) Linked-in



 구인/구직 관련 SNS로 유명한 Linked-in

 Linked in의 internal stack에 대부분이 Python기반의 Flask를 사용하였다고 한다. 


 아래는 Linked in의 Tech engineer였던 Rachel Sanders 가 PyCon 2014에서 발표 했던 내용. 

 초반 소개 부분에 Linked in에서 Flask가 쓰였다고 언급한다. 







 2) Pinterest





 Django 처럼 core application 서버로 사용하진 않지만, API 기능 개발 위주로 Flask가 사용되었다고 한다. 


 Pinterest uses Flask for our API and has used it since late 2011, I'm not sure why Paul's answer  (What is the technology stack behind Pinterest?) didn't include it as a core technology, but it's most likely due to the API being an ancillary thing during his tenure. Since early 2012, we've reinvested in the API, putting it on equal footing with the web and since late 2012 every Pinterest client (web, iOS or Android) hits it at some point. Presently, the API does over 12 billion requests per day, all in Flask.


 



3) Twilio




개발자가 VoIP기반 보이스, 비디오, 텍스트 서비스를 쉽게 사용할 수 있도록 API를 제공하는 서비스이다. 

즉,  twilio의 경우는 API 가 서비스의 핵심인데 이것을 Flask 기반의 Flask-RESTful (http://flask-restful.readthedocs.io) 로 개발하였다고 한다. 

아래는 Twilio engineering blog에서 언급한 Flask 를 사용하게 된 이유.

 

 Flask-RESTful is a simple, easy to use Flask extension that helps you construct APIs. It gives you a clean interface for easily parsing arguments to your resources, formatting/serializing your output, and organizing your routing. It abstracts away a lot of the HTTP boilerplate code for you. Flask-RESTful does this while staying out of the way of your business logic. It doesn’t prescribe a particular ORM, and it doesn’t have any dependencies other than Flask itself. The goal of Flask-RESTful is to give you a simple and extensible starting point for building your API just the way you want it.

 





Google Trend로 살펴본 Django와 Flask



 

 아래는 Google Trend로 본 최근 2년간 Django와 Flask 의 Trend 비교.

 Django와 Flask 모두 2년간 큰 변함 없이 꾸준히 관심을 끌고 있다.

 

 그리고 Django가 Flask 보다 2배 이상 많이 언급되고 있음을 알 수 있다.

 

 




 




Conclusion



 Django와 Flask 모두 Python 기반의 Web Framework로 꾸준히 사용자를 끌어 모으며 어느 정도 자리를 잡은 것으로 보인다. 


 하지만, 이 둘은 태생 목적이 많이 다른 Framework 이기 때문에 상황에 맞게 판단해서 사용하는 게 좋을듯 하다. 


 Django는 현재 가장 많은 사용자를 보유한 Python application Framework 이며, 강력하고 풍부한 기능을 제공하기 때문에 Framework 사용법만 잘 익힌다면 아주 사용하기 편리할 것이다. 

 Flask는 Django와는 반대로 가볍고 심플한 Framework 로서, 개발자 스스로 원하는 방향으로 만들어 나가게끔 자유도가 높다는 점이 강점일 것이다.


개인적으로는 Django에게 손을 들어주고 싶다. (개인적인 견해일뿐)

Flask의 경우 자유도가 높다는 점이 강점이지만, 사실 이것저것 해줘야 할게 너무 많아 귀찮은 경우가 많았다.


결론은, 목적에 맞게 쓰면 된다. (뭐야 이거)






[ 참고 ]

  • http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances
  • https://www.quora.com/What-is-the-technology-stack-behind-Pinterest-1
  • https://code.djangoproject.com/wiki/DjangoSuccessStoryBitbucket
  • https://www.shoop.io/en/blog/25-of-the-most-popular-python-and-django-websites/
  • http://ddi-dev.com/blog/programming/django-vs-flask-which-better-your-web-app/
  • https://www.djangoproject.com/
  • http://flask.pocoo.org/
  • https://www.quora.com/What-is-the-largest-site-created-using-Flask
  • https://www.quora.com/What-challenges-has-Pinterest-encountered-with-Flask/answer/Steve-Cohen?srid=hXZd&share=1
  • https://www.twilio.com/engineering/2012/10/18/open-sourcing-flask-restful
  • https://www.google.com/trends/explore#q=%2Fm%2F06y_qx%2C%20%2Fm%2F0dgs72v&date=5%2F2014%2026m&cmpt=q&tz=Etc%2FGMT-9


Comments