본문 바로가기

Python

Flask 3 : 어플리케이션 설치

2019년 여름 현재 시중에 나와있는 Flask 책은 추천하기에 마땅치 않아, Flask 공식 웹사이트에서 제공하는 튜토리얼로 공부하시기를 권해드립니다. 하지만, 공식 웹사이트는 영어라는거...

그래서 Flask 공식 웹사이트 튜토리얼에 대한 번역을 올립니다. 원문의 흐름에 따라 번역했고, 이해를 돕기 위해 직역보다는 의역을 합니다.

원문 : https://flask.palletsprojects.com/en/1.1.x/tutorial/


어플리케이션 설치

Flask 어플리케이션은 Flask 클래스의 인스턴스 형태로 만들어집니다. 따라서 어플리케이션과 관련된 설정, URL 등은 클래스 내에 등록되게 됩니다.

Flask 어플리케이션을 만드는 가장 직접적인 방법은 디폴트 코드에 직접 Flask 인스턴스를 만드는 것이죠. 이러한 방법이 대체로 간단하고 유용하긴 하지만, 프로젝트가 커진다면 얘기가 달라집니다.

그래서 이 튜토리얼에서는 디폴트 코드에 직접 작성하는 대신, 별도의 내부 모듈로 만들겁니다. 이러한 내부 모듈을 어플리케이션 팩토리라고 부릅니다. 어플리케이션의 설정, 등록 등 각종 기능들은 내부 모듈 안에서 실행되고 어플리케이션에 결과값을 돌려줍니다.

어플리케이션 팩토리

이제 코딩을 시작해봅시다! flaskr 디렉토리를 만들고, __init__.py 파일을 추가해줍니다. __init__.py 는 두 가지 기능을 하는데, 하나는 어플리케이션 팩토리를 담는 것이고, 다른 하나는 파이썬 엔진이 flaskr 디렉토리를 하나의 팩키지처럼 인식하도록 안내합니다. 

$ mkdir flaskr
flaskr/__init__.py
import os

from flask import Flask


def create_app(test_config=None):
    # create and configure the app
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY='dev',
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )

    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.from_mapping(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # a simple page that says hello
    @app.route('/hello')
    def hello():
        return 'Hello, World!'

    return app

create_app 함수가 어플리케이션 팩토리 입니다.

  • 1. app = Flask(__name__, instance_relative_config=True) 는 Flask 인스턴스를 생성합니다:
      •  __name__ 은 현재 파이썬 모듈의 이름 입니다. 앱(어플리케이션)은 실행 경로를 판단하기 위해 해당 클래스를 호출한 모듈이 어딘지 알아야 합니다. __name__ 이라는 표현 방식은 현재 모듈을 지칭하는 편한 방법이죠.
      •  instance_relative_config=True 는 앱에게 설정파일은 인스턴스 폴더에 있다라고 알려주는 역할을 합니다. 인스턴스 폴더는 flaskr 팩키지의 외부에 위치하고 있고, 외부사용자에게 노출되지 않아야 할 정보(설정값, DB파일 등)를 담고 있습니다.
  • app.config.from_mapping() 는 앱의 기본 설정을 세팅합니다:
      • SECRET_KEY 는 Flask 내에서 데이터 보안을 위해 사용합니다. 개발 중에는 디버깅 등 편의를 위해 'dev' 로 설정해놓고 진행하는 것이 편하지만, 실 가동 환경에서는 꼭 랜덤값으로 엎어써줘야 합니다.
      • DATABASE 는 SQLite 데이터베이스 파일의 경로 입니다. 여기에서는 flaskr 아래 sqlite 에 저장했네요. 데이터베이스와 관련된 내용은 다음 섹션에서 자세히 배워보아요.
  • app.config.from_pyfile() 는 기본 설정값을 인스턴스 폴더 내에 있는 config.py 에 정의된 값으로 엎어쓰는 부분입니다. 
      • test_config 또한 팩토리로 전달되어 설정값으로 쓰일 수 있습니다. 이는 튜토리얼 후반부에서 테스트용 설정값과 개발용 설정값을 분리하기 위해 만들어졌습니다.
  • os.makedirs() 는 app.instance_path 가 존재하는지 확인해서 없으면 만드는 부분입니다. Flask는 인스턴스 폴더를 자동으로 생성하지 않기 때문에 프로그래머가 만들어줘야 합니다.
  • @app.route() 는 Flask가 정상 작동하는지 확인하기 위한 그리팅 화면입니다. URL 뒤에 /hello 라는 경로를 붙여 호출했을 때 'Hello, World!' 를 출력하는 간단한 페이지 입니다.

어플리케이션 실행

이제 flask 명령어를 이용해 앱을 실행시켜봅시다. 터미널을 열어서, Flask에게 앱의 위치를 알려주고, development 모드로 실행하도록 지시한 후 앱을 실행시킵니다. flask-tutorial 디렉토리 최상위 위치에서 실행시켜야 합니다. flaskr 팩키지 안에서 실행시키지 않도록 주의하세요.

Development 모드는 웹페이지에서 에러가 발생하는 등 이슈가 있을때 디버깅을 위한 자료를 터미널에 출력해줍니다. 

Linux and Mac:

$ export FLASK_APP=flaskr
$ export FLASK_ENV=development
$ flask run

Windows cmd, export를 set으로 바꾸세요:

> set FLASK_APP=flaskr
> set FLASK_ENV=development
> flask run

Windows PowerShell, export를 $env:으로 바꾸세요:

> $env:FLASK_APP = "flaskr"
> $env:FLASK_ENV = "development"
> flask run

실행을 시키면 터미널에 아래 내용이 뜹니다:

* Serving Flask app "flaskr"
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 855-212-761

브라우저를 열어 http://127.0.0.1:5000/hello 에 접속하면 “Hello, World!” 를 확인해보세요. 이제 Flaskr 앱이 실행되고 있습니다.

다음 : Define and Access the Database.


'Python' 카테고리의 다른 글

Flask 6 : 템플릿  (0) 2019.09.06
Flask 5 : 블루프린트와 뷰  (0) 2019.08.28
Flask 4 : DB 구축  (0) 2019.08.28
Flask 3 : 어플리케이션 설치  (0) 2019.08.28
Flask 2 : 프로젝트 구조  (0) 2019.08.28
Flask 1 : Tutorial 소개  (1) 2019.08.27