""" 설정 관리 모듈 환경 변수 및 애플리케이션 설정을 관리합니다. """ import os from pathlib import Path from typing import Optional from dotenv import load_dotenv # .env 파일 로드 load_dotenv() # 프로젝트 루트 디렉토리 PROJECT_ROOT = Path(__file__).parent.parent.parent class Config: """애플리케이션 설정 클래스""" # Flask 설정 SECRET_KEY: str = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production') # 데이터베이스 URI 설정 # PostgreSQL: postgresql://user:password@host:port/database # SQLite (기본값): sqlite:///instance/finance_analysis.db _database_url = os.getenv('DATABASE_URL', '') if _database_url and (_database_url.startswith('postgresql://') or _database_url.startswith('postgres://')): # PostgreSQL URL이 제공되면 사용 SQLALCHEMY_DATABASE_URI: str = _database_url else: # 기본값: SQLite 사용 if _database_url: # DATABASE_URL이 설정되었지만 PostgreSQL 형식이 아닌 경우 경고 import warnings warnings.warn(f"DATABASE_URL이 설정되었지만 PostgreSQL 형식이 아닙니다. SQLite를 사용합니다: {_database_url[:50]}...") SQLALCHEMY_DATABASE_URI: str = f'sqlite:///{PROJECT_ROOT / "instance" / "finance_analysis.db"}' SQLALCHEMY_TRACK_MODIFICATIONS: bool = False MAX_CONTENT_LENGTH: int = 100 * 1024 * 1024 # 100MB # Ollama 설정 OLLAMA_BASE_URL: str = os.getenv('OLLAMA_BASE_URL', 'http://localhost:11434') # 경로 설정 UPLOAD_FOLDER: Path = PROJECT_ROOT / 'uploads' VECTOR_DB_PATH: Path = PROJECT_ROOT / 'vector_db' KNOWLEDGE_GRAPH_PATH: Path = PROJECT_ROOT / 'knowledge_graphs' TEMPLATES_FOLDER: Path = PROJECT_ROOT / 'templates' STATIC_FOLDER: Path = PROJECT_ROOT / 'static' INSTANCE_FOLDER: Path = PROJECT_ROOT / 'instance' # 파일 확장자 설정 ALLOWED_EXTENSIONS: set[str] = {'txt', 'md', 'pdf', 'docx', 'epub'} # 임베딩 모델 설정 EMBEDDING_MODEL_NAME: str = os.getenv('EMBEDDING_MODEL_NAME', 'sentence-transformers/all-MiniLM-L6-v2') RERANKER_MODEL_NAME: str = os.getenv('RERANKER_MODEL_NAME', 'BAAI/bge-reranker-base') # Gemini API 설정 GEMINI_API_KEY: Optional[str] = os.getenv('GEMINI_API_KEY', None) @classmethod def ensure_directories(cls) -> None: """필수 디렉토리 생성""" cls.UPLOAD_FOLDER.mkdir(parents=True, exist_ok=True) cls.VECTOR_DB_PATH.mkdir(parents=True, exist_ok=True) cls.KNOWLEDGE_GRAPH_PATH.mkdir(parents=True, exist_ok=True) cls.STATIC_FOLDER.mkdir(parents=True, exist_ok=True) cls.INSTANCE_FOLDER.mkdir(parents=True, exist_ok=True) def get_config() -> Config: """설정 인스턴스 반환""" return Config