Files
Aislo/config/config_system.py
T

86 lines
6.3 KiB
Python

"""
config_system.py
백엔드 작동 제어 및 알고리즘 파라미터
모든 제어 변수는 여기서 관리. 코드 내 하드코딩 금지.
"""
import os
from dotenv import load_dotenv
load_dotenv()
os.environ["PYTHONUTF8"] = "1"
# ─────────────────────────────────────────────────────────────────────────
# 1. FastAPI 서버
# ─────────────────────────────────────────────────────────────────────────
SERVER_HOST = os.getenv("SERVER_HOST", "0.0.0.0")
SERVER_PORT = int(os.getenv("SERVER_PORT", "8000"))
DEBUG = os.getenv("DEBUG", "False").lower() == "true"
# 정적 파일 서빙 (프론트엔드 빌드 결과)
STATIC_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "node_modules", ".build")
STATIC_URL = "/static"
# ─────────────────────────────────────────────────────────────────────────
# 2. 로깅
# ─────────────────────────────────────────────────────────────────────────
LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO")
# ─────────────────────────────────────────────────────────────────────────
# 3. 데이터베이스 (PostgreSQL + PostGIS)
# ─────────────────────────────────────────────────────────────────────────
DB_HOST = os.getenv("DB_HOST", "localhost")
DB_PORT = int(os.getenv("DB_PORT", "5432"))
DB_NAME = os.getenv("DB_NAME", "forest_road")
DB_USER = os.getenv("DB_USER", "postgres")
DB_PASSWORD = os.getenv("DB_PASSWORD", "postgres")
# asyncpg 연결 풀 설정
DB_POOL_MIN = int(os.getenv("DB_POOL_MIN", "5"))
DB_POOL_MAX = int(os.getenv("DB_POOL_MAX", "20"))
# ─────────────────────────────────────────────────────────────────────────
# 4. 파일 업로드 제한
# ─────────────────────────────────────────────────────────────────────────
UPLOAD_MAX_MB = int(os.getenv("UPLOAD_MAX_MB", "500"))
UPLOAD_ALLOWED_EXT = [".las", ".laz", ".dem", ".tif", ".tiff", ".tfw", ".prj", ".dxf", ".dwg"]
# ─────────────────────────────────────────────────────────────────────────
# 5. 지형 분석 알고리즘 파라미터
# ─────────────────────────────────────────────────────────────────────────
# Trimesh 메쉬 생성
MESH_GRID_SIZE = float(os.getenv("MESH_GRID_SIZE", "1.0")) # 미터 단위
MESH_SMOOTHING_ITERATIONS = int(os.getenv("MESH_SMOOTHING_ITERATIONS", "0"))
# PostGIS 공간 연산
SPATIAL_INDEX_ENABLED = os.getenv("SPATIAL_INDEX_ENABLED", "True").lower() == "true"
# ─────────────────────────────────────────────────────────────────────────
# 6. 저장소 경로
# ─────────────────────────────────────────────────────────────────────────
STORAGE_BASE_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "storage")
# 프로젝트별 저장 구조: storage/[고객사]/[사용자]/[프로젝트ID]/
def get_project_storage_path(company: str, user: str, project_id: str) -> str:
"""프로젝트 저장 경로 생성 (자동 생성)"""
path = os.path.join(STORAGE_BASE_DIR, "projects", company, user, project_id)
os.makedirs(path, exist_ok=True)
return path
# ─────────────────────────────────────────────────────────────────────────
# 7. 인증 (JWT)
# ─────────────────────────────────────────────────────────────────────────
JWT_SECRET_KEY = os.getenv("JWT_SECRET_KEY", "your-secret-key-change-in-production")
JWT_ALGORITHM = "HS256"
JWT_EXPIRE_MINUTES = int(os.getenv("JWT_EXPIRE_MINUTES", "1440")) # 24시간
# ─────────────────────────────────────────────────────────────────────────
# 8. CORS (프론트엔드 도메인)
# ─────────────────────────────────────────────────────────────────────────
CORS_ORIGINS = os.getenv("CORS_ORIGINS", "http://localhost:5173,http://localhost:8000").split(",")
# ─────────────────────────────────────────────────────────────────────────
# 9. 환경 정보
# ─────────────────────────────────────────────────────────────────────────
ENVIRONMENT = os.getenv("ENVIRONMENT", "development") # development, staging, production