본문 바로가기
코딩 프로그래밍/PYTHON 파이썬

FastAPI 설정 관리, main.py 폴더 구조

by 프즈 2023. 3. 28.
반응형

main.py 파일 하나로 만들기에는 코드 양이 많이 질 수 있어서 분리하는 것이 좋습니다. 물론 간단하게 데모 사이트 하나 만드는 경우에는 main.py 파일 하나로 해도 문제없겠지만 환경이 다양해지고 연동하는 것들이 많이 지면 분리하고 싶어 져요.

환경을 관리하기 위해서 config파일을 만들겠습니다. app 폴더 core 폴더 common 폴더를 순서대로 만들고 거기에 config.py 파일을 만들어서 설정과 관련된 내용을 넣겠습니다. 각 폴더에는 touch 명령어로 __init__.py 파일을 만들어주세요.

app/core/common/config.py

from dataclasses import dataclass
from os import path, environ
from typing import List

## apiserver path
base_dir = path.dirname(path.dirname(path.dirname(path.dirname(path.abspath(__file__)))))

@dataclass
class Config:
    """
    Base Configuration
    """    
    DB_URL: str = environ.get("DB_URL", "mysql+pymysql://test@localhost/test?charset=utf8mb4")


@dataclass
class LocalConfig(Config):    
    DEBUG: bool = True


@dataclass
class ProdConfig(Config):
    TRUSTED_HOSTS = ["*"]
    ALLOW_SITE = ["*"]


@dataclass
class TestConfig(Config):
    DB_URL: str = "mysql+pymysql://test@localhost/test?charset=utf8mb4"


def load_conf():
    """
    load conf
    :return:
    """
    config = dict(prod=ProdConfig, local=LocalConfig, test=TestConfig)
    return config[environ.get("API_ENV", "local")]()

main.py 파일을 새로 생긴 app으로 옮기고 내용을 변경해 보겠습니다. create_app을 만들어서 서버가 시작하면서 필요한 부분들이 실행될 수 있도록 변경했습니다.

from fastapi import FastAPI

def create_app():

    app = FastAPI()

    return app

app = create_app()

DB 연동할 수 있도록 미리 DB를 설치해 주세요. 이제 main.py 파일이 app 폴더 안으로 들어갔으니 실행하는 명령어를 조금 바꿔야 합니다. 

uvicorn app.main:app
반응형

댓글