Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- kotlin querydsl
- 오블완
- 코틀린 코루틴의 정석
- kotlin
- Linux
- AWS EKS
- APM
- 공부
- CloudWatch
- Pinpoint
- CKA
- Java
- minikube
- 정보처리기사 실기
- AI
- 정보처리기사 실기 기출문제
- Elasticsearch
- MySQL
- 기록으로 실력을 쌓자
- 티스토리챌린지
- 정보처리기사실기 기출문제
- kotlin coroutine
- aws
- kotlin spring
- Kubernetes
- IntelliJ
- PETERICA
- Spring
- mysql 튜닝
- CKA 기출문제
Archives
- Today
- Total
피터의 개발이야기
[GO] Golang에서 Viper 사용하기: 설정 관리 도구 본문
반응형
ㅁ 들어가며
Viper는 Golang 애플리케이션에서 설정 정보를 관리하는 라이브러리이다. 이 글에서는 다양한 파일 형식을 지원하고 동적으로 값을 구성할 수 있는 Viper의 사용 방법을 정리하였다.
ㅁViper 설치하기
go get github.com/spf13/viper
ㅁ 기본 사용법
구성 파일 설정
viper.SetConfigName("config") // 확장자를 제외한 구성 파일 이름
viper.SetConfigType("yaml") // 구성 파일 형식 지정 (yaml, json, toml 등)
viper.AddConfigPath("/etc/appname/") // 구성 파일을 찾을 경로 추가
viper.AddConfigPath("$HOME/.appname") // 여러 경로 추가 가능
viper.AddConfigPath(".") // 현재 작업 디렉토리에서도 찾기
err := viper.ReadInConfig() // 구성 파일 읽기
if err != nil {
panic(fmt.Errorf("구성 파일 읽기 오류: %s", err))
}
기본값 설정
viper.SetDefault("ContentDir", "content")
viper.SetDefault("LayoutDir", "layouts")
viper.SetDefault("Taxonomies", map[string]string{"tag": "tags", "category": "categories"})
값 읽기
viper.GetString("ContentDir")
viper.GetInt("Port")
viper.GetBool("Debug")
ㅁ 고급 기능
환경 변수 사용
viper.AutomaticEnv() // 환경 변수 자동 읽기
viper.SetEnvPrefix("MYAPP") // 환경 변수 접두사 설정
구성 파일 감시 및 실시간 재로드
viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("구성 파일이 변경되었습니다:", e.Name)
})
ㅇ 구성 파일의 변경을 감지하고 자동으로 재로드할 수 있다.
구성 파일 쓰기
viper.WriteConfig() // 현재 구성을 파일로 저장
viper.SafeWriteConfig() // 파일이 존재하지 않을 경우에만 저장
viper.WriteConfigAs("/path/to/my/.config") // 특정 경로에 저장
ㅇ 새로운 구성을 파일로 저장할 수 있다.
ㅁ 샘플 코드 작성
package main
import (
"fmt"
"github.com/spf13/viper"
"os"
)
func main() {
fmt.Println("Hello viper")
err := loadConfig()
if err != nil {
fmt.Printf("Error loading config: %v\n", err)
return
}
fmt.Printf("Server Port: %s\n", viper.GetInt("server_port"))
fmt.Printf("DB Host: %s\n", viper.Get("db_host"))
fmt.Printf("DB Port: %s\n", viper.Get("db_port"))
}
func loadConfig() (err error) {
// 환경변수에서 phase 값을 가져옵니다
phase := os.Getenv("APP_PHASE")
if phase == "" {
phase = "dev" // 기본값 설정
}
// 설정 파일 이름을 동적으로 생성합니다
viper.SetConfigName(fmt.Sprintf("application_%s", phase))
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
if err := viper.ReadInConfig(); err != nil {
return fmt.Errorf("failed to read config file: %w", err)
}
return nil
}
ㅇ main.go 작성
server_port: 8080
db_host: "DBHost"
db_port: "DBPort"
ㅇ application_dev.yaml 작성
ㅁ 마무리
Viper는 Golang 애플리케이션의 설정 관리를 편리하게 해준다. 다양한 파일 형식을 지원하고, 환경 변수 통합, 실시간 구성 변경 감지 등 다양한 기능을 통해 개발을 편리하게 한다.
ㅁ 함께 보면 좋은 사이트
ㅇ [golang 1% 이해하기] viper | dotenv 환경 변수값을 읽는 기능 도입 하기 #1 Config 전역 변수를 활용하기
ㅇ go cobra, viper 사용 시 주의점 ( 인자 / 환경변수 )
ㅇ 고 (Golang) | 이것만 알면 나도 개발 전문가 | Gin 을 이용한 CRUD RESTful API 개발 Part-2
ㄴ gin 튜토리얼 샘플 코드 발견
반응형
'Programming > GO' 카테고리의 다른 글
[GO] Intel Xeon 프로세서 빌드 방법, GOOS, GOARCH 설정 (0) | 2024.12.06 |
---|---|
[GO] Golang에서 http.Client를 이용한 프록시 설정방법 (0) | 2024.12.05 |
[GO] GO 언어란? 기본 문법 (2) | 2024.11.19 |
[GO] Goroutine과 Coroutine의 차이점 (0) | 2024.09.13 |
[GO] Go 언어의 장점 (0) | 2024.09.12 |
Comments