오랜만에 글을 다시 끄적여본다. 사실 깃헙 페이지로 제킬 블로그를 운영하고 있긴 했는데... 티스토리 그냥 써야겠다... 나중에 옮길 수 있지 않을까?
Django 과 Flask
먼저 파이썬으로 웹 어플리케이션을 제작하게 될 때 가장 널리 알려져 있는 것은 아마 장고 (Django) 가 아닐까 싶다. 한번 설치하고 부트스트랩만 진행하면 빠밤! 마법처럼 관리자 페이지까지 만들어주는 마법 도구이다. 사실상 웹 어플리케이션을 크게 만들어야 한다면 아마 장고가 파이썬에서는 그나마 나은 선택이 아닐까 싶다.
하지만 장고의 단점은 아마도 필요 이상으로 무거운 경우와 틀에 맞춰 코드를 작성해야 하는 것이 아닌가 싶다. 물론 어떻게 보는지에 따라 장점 혹은 단점으로 구별할 수 있을거다. 처음 장고를 접하는 사람들에게는 수많은 설정들과 알고 있어야 하는 파일들, 디렉토리 등 배울게 적지 않다. 그만큼 기대를 충족시켜주기도 하지만 때로는 간단한 웹 API 를 제공하기 위해서 이렇게까지 많은 것들이 필요하지는 않다.
이와 반면에 플래스크 (Flask) 는 상대적으로 훨씬 가볍고 유연한 웹 어플리케이션 프레임워크를 제공한다.
개발할 때 서버를 띄우기까지 몇 줄 안 적어도 되고 5분 내에 개발 서버를 하나 띄울 수 있다. (물론 쓸모성은 둘째치고...)
예를 들어 다음과 같은 코드로 플래스크 서버를 하나 띄울 수 있다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 200, 'OK'
if __name__ == '__main__':
app.run(debug=True)
초 간단하다. (물론 위와 같이 개발 단계에서 진행하기 때문에 보면 `debug=True` 옵션을 추가로 넣어줬다.)
The Pallets Project
위 플래스크 초간단 개발 서버에서 봤듯이 단 몇 줄의 코드로 서버를 하나 띄우는 것이 가능하다. 실제로 저 코드를 실행하게 된다면 로컬호스트 5000번대 포트에서 서버가 작동한다. 서버 작동을 확인하려면 다음과 같은 URL 로 접속하면 된다.
http://localhost:5000/
하지만 화면에는 그다지 흥미로운 것이 없다. 그렇다 그냥 단순한 HTTP 응답 코드인 200 만 보냈기 때문이다. 여기에서 흥미로운 점은 개발 서버를 띄울 수 있다는 것이 아니라 어떻게 띄어지는지이다.
Werkzeug
그 부분은 Werkzeug 라는 WSGI 라이브러리에서 담당하게 된다. 플래스크는 내부에서 Werkzeug 라이브러리의 `werkzeug.serving.run_simple()` 을 사용한다.
더 가기 전에 먼저 WSGI 는 뭐고 WSGI 라이브러리는 무엇인가?
WSGI 는 파이썬에서 사용하는 Web Server Gateway Interface 의 약어이다. 처음 듣게 되면 무서울 수도 있지만 코딩하지 말라는 무서운 악당이 아니라 오히려 웹 어플리케이션 개발에 도움이 되는 친구이다.
나중 일이지만 플래스크이던 장고이던 파이썬 웹 어플리케이션을 만들게 된다면 그 어플리케이션을 바로 서버로 사용하는 것은 그렇게 좋은 생각이 아니다. 서버와 어플리케이션을 그래서 주로 분리를 하게 되는데 이 때 서버와 어플리케이션이 분리하게 되면서 소통이 힘들어진다. 따라서 그 중간에서 서로가 얘기를 원활하게 할 수 있도록 역할을 하는 친구가 WSGI 이다. 물론 WSGI 서버를 제공할 수도 있다. 중간 역할만 잘 해주면 된다.
Werkzeug 는 WSGI 서버는 아니고 WSGI 에 사용되는 것들을 모아놓은 라이브러리이다. 가령 손톱깍기 세트 같은 거라서 필요에 따라 다양한 도구를 사용할 수 있다.
이 중에서 간단하게 개발 단계에서 서버를 작동해 볼 수 있도록 `run_simple` 라는 함수를 제공하게 되고 이걸 플래스크에서 사용하는 것 뿐이다.
실제로도 플래스크를 설치하게 되면 자동으로 Werkzeug 도 설치가 된다.
이 때 추가적으로 하나 더 설치되는 것이 있는데 이게 바로 Jinja2 라는 패키지이다.
Jinja2
진자 (Jinja2) 는 템플렛 엔진이다. 웹을 서핑하게 되면 HTML 이라는 것을 접하게 되는데 웹 페이지에 대한 정보를 담고 있는 문서이다. 이 문서는 정말 웹 페이지에 대한 정보를 담는 것이다. 여기에 동작을 원한다면 웹에서 대부분 사용하는 자바스크립트를 추가하고 스타일을 추가하고 싶다면 CSS 를 이용해 꾸미기도 한다.
하지만 반복되는 페이지이지만 내용이 살짝 다른 경우가 있을 수 있다. 예를 들어 검색창에서 뭔가를 검색하게 되면 검색 결과는 다르지만 형태는 비슷하거나 거의 동일하다. 각 검색결과마다 따로 HTML 문서를 작성하면... 생각하기도 끔찍하다. 그래서 템플렛 엔진 같은 것을 사용한다. 템플렛 엔진은 특정 형태를 지정해놓고 그 내용만 바꿀 수 있게 해주는 친절한 친구이다.
붕어빵을 크림으로 먹을지 팥으로 먹을지 정할 수 있는데 크림 먹을 때는 붕어빵 틀에 크림만 넣어주면 되고 팥을 먹을 때는 붕어빵 틀에 팥을 넣어주면 되는 것처럼 템플렛 엔진도 경우에 따라 알맞은 정보만 넣어주면 붕어빵을 뱉어준다. 참고로 크림이 진리라고 생각한다.
플래스크는 이런 진자 패키지를 기본으로 탑재하고 있다. 이렇게 진자를 자연스럽게 사용하게 되는데 그 이유가 뭘까?
Armin Ronacher
플래스크는 Armin Ronacher 라는 분이 개발했다. 그렇다면 간단한 개발 서버를 실행하게 도와주는 Werkzeug 는 누가 만들었을까? 같은 사람이다. Jinja2 는? 마찬가지이다.
이렇게 동일한 인물이 개발을 했기 때문에 이 셋의 연동 및 동작은 매우 부드럽다. 이 뿐이 아니라 다양한 것들을 개발하셨는데 이제는 혼자가 아닌 Pallets Project 로 운영이 되고 있다.
아래 링크를 넣어둘테니 한번은 방문해보는 것을 추천한다.
Hello | The Pallets Projects
Welcome to the Pallets Projects! The Pallets Projects are a collection of Python web development libraries that were independently developed by Armin Ronacher and later used as the basis of the Flask microframework. Today the Pallets Projects are a communi
palletsprojects.com
정리하며
플래스크에 대해서 아주 간단하게 알아봤다. 코드 위주보다는 장고와 간단하게 비교하는 것, Werkzeug, Jinja2 등을 개발한 사람과 Pallets Project 에 대해서도 조금 알아보게 되었다.
플래스크와 어떻게 부드럽게 작동을 하게 되는지도 조금은 살펴봤다.
다행히도 즐거운 플래스크 여정은 아직 많이 남아있다. 플래스크 기본 구조, 뷰, 모델, ORM 등 웹 어플리케이션은 재미나고 신기한 것들로 넘쳐난다.
'Web Development > Flask' 카테고리의 다른 글
Flask 시작 (0) | 2022.05.31 |
---|