# app/config/settings.py import os from typing import Optional class Settings: """환경 변수 기반 설정 클래스""" # 애플리케이션 메타데이터 APP_TITLE = os.getenv("APP_TITLE", "음식점 Vector DB 구축 서비스") APP_VERSION = os.getenv("APP_VERSION", "1.0.0") APP_DESCRIPTION = os.getenv("APP_DESCRIPTION", "소상공인을 위한 AI 기반 경쟁업체 분석 및 액션 추천 시스템") # 서버 설정 HOST = os.getenv("HOST", "0.0.0.0") PORT = int(os.getenv("PORT", "8000")) LOG_LEVEL = os.getenv("LOG_LEVEL", "info") # Restaurant API 설정 RESTAURANT_API_HOST = os.getenv("RESTAURANT_API_HOST", "0.0.0.0") RESTAURANT_API_PORT = os.getenv("RESTAURANT_API_PORT", "18000") @property def RESTAURANT_API_URL(self) -> str: return f"http://{self.RESTAURANT_API_HOST}:{self.RESTAURANT_API_PORT}" # Review API 설정 REVIEW_API_HOST = os.getenv("REVIEW_API_HOST", "0.0.0.0") REVIEW_API_PORT = os.getenv("REVIEW_API_PORT", "19000") @property def REVIEW_API_URL(self) -> str: return f"http://{self.REVIEW_API_HOST}:{self.REVIEW_API_PORT}" # Claude API 설정 CLAUDE_API_KEY = os.getenv("CLAUDE_API_KEY", "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") CLAUDE_MODEL = os.getenv("CLAUDE_MODEL", "claude-sonnet-4-20250514") # Vector DB 설정 VECTOR_DB_PATH = os.getenv("VECTOR_DB_PATH", "./vectordb") VECTOR_DB_COLLECTION = os.getenv("VECTOR_DB_COLLECTION", "restaurant_reviews") EMBEDDING_MODEL = os.getenv("EMBEDDING_MODEL", "sentence-transformers/all-MiniLM-L6-v2") # 데이터 수집 설정 MAX_RESTAURANTS_PER_CATEGORY = int(os.getenv("MAX_RESTAURANTS_PER_CATEGORY", "50")) MAX_REVIEWS_PER_RESTAURANT = int(os.getenv("MAX_REVIEWS_PER_RESTAURANT", "100")) REQUEST_DELAY = float(os.getenv("REQUEST_DELAY", "0.1")) REQUEST_TIMEOUT = int(os.getenv("REQUEST_TIMEOUT", "600")) # 환경 감지 @property def IS_K8S_ENV(self) -> bool: """Kubernetes 환경인지 확인""" return ( os.getenv("KUBERNETES_SERVICE_HOST") is not None or self.RESTAURANT_API_HOST in ["restaurant-api-service", "kakao-review-api-service"] or self.REVIEW_API_HOST in ["restaurant-api-service", "kakao-review-api-service"] ) def get_restaurant_api_url(self) -> str: """환경에 따른 Restaurant API URL 반환""" if self.IS_K8S_ENV: host = "restaurant-api-service" port = "80" else: host = self.RESTAURANT_API_HOST port = self.RESTAURANT_API_PORT return f"http://{host}:{port}" def get_review_api_url(self) -> str: """환경에 따른 Review API URL 반환""" if self.IS_K8S_ENV: host = "kakao-review-api-service" port = "80" else: host = self.REVIEW_API_HOST port = self.REVIEW_API_PORT return f"http://{host}:{port}" # 설정 인스턴스 settings = Settings()