[golang 1% 이해하기] viper | dotenv 환경 변수값을 읽는 기능 도입 하기 #1 Config 전역 변수를 활용하기
🏃🏻 들어가며
이번 글에서는 viper 를 사용해서 dotenv 에 정의된 환경 변수를 읽어오는 방법에 대해서 정리해 보았습니다.
godotenv 라이브러리를 사용하는 방식과 mapstructure 를 사용해 Env 구조체(struct) 에 할당해서 사용하는 방법도 정리해놓았으니 도움이 되길 바랍니다.
node.js 에서는 개발을 진행하다보면 다양한 환경 변수값을 .env 파일에 작성하여 사용 합니다.
예를 들어, 서버 설정을 위한 server_host, server_port, 데이터베이스 설정을 위한 dsn, db_host, db_port, db_username, db_password 등 실제 값을 하드코딩으로 박아넣는 대신 dotenv 을 사용해 .env 파일에서 값을 불러와 사용 합니다.
go 에서는 이러한 기능을 지원하는 라이브러리로 viper, godotenv 가 있습니다.
정리하자면, 최종적으로는 3가지 내용을 얻어 가실 수 있습니다.
첫번째로는 viper 를 사용한 .env 값 가져오는 방식
두번째로는 viper 를 사용한 .env 값을 가져와 mapstructure 을 통해 Env 구조체(struct) 에 맵핑하여 사용하는 방식
세번째로는 godotenv 를 사용한 .env 값을 가져오는 방식
✅ Viper 설치 및 LoadEnvConfiguration 제작하기
1) viper 설치하기
go get 명령어를 통해 viper 라이브러리를 다운로드 받습니다.
go get github.com/spf13/viper
go get github.com/spf13/viper
2) LoadEnvConfiguration 제작하기
viper 를 통해 .env 파일에서 환경 변수 값을 가져오기 위해서 LoadEnvConfiguration 함수를 제작 합니다.
이렇게 불러온 .env 파일의 환경 변수 값은 main 에서 Config.ServerPort 또는 viper.Get("SERVER_PORT") 와 같은 형식으로 불러와 사용할 수 있습니다.
Config.ServerPort
viper.Get("SERVER_PORT)
package main
import (
"fmt"
"github.com/spf13/viper"
)
func main() {
LoadEnvConfiguration(".", "config", "env")
fmt.Println("SERVER_HOST", Config.ServerPort)
fmt.Println("SERVER_HOST", viper.Get("SERVER_PORT"))
}
type Configuration struct {
Server_Port string
}
// 불러온 .env 환경 변수를 전역으로 사용하기 위해 전역 변수 설정
var Config *Configuration
func LoadEnvConfiguration(configPath, configName, configType string) error {
var config *Configuration
// config 파일 경로 설정
viper.AddConfigPath(configPath)
// config 파일 이름 설정
viper.SetConfigName(configName)
// config 파일 타입 설정 ( yaml / toml / env )
viper.SetConfigType(configType)
viper.AutomaticEnv()
err := viper.ReadInConfig()
if err != nil {
fmt.Errorf("could not read the config file: %v", err)
}
err = viper.Unmarshal(&config)
if err != nil {
fmt.Errorf("could not unmarshal: %v", err)
}
// 전역변수에 값 입력
Config = config
return nil
}
📍마무리하며
이번 글을 통해서 viper 를 활용해 .env 파일의 환경 변수 값을 가져오는데 도움이 되었으면 좋겠습니다 :)
실제 동작하는 코드는 여기서 확인 하실 수 있습니다.