장고(Django)와 플라스크(Flask)를 사용해야 할 때가 왔다.
플라스크는 예전에 잠시 스파코 부캠에서 본격 자바를 배우기 전 Python, MongoDB와 함께 사용을 해봤던
경험이 있고, 장고의 경우는 이름만 들어 본 그런 사이다.
어차피 둘 다 알아야하기 때문에 입문은 장고로 하기로 마음먹었고,
장고를 설치하기 전 두 프레임워크의 정보를 머리에 집어넣을 겸 적어본다.
우선 장고(Django)와 플라스크(Flask) 모두 파이썬으로 웹 어플리케이션을 개발하기 위한
웹 프레임워크이다.
무엇이 더 좋고 나쁜 문제가 아닌 장고(Django)와 플라스크(Flask)는 파이썬 언어 기반인 것만 동일할 뿐
두 가지를 비교할 수 있는 대상이 못된다.
속도나 개발 편의성도 차이가 없는 편이고 결국 개발자의 실력이나 프레임워크의 퀄리티가 아닌
어떤 프레임워크가 더 익숙한가의 문제라고 한다.
장고(Django)를 다룰 줄 안다면 플라스크(Flask)도 쉽게 다룰 것이고,
그 반대가 되어도 어렵게 않게 다룰 수 있다고 한다.
두 프레임 워크의 범주를 살펴보면 아래와 같다.
장고(Django) : Full-stack-Framework
플라스크(Flask) : Micro Framework (=Django Rest Framework)
하지만 여러 개발자 선배들이 신입 감자에게 플라스크보다 장고를 추천해주었다.
그 이유는 장고는 이미 다 개발이 되어있는 완벽함에 가깝고
그에 비해 플라스크는 가벼운 프레임워크라서 개발자가 모든걸 명시적으로 설정하고 세팅해야하는 단점(?)이 존재한다고 한다.
그 외에도 두가지 프레임워크의 차이를 살펴보자면
1. 프로젝트 레이아웃의 차이점
장고(Django) : 한 프로젝트 내에 다양한 어플리케이션이 존재하기 때문에 같은 프로젝트 내에서
여러 어플리케이션을 동시에 사용하는 재사용 코드를 작성하기 쉽고, 프로젝트 관리에 용이
플라스크(Flask) : 프로젝트마자 1개의 어플레이션만 개발가능
2. DB접근
장고(Django) : 강력한 ORM으로 DB접속을 최소화
플라스크(Flask) : ORM이 따로 존재하지 않기 때문에 SQLAlchemy 등을 사용해야 함
3. 사용자 정의 기능 추가
장고(Django) : 사용자 정의 기능을 추가하기가 쉽지 않음
플라스크(Flask) : 마이크로프레임워크이기 때문에 편한 확장이 가능에 보다 유연하게 원하는 기능을 추가해서
커스터마이징 등을 통해 다양하게 사용할 수 있음
이런 차이가 존재하여 두 가지의 사용 목적이 다를 수 있다.
[장고(Django]
장고는 2003년 로렌스 저널 월드 신문을 만들던 웹 개발팀의 내부 프로젝트에서부터 만들어져
2년 뒤인 2005년 오픈소스 프로젝트로 공개되어 지금까지 가장 많이 사용되는 파이썬 웹 프레임워크이다.
파이썬으로 작성되었고 웹 어플리케이션을 빠르고 쉽게 개발할 수 있도록 도와준다.
[장고의 특징]
1. MVC 패턴 기반
장고는 MVC패턴(Model-View-Controller) 아키텍처를 기반으로 한 프레임워크이다.
하지만 장고에서는 View대신 Template를 Controller를 View라고 칭하면서 MVT 아키텍처를 사용한다.
Model : 데이터베이스에 엑세스 하는 데이터 컴포넌트
Template : 데이터를 사용자에게 보여주는 사용자 인터페이스 컴포넌트
View : 데이터를 가져오고 변형하는 로직 컴포넌트
명칭만 다를 뿐 우리가 흔히아는 MVC와 개념은 동일하다.
2. 완전한 기능성 :객체관계 매핑
장고는 "all-inclusive"한 웹 프레임워크로, 개발자가 필요로 하는 대부분의 기능을 기본으로 제공한다.
또한 ORM(Object-Relational Mapping)을 사용하는데, 이 ORM (객체 관계 매핑)은 데이터베이스 시스템과 모델이라는
파이썬 클래스를 연결하는 다리같은 역할을 한다.
이런 ORM 기능을 통해 SQL 문장을 사용하지 않고도 테이블을 조작하는 등의 데이터베이스와 상호작용하며,
설정을 약간씩만 바꿔준다면 이미 구축된 데이터베이스 시스템을 다른 데이터베이스로 쉽고 편리하게 변경이 가능하다.
추가로 관리자 패널, 사용자 인증, URL 라우팅, 템플릿 엔진, 폼 처리 등 다양한 기능을 내장하고 있다.
3. 보안과 확장성
보안에 관련하여 다양한 기능들도 내장하고 있다.
CSRF 공격방어, XSS 방어, SQL Injection 방어 등을 자체적으로 처리하여 보안에 강력하다.
또한 다양한 어플리케이션을 쉽게 추가/확장이 가능하기 때문에 재사용 가능한 앱들을 쉽게 만들어서
프로젝트 간에 공유하며 재사용이 용이하다.
[장고의 단점]
이렇게 완벽해 보이지만 분명 단점도 존재한다.
1. Heavyweight
장고는 초기 설정이 복잡하고, 프로젝트를 시작할 때 많은 기능을 포함하고 있기 때문에, 작은 규모의 프로젝트에는 부담스러울 수 있다.
2. 고수준의 추상화
앞서 설명했듯 장고는 많은 기능들을 추상화하여 제공하고 있기에
개발자가 내부 동작을 이해하는데 많은 시간이 소요된다.
[장고 설치방법]
기본적으로 파이썬이 설치되어 있다면 아래와 같이 명령어를 통해 쉽게 설치하고 사용할 수 있다.
설치: pip install django
프로젝트 생성: django-admin startproject 프로젝트이름
앱 생성: python manage.py startapp 앱이름
서버 실행: python manage.py runserver
[플라스크(Flask)]
플라스크는 마이크로 프레임워크로도 알려져 있으며, 가벼우면서도 강력한 웹 프레임워크이다.
장고와 마찬가지로 파이썬으로 웹 애플리케이션을 빠르게 개발할 수 있도록 도와준다.
[플라스크의 특징]
플라스크는 장고와는 다르게 기본적으로 필요한 최소한의 기능만을 제공하며,
개발자가 필요에 따라 원하는 대로 다양한 확장 모듈을 통해 필요한 기능을 추가하거나 커스터마이징하여
기능을 확장할 수 있다는 장점이 있다.
이렇게 기본 기능만을 보유하고 있어 학습 곡선이 낮고 직관적인 구조를 가지고 있어, 초보자도 쉽게 시작할 수 있다.
[ 플라스크 설치방법]
pip install flask
장고와 플라스크는 각각의 특성에 따라 프로젝트의 크기나 요구사항에 맞게 선택할 수 있다.
장고는 대규모 프로젝트나 보안이 중요한 프로젝트에 적합하다.
1. 웹 앱 또는 API를 만들 때
2. 빠른 개발/배포/업데이트가 필요할 때
3. 기본적인 보안이 필요할 때
4. SQL이 익숙치 않은 개발자들
플라스크는 작고 빠르게 프로토타입을 만들고자 할 때나 간단한 웹 서비스를 구축할 때 적합하다.
1. 1개의 코드베이스 담을 수 없을만큼 앱이 크거나 너무 작은 경우
2. 실력이 어느정도 있는 개발자
3. 장고나 파이썬 둘 다 미숙할 때
4. DB로 이미 NoSQL을 사용하고 있을 때
각자 개발 목적에 맞춰 웹 프레임워크를 사용하면 된다.