GO · 패턴
설정 관리 패턴
환경 변수, 파일, 기본값을 우선순위에 따라 병합하는 설정 관리 패턴입니다.
패턴고급configenvironmenttwelve-factorvalidation
핵심 설명
환경 변수, 파일, 기본값을 우선순위에 따라 병합하는 설정 관리 패턴입니다.
Go code
package main
import (
"fmt"
"os"
"strconv"
)
type Config struct {
Host string
Port int
Debug bool
DBSource string
}
func LoadConfig() *Config {
cfg := &Config{
Host: "localhost",
Port: 8080,
Debug: false,
DBSource: "postgres://localhost/app",
}
// 환경 변수로 오버라이드
if v := os.Getenv("APP_HOST"); v != "" { cfg.Host = v }
if v := os.Getenv("APP_PORT"); v != "" {
if p, err := strconv.Atoi(v); err == nil { cfg.Port = p }
}
if v := os.Getenv("APP_DEBUG"); v == "true" { cfg.Debug = true }
if v := os.Getenv("DATABASE_URL"); v != "" { cfg.DBSource = v }
return cfg
}
func (c *Config) Validate() error {
if c.Port < 1 || c.Port > 65535 {
return fmt.Errorf("유효하지 않은 포트: %d", c.Port)
}
if c.DBSource == "" {
return fmt.Errorf("데이터베이스 URL 필수")
}
return nil
}
func main() {
cfg := LoadConfig()
if err := cfg.Validate(); err != nil {
fmt.Println("설정 에러:", err)
return
}
fmt.Printf("설정: %+v\n", *cfg)
}학습 팁
설정 우선순위: 환경 변수 > 설정 파일 > 기본값. 12-Factor App 원칙에 따라 환경 변수를 최우선으로 사용하세요.
주의할 점
비밀 정보(DB 비밀번호, API 키)를 코드나 설정 파일에 하드코딩하지 마세요. 환경 변수나 시크릿 매니저를 사용하세요.
자주 묻는 질문
설정 관리 패턴란 무엇인가요?
환경 변수, 파일, 기본값을 우선순위에 따라 병합하는 설정 관리 패턴입니다.
설정 관리 패턴 학습 시 주의할 점은 무엇인가요?
비밀 정보(DB 비밀번호, API 키)를 코드나 설정 파일에 하드코딩하지 마세요. 환경 변수나 시크릿 매니저를 사용하세요.