jsonobject.com
449
2021-03-18 08:33:56 작성 2021-03-18 08:34:11 수정됨
0
461

Spring Boot, Kotlin, 환경 변수 적용 우선순위 정리


안녕하세요.

최근 제 블로그에 작성했던 글을 가져왔습니다. 출처만 남겨주시면 자유롭게 퍼가셔도 됩니다.

https://jsonobject.tistory.com/543  (지단로보트의 블로그)



개요

  • 서버리스 컨테이너 시대가 도래하면서 애플리케이션의 상태에 대한 관리가 중요해졌다. 과거에는 느슨하게 하드 코딩된 상수들도 이제는 적절하게 환경 변수를 받아 주입하도록 설정해야 일관성 있는 컨테이너 관리가 가능하다. 이번 글에서는 Spring Boot에서 헷갈리기 쉬운 환경 변수 적용 우선순위를 정리하였다.

Spring Boot 환경 변수 적용 우선순위

  • Spring Boot 애플리케이션을 기동할 때 전달되는 환경 변수의 적용 우선순위는 아래와 같다. 높은 우선순위의 환경 변수가 전달되면, 아래 순위에서 동일한 환경 변수가 전달되어도 무시된다.
1. JVM 옵션: "-D--logging.file.path=/var/log/foobar"

2. 운영체제 환경 변수: "LOGGING_FILE_PATH=/var/log/foobar"

3. application-{profile}.yml
----------------------------
logging:
  file:
    path: /var/log/foobar

4. application.yml
------------------
logging:
  file:
    path: /var/log/foobar
  • 위 3, 4번은 애플리케이션의 상태를 소스 코드에 저장하므로 보안 관점에서 좋은 방법이 아니다. 2번 운영체제 환경 변수를 사용한 방법은 컨테이너에 상태를 전달하는 가장 보편적인 방법으로 권장한다.

Spring Boot 환경 변수 획득: Environment::getProperty()

  • Spring Boot의 모든 빈에서 적용된 환경 변수를 아래와 같이 획득하여 확인할 수 있다.
@Component
class SomeComponent(
        val environment: Environment
) {
    val loggingFilePath: String = environment.getProperty("LOGGING_FILE_PATH") ?: "default_value"
}

Spring Boot 환경 변수 획득: @Value

  • @Value를 이용하여 앞서와 마찬가지로 Spring Boot의 모든 빈에서 적용된 환경 변수를 아래와 같이 획득하여 확인할 수 있다.
@Component
class SomeComponent(
        @Value("\${logging.file.path:defaultValue}") val loggingFilePath: String
) {
    ...
}
1
  • 댓글 0

  • 로그인을 하시면 댓글을 등록할 수 있습니다.