본문 바로가기
Programming/Knowledge

[웹개발] 파이썬 웹 프레임워크(Web Frameworks)에 대한 간단 지식과 추천 프레임워크

by 지표덕후 2022. 1. 15.

파이썬(Python)은 가장 빠르게 성장하고 있는 프로그래밍 언어입니다. 알다시피 파이썬은 데이터 사이언스, 인공지능, 머신러닝에서 강력한 성능을 발휘합니다. 웹개발용으로도 파이썬은 읽기 쉽고 사용하기 쉬운 언어입니다. 게다가 파이썬은 금융, 과학, 교육, 컴퓨터, 전자기기 등 매우 다양한 산업에서 사용되고 있습니다. 구글, 페북, 인스타그램, 넷플릭스와 같은 대기업들이 다양한 용도로 사용하고 있기도 합니다.


지난 20년 동안 파이썬은 웹개발 분야에서 중요한 역할을 했습니다. 그 이면에는 강력한 풀스택 웹 프레임워크(full-stack web framework)에서부터 마이크로프레임워크(micro-framework)들이 존재했습니다. 2021년 Stack Overflow Survey에 따르면 전문 개발자의 41.53%이 자신의 개발언어로 파이썬을 사용한다고 답했습니다.

출처: https://insights.stackoverflow.com/survey/2021#most-popular-technologies-language-prof


참고로 2020년 조사에서는 이 수치가 33.99%였습니다. 33.99%에서 41.53%로, 1년만에 인상적인 성장을 이룬 것인데요. 문두에 소개한 파이썬의 폭넓은 활용도를 생각해보면 놀랍지 않은 결과입니다. 파이썬에 대한 인기가 늘어난 만큼 파이썬에 대응되는 기술들에 대한 수요도 늘었습니다. 특히 웹개발 프레임워크에 대해서요. 해서 이 포스트에서는 2022년 가장 유용한 몇 가지의 파이썬 프레임워크를 소개하고자 합니다.

 

파이썬 프레임워크가 무엇인가요?

파이썬 웹 프레임워크는 프로그래머가 웹 어플리케이션이나 웹 서비스를 구현하는 데 필요한 패키지나 모듈을 제공함으로써 개발과정을 더 수월하고 빠르게 만들어줍니다. 웹 프레임워크를 사용하면 소프트웨어 엔지니어는 요청을 라우팅하고 양시을 처리하는 등의 저차원적인 공통 과업들에 신경을 '덜' 쓸 수 있습니다. 또 디버깅이나 테스트를 위한 라이브러리도 제공하고 있어 개발자는 어플리케이션의 로직에 더 집중할 수 있게 됩니다.

 

올바른 프레임워크를 선택하기 위해 고려할 사항

파이썬 프레임워크를 선택할 때 가장 주안점을 두어야 할 부분은 내가 진행할 프로젝트의 사이즈와 복잡도입니다: 소규모 프로젝트를 위한 마이크로프레임워크와 대규모 프로젝트를 위한, 다양한 기능을 지닌 풀스택 프레임워크가 그 선택지입니다. 풀스택 프레임워크는 어떤 개발자에겐 지나치게 방대하고 배워야 할 게 너무 많을 수도 있습니다. 

두 번째, 종으로 횡으로 확장이 용이한지 따져보아야 합니다. 프로젝트 수행 중에 기능을 추가해야 할 수도, 서버를 옮겨서 배포해야 하는 경우도 있을 것이기 때문입니다.

세 번째, 프레임워크에 대해 학습하고 지식을 얻을 수 있는 문서(documentation)나 커뮤니티도 접근하기 쉬워야 합니다. 개발 중에 막히는 부분이 생기는 일은 다반사고 그 답을 얻는 게 어떤 경우 무척 어려울 수도 있기 때문입니다.  

마지막으로 간과하기 쉬운 부분인데, 프레임워크의 라이선스 정책을 고려해야 합니다. 어떤 프레임워크는 오픈소스이지만 어떤 프레임워크는 소유권을 요구하는 경우가 있습니다.



파이썬 웹 프레임워크 간의 차이

풀스택 프레임워크(Full-stack Framework)

