🐾   [golang] 환경변수 설정하는 방법

GitHab 이슈

https://github.com/YooGenie/study-service/issues/11


배포 방식에 따라 json 파일을 만들었다. 배포 방식에 따라 정보가 다르기 때문 각 파일을 만들고 Environment json값으로 구별했다.

config.dev.json
config.json
config.prod.json

우리 회사 코드에서는 main안에 아래의 코드를 적었다.

config.ConfigureEnvironment("./", "STUDY_GENIE_DB_PASSWORD", "STUDY_GENIE_ENCRYPT_KEY") //환경변수 설정
  • config.go 파일에 ConfigureEnvironment()가 존재한다. path와 환경변수를 넘겨준다.

ConfigureEnvironment() 함수 코드 분석하기

func ConfigureEnvironment(path string, env ...string) {
configor.Load(&Config, path+"config/config.json") //배포 환경에 따른 설정 파일(json)을 로딩한다.
properties := make(map[string]string)

//env가 1) STUDY_GENIE_DB_PASSWORD 2) STUDY_GENIE_DB_PASSWORD => 키값이 된다.
//환경변수의 키-값 쌍을 설정
for _, key := range env {
arg := os.Getenv(key) //키에 따른 값을 가져온다. => 환경변수 읽기
if len(arg) == 0 {
panic(fmt.Errorf("No %s system env variable\n", key))
}
properties[key] = arg //키에 값을 저장한다.
//key값은 STUDY_GENIE_DB_PASSWORD이고 value는 내가 컴퓨터에 저장해 놓는 환경변수 값을 가져온다.
}

afterPropertiesSet(properties)
}
  • github.com/jinzhu/configor 를 import 해서 configor를 통해서 환경변수 설정 파일을 로딩한다.
  • os.Getenv() : 환경변수 읽기
  • os.Setenv() : 환경변수 쓰기
  • 환경변수들을 배열로 키와 값으로 저장하여 afterPropertiesSet()으로 보내준다.

afterPropertiesSet() 함수 분석하기

func afterPropertiesSet(properties map[string]string) {
Config.Encrypt.EncryptKey = properties["STUDY_GENIE_ENCRYPT_KEY"]
//Config 구조체 안에서 Encrypt안에 EncryptKey에 값을 넣어준다.

if properties["STUDY_GENIE_DB_PASSWORD"] != "" {
Config.Database.ConnectionString = fmt.Sprintf("%s:%s%s", Config.Database.User, properties["STUDY_GENIE_DB_PASSWORD"], Config.Database.Connection)
} else {
Config.Database.ConnectionString = Config.Database.Connection
}
}
  • 환경변수를 가지고 와서 Config 구조체 안에 값을 넣어준다.

DB 비밀번호나 암화키만 설정했지만 JWT 비밀키, AWS 키값 등등 설정할 수 있다.

​ ​ ​