책 '점프 투 플라스크'를 공부하면서 정리한 내용입니다.
출처 : https://wikidocs.net/book/4542
플라스크는 마이크로 웹 프레임워크이다. 마이크로는 프레임워크를 간결하게 유지하고 확장할 수 있도록 만들었다는 뜻이다.
간결하다?
파일 하나로 구성된 짧은 코드만으로도 완벽하게 동작하는 웹 프로그램을 만들 수 있다.
확장성 있는 설계?
플라스크에는 form과 database를 처리하는 기능이 없다. form이란 웹 프로그래밍의 기술 중 하나로 클라이언트가 정보를 입력, 선택하고 웹 서버 등의 form을 처리하는 에이전트로 제출하기 위한 기구이다. 덩치가 큰 프레임 워크인 장고에는 이 form 기능과 database 기능이 있다.
플라스크는 확장 모듈이라는 것을 사용하여 없는 기능들을 보완한다. = 프로젝트의 무게가 가볍다는 것. 필요에 따라 확장 모듈을 포함해 가며 개발 가능하다.
파이썬 프로젝트를 진행할 때 독립된 환경을 만들어주는 도구이다. 각 프로젝트가 다른 버전의 파이썬을 요구할 경우 하나의 데스크톱 안에 독립된 가상 환경을 여러 개 만들 수 있다.
[파이썬 가상 환경 사용해 보기]
1. 가상 환경 디렉토리 생성
cmd를 열고 C:\venvs라는 디렉토리 생성
C:\Users\pahkey> cd \
C:\> mkdir venvs
C:\> cd venvs
모든 가상환경은 이제 venvs 디렉토리 안에 만들어진다.
C:\venvs> python -m venv myproject
파이썬 모듈 중 venv라는 모듈을 사용한다.
C:\venvs> cd C:\venvs\myproject\Scripts
C:\venvs\myproject\Scripts> activate
(myproject) C:\venvs\myproject\Scripts>
C:\ 왼쪽에 (myproject)라는 프롬프트를 확인할 수 있다. 현재 진입한 가상 환경을 의미한다.
(myproject) C:\venvs\myproject\Scripts> deactivate
C:\venvs\myproject\Scripts>
deactivate라는 명령을 실행한다. 어느 위치에서 해도 상관 없다.
앞서 만든 myproject 가상 환경에 플라스크를 설치한다.
myproject 가상 환경에 진입한 상태에서 pip install Flask 명령을 입력하여 플라스크를 설치한다.
설치가 잘 되었지만 혹시 다음과 같은 경고 문구가 보인 경우 pip가 최신 버전이 아니라는 내용이다.
(myproject) C:\venvs\myproject\Scripts> pip install Flask
Collecting Flask
Using cached
(... 생략 ...)
Installing collected packages: click, Werkzeug, MarkupSafe, Jinja2, itsdangerous,
Flask
Successfully installed Flask-1.1.2 Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1
click-7.1.2 itsdangerous-1.1.0
WARNING: You are using pip version 20.1.1; however, version 20.2.2 is available.
You should consider upgrading via the ‘c:\venvs\myproject\scripts\python.exe -m pip
install --upgrade pip’ command.
최신 버전으로 설치하기 위해 경고 메시지에 따라 다음 명령을 입력해 pip를 최신 버전으로 설치한다.
(myproject) C:\venvs\myproject\Scripts> python -m pip install --upgrade pip
플라스크에서 프로젝트는 하나의 웹 사이트이다. 플라스크 프로젝트 안에는 보통 한 개의 플라스크 애플리케이션이 존재한다.
플라스크 프로젝트는 여러 개가 될 수 있으니 프로젝트 루트 디렉토리를 생성해야 한다.
C:\> mkdir projects
C:\> cd projects
C:\projects> C:\venvs\myproject\Scripts\activate
(myproject) C:\projects> mkdir myproject
(myproject) C:\projects> cd myproject
(myproject) C:\projects\myproject>
매번 cmd를 실행하여 가상 환경에 진입하지 않고 한번에 수행할 수 있는 배치 파일을 만들어 간단히 진입할 수 있다.
@echo off
cd c:/projects/myproject
c:/venvs/myproject/scripts/activate
윈도우 확장자 .cmd가 붙은 파일을 배치(batch) 파일이라고 한다. 배치 파일은 여러 명령어를 한번에 실행해 주는 파일이다.
배치 파일 위치를 PATH 환경 변수에 추가
이 배치 파일이 cmd 어느 곳에서나 수행될 수 있도록 C:\venvs 디렉토리를 시스템의 환경 변수 PATH에 추가해야 한다.
- <Win + R>키 입력 후 sysdm.cpl 명령 입력
- 고급 - 환경 변수
- Path 선택 후 편집 - 새로 만들기 - C:\venvs 디렉토리 추가
PATH 환경 변수 확인
cmd를 재시작 후 set path 명령을 실행하여 변경된 환경 변수 PATH의 C:\venvs 있는지 확인
C:\Users\pahkey> myproject
(myproject) C:\projects\myproject>
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_pybo():
return 'Hello, Pybo!'
app = Flask(__name__)은 플라스크 애플리케이션을 생성해주고, 이 코드에서 __name__이라는 변수에는 모듈명이 담긴다. 이 파일은 pybo.py이므로 __name__변수에는 'pybo'라는 문자열이 담기는 것이다.
@app.route는 특정 주소에 접속하면 바로 다음 줄에 있는 함수를 호출하는 플라스크의 데코레이터다.
데코레이터 : 기존 함수 변경 없이 추가 기능을 덧붙일 수 있게 해주는 함수
(myproject) c:\projects\myproject>flask run
‘플라스크 애플리케이션을 찾을 수 없다’는 오류 메시지가 발생
플라스크 서버를 실행하려면 반드시 FLASK_APP이라는 환경 변수에 플라스크 애플리케이션을 지정해 주어야 한다. 플라스크는 FLASK_APP 환경 변수가 지정되지 않은 경우 자동으로 app.py를 기본 애플리케이션으로 인식한다.
(myproject) c:\projects\myproject>set FLASK_APP=pybo
경고 메시지가 나타난 이유는 플라스크 서버가 운영 환경으로 실행되었기 때문이다. 플라스크는 서버를 실행할 때 아무런 설정을 하지 않았다면 기본 운영 환경으로 실행한다.
(myproject) c:\projects\myproject>set FLASK_ENV=development
(myproject) c:\projects\myproject>flask run
마지막 문구를 보면 플라스크 서버가 127.0.0.1:5000으로 실행되었다고 나온다. 웹에서 해당 주소에 접속해본다. (대신 locallhost:5000으로 접속해도 가능)
디버그 모드 활성화 : 플라스크 실행 환경을 개발 환경으로 설정하면 디버그 모드가 활성화된다. 디버그 모드는 오류가 발생하면 디버깅 결과 메시지를 웹 브라우저에 출력해주고, 서버 실행중 프로그램을 변경하면 서버가 자동으로 다시 시작하여 변경된 내용을 적용해준다.
전에 작성해둔 myproject.cmd 파일을 열고 코드를 추가해주자
@echo off
cd c:/projects/myproject
set FLASK_APP=pybo
set FLASK_ENV=development
c:/venvs/myproject/scripts/activate