풀스택 프레임워크는 소위 올인원 솔루션이라고 생각하면 됩니다. 프론트엔드 UI나 백엔드 로직, 데이터베이스와의 소통까지 모두 지원하기 때문입니다. 풀스택 프레임워크는 어플레케이션을 빌드하는 데 필요한 모든 것을 제공하기 때문에 가장 대중적인 프레임워크이기도 합니다.

마이크로프레임워크(Micro-framework)

풀스택프레임워크가 아닌 프레임워크 대부분은 마이크로프레임워크라고 생각하면 되는데, 풀스택 프레임워크만큼 풍성한 기능을 가지고 있지 않고 핵심적인 기능만을 제공하는 경우가 많고, 부가적인 기능은 따로 추가를 해야 합니다. 이런 프레임워크에서는 개발자에게 요구되는 의사결정이 단순하기 때문에 개발을 시작하는 초심자에게 권합니다.

 

 

비동기적 프레임워크(Asychronous Framework) 

파이썬 비동기적 프레임워크는 asyncio 라이브러리 3.5버전이 배포된 이후로 인기를 얻게 된 프레임워크입니다. 이런 프레임워크들은 대규모의 동시 접속을 다루는 데 용이하고 네트워크, 웹서버, 접속 라이브러리, 데이터베이스 등에서 높은 수준의 퍼포먼스를 제공합니다.

 

계속 사랑받을 웹개발 프레임워크

1. Django(장고)

장고는 파이썬으로 작성된 오픈소스 웹어플리케이션 프레임워크입니다. 소위 말하는 모델(M: 테이블 정의), 템플릿(T: 사용자가 보게 될 화면 정의), 뷰(V: 어플리케이션의 제어흐름과 처리로직 정의)의 MTV 프레임워크 모드(mode)가 적용되어 있습니다. 원래는 장고는 Lawrence Publishing Group의 지원 아래 뉴스 콘텐츠 기반 웹사이트를 관리하기 위해 개발되었습니다. CMS(Content Management System)이었던 거죠.

장고는 다른 프레임워크 구별되는 독자적인 특징을 가지고 있습니다. 장고는 ORM(Objective Relational Mapping, 객체관계매핑)을 지원하고 데이터베이스 운영을 파이썬으로 할 수 있게 합니다. 그래서 다양한 데이터베이스를 적용해야 하는 어플리케이션에서 강점을 지니죠. sqlalchemy라는 다른 라이브러리를 동원하면 화룡점정입니다.

말했다시피 처음에는 뉴스 사이트처럼 콘텐츠 기반 웹사이트를 구축하는 데 유용한 엔진으로 출범했지만, 지금은 NASA, Instagram, Reddit, Pinterrest 등 많은 유명 기업들이 장고의 속도, 안정성, 유연성에 기반해 서비스를 제공하고 있습니다. 장고는 크고, 복잡한 프로젝트에 적합한 파이썬 웹 프레임워크입니다. 작은 프로젝트에는 오히려 기능이 과할 수 있습니다.

 

해외 개발자 형님들이 말하는 Django의 핵심 특징:

  • Business logic and visual parts separated at the architecture level;
  • Developed infrastructure: an enormous number of libraries and plugins;
  • An ORM (Object Relational Mapper);
  • SEO friendly;
  • High scalability;
  • Highly secure;
  • A large community that makes it easy to find answers to various questions.

 

2. Pyramid(피라미드)

피라미드는 기능이 풍성한 파이썬 웹개발 프레임워크입니다. 용도가 아주 다양해요. 웹사이트, 웹 API, 파이썬과 같이 대중적인 프로그래밍 언어를 사용한 웹개발 어디서든 활용 가능합니다. 게다가 피라미드는 유연하고, 확장 가능성이 높고, 테스트 용이하며, 모듈 구조입니다.

