일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- X윈도우
- Binary Search
- Reference Type
- literal
- spring
- Entity
- 셀레니움
- selenium
- BFS
- Java
- Unity
- 백준
- Operator
- Polymolphism
- preprocessing
- Entity Set
- X.org
- Inheritance
- systemd
- 리눅스 마스터 1급
- dbms
- OOP
- 리눅스
- Class
- descriptive statistics
- External Scheme
- Mac
- 자바
- Physical Scheme
- python
- Today
- Total
Byeol Lo
Flask - 3. Tutorial Application Setup 본문
지금까지 파일 방식으로 서버 어플리케이션을 실행했다면 이번엔 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 |