Offcanvas

How To / 개발자 / 검색|인터넷 / 애플리케이션

‘강력하고 방대한’ 파이썬 웹 프레임워크 5종

2021.01.13 Serdar Yegulalp  |  InfoWorld
웹 사이트 또는 서비스를 위한 백엔드를 구축해보면 처음에는 대단해 보이지 않는 것도 곧 결코 그렇지 않다는 사실을 알게 된다. ‘단순한’ 사이트도 복잡한 실타래처럼 보인다. 사용자 관리, 데이터 디자인, 서식 제출, 보안 등 이 모든 것을 수동으로 구현하는 것은 지루하고 힘든 작업이다.

특히 대형 웹 프로젝트의 경우 온갖 요소를 내장한 프레임워크로 전향하는 것이 최선이다. 탄탄한 웹 애플리케이션 등을 구축하기 위해 필요한 모든 것이 갖춰진 파이썬용 웹 프레임워크 5종에 관해 살펴본다.
 
Image Credit : Getty Images Bank


큐빅웹(CubicWeb)
큐빅웹은 ‘재사용 및 객체 지향적 디자인에 유리한 의미론적(semantic) 웹 애플리케이션’이라 불린다. 릭 그레한이 2011년에 인포월드에서 이것을 리뷰했을 때 말했던 것처럼, 이는 ‘큐브’라 불리는 재사용 가능한 코드 블록과 앱스트랙션(abstractions )의 사용을 강조하는 매우 흥미로운 시스템이다. 사실, 큐빅웹은 개발자에 따라 너무 추상적이거나 특이할 수 있으며, 개발 속도와 기능이 다른 프레임워크보다 뒤쳐진다.

큐브는 스키마(Schema, 데이터 모델), 실체(Entity, 프로그래밍 로직), 뷰(View)가 특징인 소프트웨어 구성요소이다. 각각 작업을 수행하는 여러 개의 큐브를 조합함으로써 자신과 타인의 코드를 재사용하여 소프트웨어 애플리케이션을 구성할 수 있다.

큐빅웹은 모든 웹 앱이 사용하는 기본적인 스캐폴딩, 데이터 연결 및 저장을 위한 ‘저장소’, 기본적인 HTTP 요청/응답과 CRUD 동작을 위한 ‘웹 엔진’, 모델링 데이터를 위한 스키마를 제공한다. 이 모든 것이 파이썬 클래스 정의에 설명되어 있다.

큐빅웹 인스턴스를 설정하고 관리하려면 장고에 사용하는 것과 같은 명령줄 도구를 사용한다. 내장된 템플레이팅(Tamplating) 시스템을 통해 HTML 출력을 프로그램으로 생성할 수 있다. 또한 부트스트랩(Bootstrap) HTML 프레임워크 등의 웹 UI를 위한 도구를 제공하는 큐브도 사용할 수 있다.

큐빅웹이 파이썬 3(버전 3.23 이상)을 지원하지만 파이썬 3의 네이티브 비동기 기능은 사용하지 않는 것으로 보인다. 비동기를 포함시키는 우회책은 ‘cubicweb.pyramid’ 모듈을 사용하여 피라미드 프레임워크를 웹 서버로 사용하고 비동기 구성을 사용하는 피라미드의 포킹(Forking) 버전을 이용하는 것이다. 또한 ‘cubicweb-worker’ 큐브를 통해 작업을 비동기식으로 수행하는 것도 가능하다. 하지만 현재로서는 더 간단한 방법이 없는 것으로 보인다.

큐빅웹 앱에서 영구적인 데이터를 불러오거나 조작하려면 SQL 같은 문법을 사용한다. 그러나 W3C의 SparQL의 패턴을 따르는 RQL(Relation Query Language)을 사용한다. 이에 대한 큐빅웹의 정당화 근거 역시 추상화이다. RQL은 다양한 데이터 소스를 연관시키기 위해 분리된 경로를 제공한다.

큐빅웹은 의존성이 많기 때문에 pip install을 사용하여 모두 불러오는 것이 가장 좋다. 또한 로컬 환경에서 일정량의 수동 조정을 수행해야 할 수도 있다. pip install을 실행하거나 프레임워크의 코드를 다른 프로젝트의 하위 폴더에 넣기만 하면 되는 다른 프레임워크들과는 다른 부분이다. 또는 도커 컨테이너를 사용하여 모든 것을 실행할 수 있다.

큐빅웹은 긴 문서를 ‘북(Book)’이라 부른다. 북의 저자들은 큐빅웹의 이례적인 접근방식을 설명하고 일부 기본적인 애플리케이션을 구축하는 방법을 보여주며 API 참조를 포함시키고 전반적으로 저마다 구체적인 설명을 제공한다.

