Notice
Recent Posts
Recent Comments
05-21 07:17
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Flask - 3. Tutorial Application Setup 본문

BackEnd/Flask

Flask - 3. Tutorial Application Setup

알 수 없는 사용자 2024. 2. 12. 12:54

지금까지 파일 방식으로 서버 어플리케이션을 실행했다면 이번엔 directory를 통해 실행시켜보자. 이를 통해 얻을 수 있는 장점은 다음과 같다.

  • 모듈 분리 - 각각의 모듈이 하는 일이 뚜렷해짐. 이렇게 하면 Flask application instance를 실행시키는 모듈을 따로 만든 샘이 되기 때문
  • 프로젝트 확장성 - 위와 비슷한 맥락이지만, 모듈화하여 관리하면 확장성이 좋아짐. 관리가 쉬우니까.

 

import os

from flask import Flask

def create_app(test_config=None):
    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:
        app.config.from_pyfile('config.py', silent=True)
    else:
        app.config.from_mapping(test_config)

    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    @app.route('/hello')
    def hello():
        return 'Hello, World!'

    return app

하나하나 해석해보자.

 해당 create_app 함수는 말 그대로 application instance 하나를 만드는 것이다. 여기서 인자로 instance_relative_config가 있는데  안에는 Flask 객체를 생성하는데, configuration이 구ㅅ WSGI application을 상속하는 애임을 명심하자. 이 놈이 바로 HTTP의 프로토콜 형태로 네트워크에 보내는 놈이다.

 다시 본론으로 돌아와서 app이라는 변수에 해당 application instance를 저장하고, app.config.from_mapping()을 통해 정보를 가져와 app의 configuration에 적용시키는 것이다. 서버 자체는 컴퓨터 자원을 사용하는데 해당 자원들이 어떻게 이용이 될건지 방법들을 넣는 곳이라고 보면된다. 가령 마크에서는 맵을 만들 때 시드, 난이도 등을 설정하곤 할 것이다. 그게 이거다. 여기서는 암호화에 사용될 SECRET_KEY 와 사용할 DATABASE를 지정해준다.

 SECRET_KEY는 개발 중에는 편리한 값을 제공하기 위해 'dev'로 설정이 되지만, 실제 배포시에는 무작위로 생성된 값으로 재설정을 시켜줘야 한다. 예를 들면 다음과 같다.

import secrets

random_secret_key = secrets.token_hex(32)

app.config['SECRET_KEY'] = random_secret_key

배포할때는 이렇게 무작위로 생성된 값을 통해서 각 배포마다 고유한 SECRET_KEY가 생성되어 보안이 강화된다.

 DATABASE 인자는 SQLite 데이터베이스 파일이 저장되어질 경로인데, os 모듈에서는 편리한 파일 경로를 생성시켜주는 함수를  쓸 . 수있기 때문에 app.instance_path, 그리고 해당 파일 "flaskr.sqlite"에 접근하게 된다. 그 후에는 test_config 가 만약에 None이라면 원래 적용되어 있던 config를 불러오고, 아니면 test를 위한 config를 불러온다. 그리고 app.instance_path의 경로에 폴더를 만들고, 만드는게 실패했다면 운영체제의 폴더 만드는 권한이 없기 때문에 OSError 가 뜨게 된다. 그 후에는 hello 의 endpoint에 대한 view를 생성해서 반환해준다. 이제 서비스를 켜주고, 127.0.0.1:5000/hello로 접속해주면 된다.

flask --app flaskr run

 

'BackEnd > Flask' 카테고리의 다른 글

Flask - 5. Tutorial Blueprint and View  (1) 2024.02.14
Flask - 4. Define and Access the Database  (1) 2024.02.12
Flask - 2. Tutorial Project Layout  (0) 2024.02.08
Flask - 1. Quick start  (1) 2024.02.08
Flask - 0. 환경 세팅  (1) 2024.02.06
Comments