오늘은 Django와 Flast를 비교해보고 장단점을 따져보도록 하겠다. 먼저 앞서 파이썬에 ㅍ도 모르는 자바 개발자가 간단하게 설치해보고 느끼는 점을 서술한 것으로 초보 기준이라고 생각하면 될듯 하다.
최근 다시 파이썬과 판다스, 형태소분석, 기타등등을 설치해서 이것저것 사용해보고 있다. 형태소 분석을 통해서 간단히 용어를 생성해주는 유틸리티를 만들었는데 내 피씨에서만 실행이 되니 좀 아쉬웠다. 그래서 아주아주 간단한 웹서비스를 통해서 내가 만든 유틸리티를 웹 서비스로 구현해보려고 했고 그래서 물망에 오른게 Django와 Flask다.
1. Django
강력한 기능이 많은 프레임워크라 할 수 있다. 굳이 자바로 비교하자면 파이썬 내에서 spring급 존재 위치를 가지고 있는 느낌이다. 기본적인 웹 개발을 하기 위한 여러가지 서비스들을 이미 갖추고 있다. 그렇지 않다면 왜 스스로를 배터리팩이라고 표현하겠는가?
spring도 무엇이 필요한지 몰라서 다 준비되어있는 것처럼 django도 비슷한 느낌을 보여줄것으로 생각 된다. 자바 개발자인 내가 샘플 django를 시작했을때 spring에 비해서는 훨씬 간단하지만 flask와 비교를 해보니 이 역시도 손이 더 많이 가는 편이구나 라는 정도? 라는 느낌이 든다.
djang admin 기능이 flask에 비해 좀더 강력하다라는 평이 있다.
2. Flask
Flask는 경량화된 웹 프레임워크, 그리고 마이크로 서비스, 필요한 요소요소들을 하나하나 추가해서 사용하면 되는 프레임워크로 자료들이 검색 되었다. Django가 spring과 비교된다면 flask는 spring boot와 비슷한 느낌이다. 구현이 훨씬 간단하고 심플하다.
오픈된지는 5년 정도 Flask가 늦게 태어났지만 github start 갯수는 django가 44k, flask가 46k로 2k 정도 많은 것으로 개발자 민심은 상당히 Flask로 쏠려있는것이 아닌가 하는 생각이 들고 Flask가 좀 더 스마트하겠구나라는 생각이 든다. 웹 프론트 엔드 프레임워크로 굳이 비교한다면 비슷한 느낌인지는 모르겠지만 리액트(Django)와 뷰(Flask)를 비교하는 느낌?
결론은 개인적인 토이프로젝트용으로는 Flask로 선택했다. 비록 다른 언어를 통해서 습득하긴 했지만 웹 개발이 처음이 아니니까 검색을 통해서 충분히 붙여나가는데 문제가 없다고 판단했다.
아래 내용부터는 Django와 Flask 설치와 Hello World 수준을 찍는 샘플을 수행하는 과정을 정리했다.
1. Django 설치와 샘플 실행
일단 감을 잡아보기 위해 설치를 간단하게 진행해보도록 하겠다. 일단 내 컴에는 파이썬이 설치되어있는데 없다면 공식 홈피에서 설치파일을 받아서 설치하면 된다. 내 컴에는 파이썬 3.7.1 버전이 설치가 되어있었다. 'python -V' 명령어로 간단하게 확인해준다.
두번째로 가상환경을 만들어줘야 한다고 한다. 프로젝트 별로 다른 패키지를 이용하기 위해서 만든다고 한다. 자바 개발자인 내가 보기엔 패키지 숫자 별로 라이브러리가 설치될 수 있는 글로벌 환경을 두면 아무 문제가 없는것 같은데 공간 낭비가 생기니 별로 효율적으로 느껴지진 않는다. 파이썬 고유 환경적인 문제이니 아무튼 가상환경을 만들어준다.
나는 python 명령어로 바로 3 버전과 매핑되어있으니 python으로 하는거고 python3으로 해야하는 환경이면 python3으로 해주면 된다.
python -m venv sample-django
그리고 공식 릴리즈 버전 설치를 위해 아래 설치 명령어를 입력해준다. 내가 설치하는 시점에서 Django 공식 릴리즈 버전은 2.2.6인게 확인된다.
pip install Django
잠시 후에 설치가 완료되었다. 이제 개발툴을 선택해야 하는데 파이참, 아톰, vscode 등 여러가지가 있지만 아톰이나 vscode는 파이썬 개발 시 뭔가 미려한 모습은 아닌거 같아 파이썬 고수들이 가볍게 쓰기 좋은 듯 하고 파이참이 초보들에게 가장 좋은 툴이라 생각되지만 뭔가 툴을 하나 더 설치하는게 귀찮아서 이클립스에 pydev를 설치해서 띄워보도록 하겠다. 회사 피씨에는 파이참이 설치되어있어서 집 피씨에는 이클립스를 선택한 거다.
이클립스 마켓 플레이스에서 py를 검색하면 PyDev가 검색 된다. 걍 바로 설치해보자.
이클립스에서 PyDev perspective로 전환시킨 뒤 Django 프로젝트를 만들면 되는데 만들고 나서 우클릭을 눌러 Run as 부분 Django 로 시작하게 되면 아래와 같은 메세지를 보여주고 Django 서비스가 기동된다.
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
October 12, 2019 - 22:31:19
Django version 2.2.6, using settings 'sample_Django.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
공식 홈피에서 설명하는 튜토리얼대로 기능을 하나 추가해보자. 우클릭을 하고 Django 메뉴에 Create application(manage py startapp)을 클릭해서 app을 만들어준다.
잠시 후에 프로젝트를 다시 리프레시 해보면 polls 패키지가 만들어진 것을 확인할 수 있었다.
views.py를 열어 다음과 같이 코드를 넣어줬다.
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
저 views.py를 보게 하기 위해서는 urls.py를 만들어야하고... 다음과 같은 코드를 넣어준다.
'''
Created on 2019. 10. 12.
@author: Administrator
'''
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
그 다음 최상위 urls에서 polls.urls를 연결해주면 끝. 내 프로젝트 기준으로 sample_Django.urls.py 에서 polls.urls.py를 연결해주면 되는 걸로 생각된다.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('polls/', include('polls.urls')),
]
그리고 해당 경로로 접속해보자. http://127.0.0.1:8000/polls/
아까 views.py에 입력했던 메세지가 그대로 나오는걸 확인할 수 있었다. 뭔가 파일 내에 경로에 경로를 연결하는 방식은 예전 자바 스트럿츠에서 xml로 url을 연결하던 방식과 유사한 것 같고 함수 하나에 HTTP response를 연결하는 방식은 예전 자바 서블릿 개발했을 때와 느낌이 비슷하다. 단, 과정과 코드는 훨씬 심플하다. 괜히 파이썬이 아니란 느낌이다.
2. Flask 설치와 샘플 작업
'pip install flask' 명령어로 flask를 설치해준다.
D:\workspace\python\env_flask>pip install flask
Requirement already satisfied: flask in c:\programdata\anaconda3\lib\site-packages (1.0.2)
Requirement already satisfied: click>=5.1 in c:\programdata\anaconda3\lib\site-packages (from flask) (7.0)
Requirement already satisfied: itsdangerous>=0.24 in c:\programdata\anaconda3\lib\site-packages (from flask) (1.1.0)
Requirement already satisfied: Jinja2>=2.10 in c:\programdata\anaconda3\lib\site-packages (from flask) (2.10)
Requirement already satisfied: Werkzeug>=0.14 in c:\programdata\anaconda3\lib\site-packages (from flask) (0.14.1)
Requirement already satisfied: MarkupSafe>=0.23 in c:\programdata\anaconda3\lib\site-packages (from Jinja2>=2.10->flask) (1.1.0)
이클립스에서 sample_flask로 파이썬 프로젝트를 하나 만들어준 뒤 hello.py 파일을 생성하여 아래 코드를 입력해주고 실행하면 샘플은 끝.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
* Serving Flask app "hello" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [13/Oct/2019 23:15:56] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [13/Oct/2019 23:15:56] "GET /favicon.ico HTTP/1.1" 404 -
Django에 비해 훨씬 더 심플한 코드를 보여준다.
'dev > python' 카테고리의 다른 글
Mac brew python3 설치 에러 (Error: An unexpected error occurred during the `brew link` step) (0) | 2019.03.10 |
---|