""" 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