flask-jinja-sqlalchemy 가 플라스크의 기본 구조이고 필요에 따라서 DB 나 front 를 바꿀 수 있다. 이번 글에서는 백엔드를 어떤식으로 모듈들을 구성해 두는지 확인해보도록 하겠다.
app, main
app 모듈은 app.run 으로 해당 서버를 실행하는 역할을 수행한다. 또 --set-config 같은 argument 를 세팅해두는 역할, 필요한 thread 를 돌리는 역할 등을 수행한다. main 모듈은 모든 요청의 사전 처리인 @main.before_request 를 사용해서 규정에 맞는 요청이 들어왔는지를 확인한다. 또한 이 before_request 에서는 csrf_token이 유효한지, 수많은 요청들의 proxy 기능, session 만기 설정, locale 및 ORM 에 사용될 DB 설정 등 마치 spring 의 dispatcherservlet 같은 역할을 수행한다. 또한 후에 front 편에서 다룰 formfor 등을 정의해두기도 한다. 이외에 main_scan_task 나 main_dashboard 같이 프록시한 요청의 endpoint 를 따로 모듈화해서 만들어두는 편이다.
model, record
model 모듈에는 DB 의 table 정보와 attribute 정보가 들어간다. 해당 모듈을 기반으로 ORM 을 진행하고, DB schema 를 초기에 선언해주고 업데이트를 하는 역할을 한다(init_db, migrate_db). table 은 class 에 매핑되고, 이 각각의 클래스에는 validate 라는 함수가 들어갈 수 있는데, 해당 함수는 DB 와 해당 객체의 상태가 동기화가 잘 되어서 유효한 정보인지를 확인하는 역할을 한다. Record 모듈은 이 역시 ORM 에 사용되는 것으로 model 모듈의 각 table 클래스가 상속을 받아 사용한다. 여기서 회사내의 규칙을 설정(이를테면 class User 로 설정된 테이블을 실제 DB 에는 Users 로 설정을 하기)하고 validate 를 해주는 역할을 한다.
config, common, i18n
config 는 간단하게 해당 플라스크 서버의 중요한 flag 들을 저장해두는 곳이다. 이곳에는 버전정보, 포트, DB URL, local, key_path, ca_cert 등의 정보가 들어간다. common 모듈에는 필요하지만 어디엔가 속하기 힘든 친구들이 모여있는 잡동사니 같은 느낌이다. i18n 모듈은 locales/en.yml 과 함께 사용되며 before_request 단계에서 언어를 설정한다. 여기서는 MainBlueprint 와 같은 것을 사용해 url 에서 ko, en 같은 요청되는 언어를 인식해서 적절하게 언어를 세팅해주는 역할을 한다.
기본적인 모듈만을 설명했고 필요에 따라서 더한 모듈이 추가될 수 있다. 다음에는 프론트와 패키징 구조에 대해서도 설명해보도록 하겠다.
'개발' 카테고리의 다른 글
[wix] flask 프로젝트 윈도우 패키징 (1) | 2024.09.13 |
---|---|
[Flask] Frontend 템플릿 Jinja 구조 (0) | 2024.07.25 |
[WIX] Major upgrade, Minor upgrade 조건과 차이 (2) | 2024.07.24 |
[Window] win32api, Microsoft installer (0) | 2023.10.12 |
[개발] Lock 과 동시성(python) (0) | 2023.09.18 |