package config import ( "log" "os" "strconv" "github.com/joho/godotenv" ) // Config 애플리케이션 전역 설정 type Config struct { Env string ServerPort string AppKey string AppSecret string BaseURL string DartAPIKey string NaverClientID string NaverClientSecret string GroqAPIKey string // Groq API 키 GroqModel string // Groq 모델명 CacheTTLSeconds int WSMaxClients int WSPollIntervalMS int AdminID string // 관리자 ID AdminPassword string // 관리자 비밀번호 } var App *Config // Load .env 파일을 읽어 설정을 초기화 func Load() { // 개발 환경에서만 .env 파일 로딩 (.env 없어도 오류 무시) if err := godotenv.Load(); err != nil { log.Println("경고: .env 파일이 없습니다. 환경변수를 직접 설정해야 합니다.") } App = &Config{ Env: getEnv("APP_ENV", "development"), ServerPort: getEnv("SERVER_PORT", "8080"), AppKey: getEnv("KIWOOM_APP_KEY", ""), AppSecret: getEnv("KIWOOM_APP_SECRET", ""), BaseURL: getEnv("KIWOOM_BASE_URL", "https://openapi.koreainvestment.com:9443"), DartAPIKey: getEnv("DART_API_KEY", ""), NaverClientID: getEnv("NAVER_CLIENT_ID", ""), NaverClientSecret: getEnv("NAVER_CLIENT_SECRET", ""), GroqAPIKey: getEnv("GROQ_API_KEY", ""), GroqModel: getEnv("GROQ_MODEL", "llama-3.3-70b-versatile"), CacheTTLSeconds: getEnvInt("CACHE_TTL_SECONDS", 1), WSMaxClients: getEnvInt("WS_MAX_CLIENTS", 100), WSPollIntervalMS: getEnvInt("WS_POLL_INTERVAL_MS", 1000), AdminID: getEnv("ADMIN_ID", "admin"), AdminPassword: getEnv("ADMIN_PASSWORD", ""), } } // IsDevelopment 개발 환경 여부 반환 func (c *Config) IsDevelopment() bool { return c.Env == "development" } func getEnv(key, defaultVal string) string { if val := os.Getenv(key); val != "" { return val } return defaultVal } func getEnvInt(key string, defaultVal int) int { if val := os.Getenv(key); val != "" { if n, err := strconv.Atoi(val); err == nil { return n } } return defaultVal }