피라미드는 BSD와 같은 라이선스(Berkeley Software Distribution, 무료사용이라 보면 됩니다)를 사용하는 작고, 가볍고, 부담 없이 시작해볼 수 있는 WSGI 파이썬 프레임워크입니다. 피라미드를 통해 프로그래머는 소규모 어플리케이션이든 풀스택 어플리케이션이든 모두 커버할 수 있습니다.  게다가 활발하게 활동 중인 커뮤니티가 존재하고 공식 문서도 풍성합니다. 피라미드에서 개발자는 피라미드의 자체 템플릿 시스템을 사용하고 데이터베이스 계층을 선택하고 광범위한 플러그인 세트를 활용할 수 있는 유연한 기능을 제공받을 수 있습니다.

요약하면 피라미드는 "작은 앱"이나 "큰 앱"이나 가장 빠르게 구현할 수 있는 파이썬 웹 프레임워크입니다. 선도적인 기술기업들이 피라미드를 고집하고 있고 몇몇 파이썬 개발 기업들은 피라미드를 웹개발에 권장하고 있습니다.

 

해외 개발자 형님들이 말하는 Pyramid의 핵심 특징:

  • Built-in sessions;
  • Supports single file webapps like microframeworks;
  • Extensible configuration;
  • URL generation;
  • Powerful debugger;
  • Serve static assets;
  • Predicates and renderers.

 

3. CherryPy(체리파이)

체리파이는 다양한 종류의 웹어플리케이션의 토대를 쌓는 데 탁월한 파이썬 프레임워크입니다. 게다가 체리파이는 배우고 사용하기 쉽게 디자인되어 있습니다. 단순함과 사용성에 중점을 두고 있기 때문입니다. 이 포스트의 리스트 중에서 아마 가장 접근하기 쉬운 프레임워크일 거예요.

무언가 새로운 걸 해보고 싶은 중급 정도의 개발자라면 체리파이는 적격일 겁니다. 고급 개발자라면 아마 기능이 충분치 않다고 느낄 수도 있을 것 같네요. 보다 정교한 프레임워크에 뛰어들기 전에 파이썬으로 간단한 작업물을 내보고 싶은 초심자에게 추천합니다.

체리파이의 가장 큰 장점은 다른 사람이나 서비스에 의존하지 않고 당신의 코드를 실행해볼 수 있다는 겁니다. 체리파이 내에 있는 콤포넌트로 어플리케이션을 쉽게 배포할 수 있습니다.

 

해외 개발자 형님들이 말하는 CherryPy의 핵심 특징:

  • A flexible built-in plugin system;
  • A powerful configuration and installation system;
  • Built-in support for testing, profiling, and coverage;
  • Fast development time;
  • The old and strong community is always ready to help.

 

4. Flask(플라스크)

플라스크는 파이썬의 가장 인기있는 웹프레임워크 중 하나입니다. 그리고 여전히 빠르게 성장하고 있는 툴입니다. 플라스크는 배우기 쉽고, 사용이 우아하고, 부가기능 라이브러리가 풍성하고 배포도 쉽습니다. 플라스크의 모든 장점과 인기는 단순성에서 기인합니다: 최소한의 노력으로 웹서비스를 구축하고 배포할 수 있습니다. 플라스크는 장고나 피라미드와 같은 수준의 스트럭처를 가지고 있지는 않습니다. 기능적인 어플리케이션을 빌드하는 데에 이상적인 환경을 제공하긴 하지만요.

그래서 플라스크는 “마이크로프레임워크”로 분류할 수 있는데요.  플라스크는 디폴트 데이터베이스나 서식 검증 도구 같은 것은 제공하지 않습니다. 플라스크 프레임워크를 배우고 나면 플러그인 사용법을 배워야 할 겁니다. 가령 WTForm + Flask-WTFom으로 양식 데이터를 검증한다든가, SQLAlchemy + Flask-SQLAlchemy로 데이터베이스를 제어한다든가 하는 식으로요. 

플라스크의 WSGI 도구상자는 Werkzeug를 사용합니다. 템플릿 엔진은 Jinja2를사용하고요. 플라스크의 라이선스는 BSD입니다. 관련 공식 문서가 많고 커뮤니티의 지원도 활발하니 개발 중에 궁금한 것을 던지면 여러 동료들로부터 지원을 받을 수 있을 겁니다.

다시 말하지만 플라스크는 진짜 가볍습니다. 그래서 단순한 웹사이트는 매우 적은 비용으로 만들 수 있습니다. 거기다 바로 위의 특징까지, 초심자에게 적합한 프레임워크라 할 수 있겠네요. 

 

