Flask란?

플라스크는 파이썬으로 작성된 마이크로 웹 프레임워크입니다. 여기서 “마이크로”와 “웹 프레임워크” 라는 두 가지 특징을 잡아서 플라스크를 설명할 수 있는데요, 먼저 웹 프레임워크는 웹 애플리케이션을 개발할 때 사용되는 도구를 뜻합니다. 그리고 여기에 “마이크로”라는 게 붙은 것은 플라스크가 매우 가볍고, 빠르게 동작하는 특징이 있기 때문입니다.

(1) 경량성 : 최소한의 기능만을 제공하는 마이크로 프레임워크. 가볍고 빠르게 동작합니다.
(2) 간단한 문법 : 간단한 문법과 구조를 가지고 있어 이해와 사용이 쉽습니다.
(3) 빠른 개발 : 빠른 속도로 개발을 할 수 있고, 이러한 특징 때문에 WAS를 구축하거나 개념증명을 하는 데 특히 좋습니다.

Installation

1
2
# pip로 설치
pip install flask

Dependencies

플라스크는 다음 라이브러리들에 의존합니다.

1
2
3
4
5
6
7
8
9
10
11
# 필수
Werkzeug
Jinja
MarkupSafe
ItsDangerous
Click
Blinker

# 선택
dotenv
Watchdo

Werkzeug

파이썬 애플리케이션과 웹 서버 간의 표준 인터페이스인 WSGI(Web Server Gateway Interface)를 구현 하는 데 사용되는, 플라스크의 핵심 의존성 라이브러리입니다. 플라스크는 이 라이브러리를 이용해 웹 서버, 라우팅, 디버깅 등의 기능을 제공합니다. “베르쯔크”와 같이 발음됩니다.

Jinja

플라스크에서 페이지를 렌더링하는 데 사용되는 Jinja는 동적인 웹 페이지를 생성하기 위한 도구 인 템플릿 엔진입니다. HTML 코드와 동적인 데이터를 조합해 동적인 웹 페이지를 생성할 수 있게 해줍니다.

동적인 웹 페이지 (동적 컨텐츠)에 대한 설명은 다음 포스트를 참고해주세요.
웹개발 - 정적 컨텐츠와 동적 컨텐츠

MarkupSafe

HTML 마크업 문자열을 안전하게 표현해줄 수 있게 도와주는 라이브러리입니다. 사용자로부터 입력받은 데이터를 안전하게 렌더링하고, 표시할 때 Cross-Site Scripting 공격을 방지하는 데 도움을 줍니다.

사용자가 입력한 데이터 를 템플릿에 렌더링할 때, 이스케이프 처리(특수문자나 예약어를 문자열로 치환하는 작업) 를 통해 해당 데이터가 HTML 코드가 아닌 텍스트로 유지되도록 하여 페이지에서의 혼란을 방지합니다. 이러한 기능으로 앞서 말한 악의적인 스크립팅 공격을 방어할 수 있습니다.

ItsDangerous

세션 관리 및 보안 관련 작업에 사용되는 라이브러리 로, 플라스크의 세션 쿠키와 같은 데이터를 안전하게 서명하는 데 도움을 줍니다. 토큰이 변조되지 않았는지 확인하기 위해 데이터는 암호화 방식으로 서명됩니다.

Click

명령줄 애플리케이션 (Command Line Interface, CLI )를 만들기 위한 도구로 사용됩니다.

Blinker

Blinker는 플라스크에서 애플리케이션이나 요청의 수명 주기 동안 구독자에게 특정 이벤트를 알리는 Signal 이라는 방법을 구현하는 데 사용됩니다. 쉽게 말하면 이벤트 시스템을 구현 하는 데 사용됩니다.

Reference

flask 공식 문서 : https://flask.palletsprojects.com/en/3.0.x/
flask 소개 : https://ko.wikipedia.org/wiki/플라스크(웹 프레임워크)
Werkzug : https://palletsprojects.com/p/werkzeug/
Jinja : https://palletsprojects.com/p/jinja/
MarkupSafe : https://palletsprojects.com/p/markupsafe/
MarkupSafe : https://minwook-shin.github.io/
ItsDangerous : https://palletsprojects.com/p/itsdangerous/
ItsDangerous : https://minwook-shin.github.io/
Blinker : https://blinker.readthedocs.io/en/stable/
Signal : https://flask.palletsprojects.com/en/3.0.x/signals/