🏃🏻 들어가며
지금까지는 viper 를 활용한 환경 변수 값 활용에 대해서 정리했습니다.
이번 글에서는 또 다른 도구인 godotenv 를 사용해 환경 변수 값을 활용하는 방법을 정리해 보았습니다.
viper 를 사용하는 방식이 궁금하신분들을 위해 링크를 남겨 놓겠습니다 !
https://helicopter55.tistory.com/94
https://helicopter55.tistory.com/95
✅ godotenv 설치 및 환경 변수 활용하기
1) godotenv 설치하기
go get 명령어를 통해 godotenv 라이브러리를 다운로드 받습니다.
go get github.com/joho/godotenv
go get github.com/joho/godotenv
2) 환경 변수 활용하기
godotenv 를 통해 .env 파일에서 환경 변수 값을 가져오는 방식은 viper 와 단순히 비교해보자면, 무척이나 간단합니다.
godotenv.Load() 을 통해 .env 파일에서 환경 변수값을 불러오고
os.Getenv("환경변수명") 을 통해 환경 변수값을 활용하면 됩니다.
package main
import (
"log"
"os"
"github.com/joho/godotenv"
)
func main() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
dbPort := os.Getenv("DB_PORT")
dbHost := os.Getenv("DB_HOST")
}
✅ env 맵핑을 사용하는 방식
경우에 따라서는 .env 파일에서 환경변수값을 불러오고 EnvConfig 구조체에 값을 넣는 방식을 사용 합니다.
이럴때 사용하면 좋은게 바로 env 입니다.
라이브러리 이름이 env 이기 때문에 혼동이 올 수도 있습니다.
하지만, 기능은 단순히 환경 변수를 파싱해서 구조체에 할당하는 역할만 합니다.
1) godotenv 설치하기
go get 명령어를 통해 env 라이브러리를 다운로드 받습니다.
go get github.com/caarlos0/env/v11
go get github.com/caarlos0/env/v11
2) 환경 변수를 EnvConfig 구조체에 맵핑하기
go get 명령어를 통해 env 라이브러리를 다운로드 받습니다.
`env:DB_HOST,required` 와 같이 구조체 필드에 할당하고자 하는 환경 변수명을 작성 합니다.
이후에는 env.Parse(config) 를 통해 실제 환경변수 값을 envConfig 구조체에 맵핑 합니다.
package main
import (
"log"
"github.com/caarlos0/env"
"github.com/joho/godotenv"
)
type EnvConfig struct {
ServerPort string `env:"SERVER_PORT,required"`
DBHost string `env:"DB_HOST,required"`
DBName string `env:"DB_NAME,required"`
DBUser string `env:"DB_USER,required"`
DBPassword string `env:"DB_PASSWORD,required"`
}
func NewEnvConfig() *EnvConfig {
err := godotenv.Load()
if err != nil {
log.Fatalf("Unable to load .env: %e", err)
}
// EnvConfig 참조
config := &EnvConfig{}
// 환경변수 값 파싱
// 환경변수 값 맵핑
if err := env.Parse(config); err != nil {
log.Fatalf("Unable to load variables from .env: %e", err)
}
return config
}
📍마무리하며
이번 글을 통해서 godotenv 를 활용해 .env 파일의 환경 변수 값을 가져오는데 도움이 되었으면 좋겠습니다 :)
실제 동작하는 코드는 여기서 확인 하실 수 있습니다.
댓글