환경별 설정
Hwaro는 환경별 설정 재정의를 지원합니다. 개발, 스테이징, 프로덕션마다 다른 설정을 쓸 수 있습니다.
동작 방식
- 기본 설정을
config.toml에서 불러옵니다 - 환경이 지정되면
config.<env>.toml을 불러와 그 위에 병합합니다 - 중첩 섹션(테이블)은 깊은 병합(deep merge)되고, 최상위 값과 말단 값은 교체됩니다
환경 지정
--env 플래그나 HWARO_ENV 환경 변수를 사용합니다.
# CLI 플래그로
hwaro build --env production
hwaro serve --env development
# 환경 변수로
HWARO_ENV=staging hwaro build
# CLI 플래그가 HWARO_ENV보다 우선
파일 구조
mysite/
├── config.toml # Base configuration (always loaded)
├── config.development.toml # Development overrides
├── config.staging.toml # Staging overrides
└── config.production.toml # Production overrides
예시
config.toml (기본):
title = "My Blog"
base_url = "http://localhost:3000"
[sitemap]
enabled = true
changefreq = "weekly"
[search]
enabled = true
config.production.toml (재정의):
base_url = "https://myblog.com"
[sitemap]
changefreq = "daily"
hwaro build --env production을 실행하면 다음과 동일한 설정이 됩니다.
title = "My Blog" # 기본 설정에서
base_url = "https://myblog.com" # production이 재정의
[sitemap]
enabled = true # 기본 설정에서(깊은 병합)
changefreq = "daily" # production이 재정의
[search]
enabled = true # 기본 설정에서(변경 없음)
깊은 병합 동작
하위 테이블은 통째로 교체되지 않고 재귀적으로 병합됩니다. 바꾸고 싶은 값만 지정하면 됩니다.
| 기본 | 재정의 | 결과 |
|---|---|---|
[sitemap] enabled = true, changefreq = "weekly" |
[sitemap] changefreq = "daily" |
[sitemap] enabled = true, changefreq = "daily" |
최상위 스칼라와 배열은 병합되지 않고 교체됩니다.
| 기본 | 재정의 | 결과 |
|---|---|---|
title = "Base" |
title = "Prod" |
title = "Prod" |
환경 변수
환경별 설정 파일에서도 환경 변수 치환을 사용할 수 있습니다.
# config.production.toml
base_url = "${PRODUCTION_URL}"
[og]
fb_app_id = "${FB_APP_ID}"
활용 사례
환경별로 다른 base URL
# config.development.toml
base_url = "http://localhost:3000"
# config.staging.toml
base_url = "https://staging.myblog.com"
# config.production.toml
base_url = "https://myblog.com"
프로덕션에서만 기능 활성화
# config.production.toml
[search]
enabled = true
[feeds]
enabled = true
환경별로 다른 애널리틱스
# config.staging.toml
[og]
fb_app_id = "staging-app-id"
# config.production.toml
[og]
fb_app_id = "prod-app-id"