큐빅웹은 느리긴 하지만 여전히 개발이 진행 중이다. 큐빅웹 4.0에 대한 계획은 2012년부터 고려되었지만 등장 시점은 아직 제시되지 않았다.

장고
장고(Django)는 등장 이후 10년 만에 웹 애플리케이션 생성을 위해 파이썬에서 가장 널리 배치된 프레임워크가 되었다. 장고에는 필요할 수 있는 거의 모든 것이 포함되어 있기 때문에 작은 것보다는 큰 애플리케이션을 구축하는 데 더 적합하다.

장고는 수 년 동안 버전 1.x대에 머물러 있었다. 2017년 말 장고 2.0이 공개되자 파이썬 2와의 호환성을 포기하고 파이썬 3.4 이상과 호환되었다. 2019년 12월에 공개된 장고 3.0은 파이썬 3.6 이상을 요구하며 파이썬 웹 애플리케이션을 위한 새로운 비동기식 ASGI 표준에 대한 지원을 추가했다.

장고의 매력의 핵심은 배치 속도이다. 장고 에는 일반적인 웹 애플리케이션 개발을 위해 필요한 많은 것들이 포함되어 있기 때문에 신속하게 움직일 수 있다. 라우팅(Routing), URL 분석, ORM(object-relational mapper)을 포함한 데이터베이스 연결, 서식 검증, 공격 보호, 템플레이팅이 모두 내장되어 있다.

보편적인 웹 애플리케이션 시나리오에 필요한 구성 요소를 대부분 찾을 수 있다. 예를 들어, 사용자 관리는 대부분의 웹 사이트에서 지원하기 때문에 장고 는 이것을 표준 요소로 제공한다. 사용자 계정, 세션, 비밀번호, 로그인/로그아웃, 관리자 권한 등을 추적하기 위한 자체 시스템을 구축하는 대신에 장고 는 이런 기능을 네이티브로 제공한다. 이것들을 그대로 사용하거나 확장하여 초소한의 노력으로 사용 사례를 아우를 수 있다.

장고는 웹 애플리케이션을 공격으로부터 보호하는 데 도움이 되는 온전하고 안전한 기본값이 있다. HTML이나 자바스크립트가 포함된 문자열 등의 변수를 페이지 템플릿에 넣으면 변수의 인스턴스를 명확하게 안전한 것으로 지정하지 않는 한 내용이 그대로 표시되지 않는다. 이 자체를 통해 많은 보편적인 사이트 간 스크립트 작성 문제가 사라진다. 서식 검증을 원하는 경우 단순한 CSRF 보호부터 세부적인 오류 피드백을 제공하는 완전한 필드별 검증 메커니즘까지 모든 것을 사용할 수 있다.

기능이 풍부하고 광범위해도 강력한 문서가 수반되지 않으면 소용이 없다.  장고 문서는 이 프레임워크의 모든 측면에서 자세히 다룬다. 파이썬 3이나 다른 언어를 사용한 작업, 보안 적용, 보편적인 웹 애플리케이션 구성요소(세션이나 페이지네이션), 사이트맵 생성 등 모든 것을 다룬다. 각 애플리케이션 계층(모델, 뷰, 템플릿)의 API도 자세하게 설명되어 있다.

하지만 능력에 따라 복잡성도 커진다. 장고 애플리케이션은 무겁고 움직이는 부분이 많은 것으로 정평이 나 있다. 간단한 장고 앱도 동작을 위해 상당량의 구성이 필요하다. 일련의 단순한 REST 종점을 설정하는 것 외에 다른 것을 원한다면 장고는 분명 지나치다.

장고는 이상한 점도 있다. 예를 들어, 페이지 템플릿은 콜러블(Callable)을 사용할 수 없다. 일례로 탬플릿에서 {{user.name}}를 구성요소로 전달할 수 있지만 {{user.get_name()}}는 불가능하다. 장고가 템플릿이 부주의로 자기 무덤을 파지 않도록 하는 방법 중 하나이지만 이런 제약에 대비하지 않으면 충돌이 발생할 수 있다. 우회책이 있기는 하지만 성능에 타격을 주는 경향이 있다.

버전 3.0에서 장고는 비동기식 뷰에 대한 지원을 추가했다. 안타깝게도 ORM처럼 장고 스택의 다른 부분에서 아직 비동기를 지원하지 않는다. 하지만 ASGI를 통해 장고를 배치하여 비동기 뷰를 제대로 활용할 수 있다.

