1% 이해하기 시리즈/Golang

[golang 1% 이해하기] viper | dotenv 환경 변수값을 읽는 기능 도입 하기 #1 Config 전역 변수를 활용하기

TLOWAC 2024. 11. 9. 00:44

 

🏃🏻 들어가며

이번 글에서는 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 파일의 환경 변수 값을 가져오는데 도움이 되었으면 좋겠습니다 :)

실제 동작하는 코드는 여기서 확인 하실 수 있습니다.

반응형