해외 개발자 형님들이 말하는 Flask의 핵심 특징:

  • Built-in development server and fast debugger;
  • HTTP request handling functionality;
  • High flexibility;
  • Integrated support for unit testing;
  • URL routing;
  • Secure cookies;
  • Request dispatching.

 

5. Bottle(보틀)

보틀도 플라스크처럼 WSGI 마이크로레임워크입니다. 빠르고, 단순하고, 가볍습니다. 하나의 파일 모듈로 배포 가능하고, 요구하는 것도 파이썬 기본 라이브러리 뿐입니다. 보틀의 기능은 플라스크와 유사해서 플라스크 사용자라면 보틀로, 보틀 사용자라면 플라스크로 넘어가기 쉽습니다.

만약 당신이 어떤 기능의 프로토타입을 얼른 더해보거나, 랜딩 페이지를 신속하게 만들어보고 싶은 목적이라면 보틀은 웹프로그래밍에 대한 최소한의 지식만 가지고 동원해볼 수 있는 좋은 도구입니다.

보다 정교한 웹어플리케이션에는 플라스크가 더 적합할 순 있지만 보틀은 코드의 가독성이나 단순함에 집중하는 개발자라면 충분히 고려해볼 수 있는 선택지입니다.

 

해외 개발자 형님들이 말하는 Bottle의 핵심 특징:

  • Clean and dynamic URL routes and mapping;
  • Speed optimization;
  • Built-in HTTP development server;
  • Plugin support for various databases;
  • Integrated template engine.

 

6. Tornado(토네이도)

토네이도는 오픈소스 웹 서버 소프트웨어입니다. 토네이도는 대다수 주류 웹서버 프레임워크와는 명백한 차별점을 보입니다: non-blocking server이고상당히 빠릅니다.

토네이도가 non-blocking 메서드를 제공하고 epoll을 사용한 덕분에 토네이도는 초당 수천의 접속을 처리할 수 있고, 이 때문에 토네이도는 실시간 웹서비스의 가장 이상적인 프레임워크입니다. 그러나 토네이도는 다른 프레임워크들에 비해 주목 받지 못 했습니다. 장고한테 따라잡혔고, 다른 프레임워크도 마찬가지이지요. 사실 순수 파이썬으로 개발된 토네이도의 퍼포먼스를 cython으로 개발된 다른 프레임워크들의 퍼포먼스와 비교할 수는 없겠지요.

 

해외 개발자 형님들이 말하는 Tornado의 핵심 특징:

  • High-quality performance;
  • Real-time services;
  • Non-blocking HTTP client;
  • Web templating.

 

결론

웹개발 업계에서 파이썬은 아주 인기 있는 언어가 되었습니다. 파이썬은 누구나 자유롭게 사용할 수 있는 오픈소스 언어이기 때문에 많은 개발자들이 웹개발 과정에 사용하면서 각자 상이한  이슈를 맞닥뜨렸을 겁니다. 이게 프레임워크에 대한 나름의 선호를 형성하게 되었겠지요. 오늘날 260개 이상의 파이썬 프레임워크가 존재할 것으로 추정됩니다. 넘쳐나는 툴의 홍수 속에서 여러분의 것을 선별하는 데에 본 포스팅이 조금이라도 도움이 되었으면 좋겠습니다.


이 글이 도움이 되었다면 배우지 말아야 할 프레임워크와 그 대안에 대해 정리한 아래 포스팅도 읽어보세요. 단, 아래 정리한 프레임워크들은 웹 개발에 국한된 것이 아니라 앱 개발, 서버, 프론트엔드 모두 아우릅니다.

 

배우지 말아야 할 6가지 프레임워크와 최선의 대안

Medium에 발행된 Clement Brian의 글을 번역한 포스팅입니다. 시간과 노력을 투여해 뭔가를 실컷 익혀놨는데 다른 게 더 좋아보이고 그걸 배웠더라면 좋았을걸 후회해본 적이 있습니까? 아마 누구나

mokeya.tistory.com

 

댓글