PHpullh
학습 라이브러리/Go/설정 관리 패턴

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 키)를 코드나 설정 파일에 하드코딩하지 마세요. 환경 변수나 시크릿 매니저를 사용하세요.

Continue Learning

Go 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.