웹투파이
루비(Ruby) 프로그래밍 세계에서는 루비 온 레일즈(Ruby on Rails)가 실질적인 프레임워크이다. 드폴대학교 컴퓨터 공학 교수 마시모 디 피에로는 레일즈에서 영감을 얻어 파이썬에서 유사한 수준으로 쉽게 설정하고 사용할 수 있는 웹 프레임워크를 구축했다. 그 결과물이 웹투파이(Web2py)다.

웹투파이의 가장 큰 매력은 내장된 개발 환경이다. 웹투파이 인스턴스를 설정하면 해당 앱의 구성요소를 구성할 수 있는 온라인 파이썬 애플리케이션 편집기인 웹 인터페이스가 제공된다. 즉, 파이썬 모듈이나 HTML 템플릿을 통해 설명된 모델, 뷰, 컨트롤러를 생성할 수 있다. 웹투파이는 기본적으로 몇 가지 예제 앱을 제공한다. 이것들을 분석하여 메커니즘을 파악하거나 시작 템플릿으로 활용하여 자신만의 앱을 개발할 수 있다.

개발자들은 일반적으로 웹투파이의 소스 코드를 다운로드하고 이를 기반으로 구축하여 배포한다. 하지만 윈도우 또는 맥OS를 사용하는 기술 지식이 부족한 사용자들을 위해 웹투파이의 개발자들은 기본적으로 단독형 서버인 버전을 제공한다. 이런 버전을 다운로드하고 압축을 해제하며 실행하면 웹투파이가 내장된 로컬 웹 서버를 갖게 된다. 이를 통해 처음에 웹투파이 앱을 손쉽게 구축하고 필요에 따라 다른 곳에 배치할 수 있다.

웹투파이의 인터페이스는 부트스트랩 4로 구축되었기 때문에 보기에도 좋고 쉽게 탐색할 수 있다. 브라우저 기반 편집기가 완전한 기능을 갖춘 IDE를 대체할 수는 없지만 줄 번호 매기기와 파이썬 문법 강조(자동 들여쓰기 포함) 등의 유용한 지원 기능을 갖추었다. 또한 파이썬 쉘(Shell)에 대한 간단한 웹 인터페이스가 포함되어 있어 명령줄에서 웹투파이와 상호작용할 수 있다. 전문가들에게는 좋은 기능이다.

웹투파이에서 사용되는 데이터 추상화 시스템은 장고의 ORM 및 여기에서 영감을 얻은 다른 ORM(Peewee 등)과는 조금 다르게 작동한다. 이 시스템들은 파이썬 클래스를 사용하여 모델을 정의하지만 웹투파이는 define_table 같은 생성자 기능을 사용하여 모델을 인스턴스화한다. 다른 방식에 익숙해진 경우에만 차이점이 두드러질 가능성이 있으며, 초보자들이 당황할 일은 없을 것이다. 웹투파이는 현존하는 거의 모든 주요 데이터베이스와 통신하기 때문에 데이터 제공자에게 연결시키는 데 문제가 있을 가능성이 없다.

웹투파이에서 정말 유용한 데이터베이스 관련 기능은 모델의 다이어그램을 생성하여 모델이 서로 어떻게 연계되는지 시각화 할 수 있는 기능이다. 하지만 이 기능을 활성화하려면 PyGraphviz 라이브러리를 설치해야 한다.

웹투파이는 통합된 jQuery 및 AJAX 지원을 통해 국제화 기능, 다양한 캐시(Cache) 처리 방법, 액세스 관리 및 승인, 프론트 엔드(Front End) 효과(서식의 날짜 선택기 등) 등 다른 전문가 수준의 구성요소를 제공한다. 외부 및 내부 미들웨어(Middleware) 연결도 포함되어 있지만 미들웨어를 사용하여 핵심 웹투파이 기능을 대체할 수는 없다. 하지만 웹투파이에는 명시적으로 파이썬의 비동기 기능을 사용할 수 있는 방법이 없으며, 장기 작업을 처리하기 위한 스케줄러(Scheduler)가 있기는 하다. 

웹투파이의 문서도 당연히 ‘북’이라 불린다. 첫째, 웹투파이, 파이썬, 이것들에 사용되는 배치 환경에 대한 엄청난 양의 자료를 다룬다. 둘째, 접근성이 높은 서술식으로 작성되어 있다. 셋째, 보편적인 애플리케이션 구축 시나리오에 대해 심층적으로 다룬다. 예를 들어, 챕터 하나가 jQuery를 사용하여 AJAX 애플리케이션을 구축하는 방법을 다룬다.

CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
추천 테크라이브러리

회사명:한국IDG 제호: CIO Korea 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아01641 등록발행일자 : 2011년 05월 27일

발행인 : 박형미 편집인 : 천신응 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.