괴발개발 성장기

Study/Go 언어

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

지니유 2022. 2. 20. 22:56
반응형

# GitHab 이슈

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

 

환경변수 설정하는 부분 공부하기 · Issue #11 · YooGenie/study-service

ConfigureEnvironment 함수와 afterPropertiesSet 함수 공부하기

github.com


배포 방식에 따라 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 키값 등등 설정할 수 있다.

 

 

반응형