>백엔드 개발 >Golang >환경 변수로 Go 앱 구성 재정의

환경 변수로 Go 앱 구성 재정의

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-18 07:43:14163검색

Override Go app configuration with Environment variable

컨테이너화된 애플리케이션을 보다 유연하게 만드는 방법은 무엇입니까?

우리는 최소 10년 동안 컨테이너에서 작동하는 애플리케이션을 개발해 왔습니다. 이 접근 방식의 장점과 단점은 고려하지 않고 애플리케이션 유연성에 중점을 두고 싶습니다. 거의 모든 종속성, 즉 Postgres, MySql, Redis 등과 같은 스토리지 컨테이너를 사용하면 환경 변수를 통해 대부분의 구성 속성을 재정의할 수 있습니다. Docker 컨테이너는 컨테이너에서 환경 변수를 사용하도록 자극합니다. 그러나 잘 알려진 서비스 프로그래머와는 달리 자신만의 접근 방식으로 맞춤형 애플리케이션을 개발합니다. 저는 JSON 구성 파일을 사용하여 애플리케이션을 구성하는 것을 선호합니다. 하지만 구성 파일에 100개 이상의 속성이 있으면 어떻게 해야 합니까? 각 속성에 대해 환경 변수를 사용할 수 없습니다. 대신 JSON 구성 파일을 작업 기본값이 있는 템플릿으로 사용하고 적절한 환경 변수가 설정된 경우 애플리케이션 시작 시 속성을 재정의하기로 결정했습니다.

Go 애플리케이션에서 이러한 접근 방식을 구현하는 방법

요즘에는 단일 Docker 이미지를 사용하지 않습니다. 우리는 docker-compose와 같은 단순한 오케스트레이션을 선호합니다. docker-compose에서는 일반적으로 .env 파일을 생성합니다. 이전에 언급했듯이 환경 변수는 Postgres 또는 MySQL과 같은 잘 알려진 이미지에서 잘 작동합니다. 기본값을 사용하여 절대적으로 작동하는 템플릿으로 사용하는 다음 애플리케이션 구성(JSON)이 있다고 가정해 보세요.

{
    "server": {
        "address": "0.0.0.0",
        "port": 8182
    },
    "logging": {
        "level": "info",
        "http_log": false,
        "http_console_out": false
    }
}

이 값은 무엇이든 재정의할 수 있어야 합니다. 디버깅하고 HTTP 로깅을 활성화하려면 로그 수준을 높여야 한다는 점을 고려하세요. 이 작업을 쉽게 수행하려면 특별한 이름 패턴이 있는 기술적인 환경 변수를 만들어야 합니다.

  1. 이중 밑줄로 시작 __
  2. 전체 속성 경로(예: 로그 수준 __logging.level )를 포함합니다.

이 go 패키지를 사용하면 해야 할 모든 작업을 매우 쉽게 수행할 수 있습니다.

  1. go_config_extender.LoadJSONConfigWithEnvOverride 함수를 사용하여 파일에서 JSON 객체 읽기(테스트에서 전체 예제를 볼 수 있음)
  2. 다음과 같이 env 파일을 설정합니다.
# all previous variables
__logging.level="debug"
__logging.http_log=true

그게 다입니다. GitHub에서 별표를 남겨주세요

결론

이 접근 방식과 패키지는 컨테이너화된 애플리케이션뿐만 아니라 기본적으로 실행되는 앱에도 사용할 수 있습니다. 이 패키지는 인증 서버에서 성공적으로 작동하고 있습니다.

위 내용은 환경 변수로 Go 앱 구성 재정의의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.