
Go 프로젝트를 진행하면 처음 마주하는 고민은 아마도 프로젝트 설정 정보 관리일 것 입니다.
아직까지도 민감정보들이 Github와 같은 오픈된 환경에 노출되는 문제가 적지 않게 발생하고 있는 만큼,
민감정보인 데이터베이스 비밀번호나 API키를 관리하는것에 특히 신경을 쓸 필요가 있겠습니다.
이번 글은 Go에서 godotenv를 활용하여 설정을 안전하고 유연하게 관리하는 방법을 함께 알아봅시다.
1. 환경변수 (12-Factor-App)
The Twelve-Factor App 방법론에 세 번째 원칙은 "설정(Config)을 환경(Environment)에 저장하라" 입니다.
- 코드와 설정은 분리되어야 한다.
코드는 환경에 상관없이 동일해야하며, 설정 값만 교체되면 로컬, 테스트, 운영환경 어디에서든 동일한 바이너리를 실행 할 수 있다. - 보안
중요한 API 키를 소스 코드 내부에 하드코딩 하지 않고 환경 변수로 주입함으로써 유출 위험을 차단한다.
2. godotenv
Go에서 환경변수를 불러올 때 가장 대중적으로 사용되는 라이브러리가 'godotenv' 입니다.
이 라이브러리는 .env 파일에 작성된 내용을 읽고 프로그램 내에서 os.Getenv로 바로 접근 할 수 있도록 환경변수에 등록해 줍니다.
2-1. 설치 방법
go get github.com/joho/godotenv
2-2. 구현
프로젝트 루트에 .env 파일을 생성합니다.
# .env
DB_HOST=localhost
DB_PORT=5432
API_KEY=my-secret-key-123
이제 Go 코드에서 .env 파일에 작성한 설정 정보들을 로드 하겠습니다.
package main
import (
"fmt"
"log"
"os"
"github.com/joho/godotenv"
)
func main() {
// .env 파일을 로드합니다.
err := godotenv.Load()
if err != nil {
log.Println("경고: .env 파일을 찾을 수 없습니다.")
}
// 환경변수를 불러옵니다.
dbHost := os.Getenv("DB_HOST")
apiKey := os.Getenv("API_KEY")
fmt.Printf("DB Host: %s\n", dbHost)
fmt.Printf("API Key: %s\n", apiKey)
}
3. 주의사항
.env 파일은 절대 Git 저장소에 올리면 안됩니다.
저장소에는 샘플 파일만 공유하고, 실제 정보다 담겨 있는 파일은 공유하지 않습니다.
.gitignore에 .env를 반드시 추가해서 공유되지 않도록 신경써주세요.
샘플 파일
# .env.example
DB_HOST=
DB_PORT=
API_KEY=
4. 코드보러가기
https://github.com/reochoi109/go-handbook/blob/main/config/basic/main.go
go-handbook/config/basic/main.go at main · reochoi109/go-handbook
A personal handbook of Go patterns and best practices. Lightweight, practical code snippets for real-world backend development. - reochoi109/go-handbook
github.com
'프로그래밍 > golang' 카테고리의 다른 글
| [Golang] Slog를 활용한 로그 샘플링 구현하기 (0) | 2026.03.18 |
|---|---|
| [Golang] Slog를 활용한 마스킹 핸들러 구현 (0) | 2026.03.18 |
| [Golang] 표준 로깅 라이브러리 Slog (0) | 2026.03.18 |
| [Golang] logrus로 구조화된 로깅 구현 (0) | 2026.03.18 |
| [Golang] flag를 활용한 CLI 옵션 처리 (0) | 2026.03.18 |