<aside> 1️⃣ 개념설명
</aside>
Spring Boot
**에서는 이러한 민감한 정보를 외부 설정으로 분리하고 이를 응용 프로그램에서 안전하게 읽어들일 수 있는 방법을 제공한다.
${API_KEY}
**와 같이 환경 변수를 참조할 수 있다.Secret Management
서비스를 제공하며, **Spring Boot
**는 이러한 서비스와 통합할 수 있다. 예를 들어, **Kubernetes
**에서는 Secrets
또는 **Google Cloud
**에서는 **Secret Manager
**와 같은 기능을 사용할 수 있다..gitignore
파일에 추가하여 코드 저장소에는 추가되지 않게 할 수 있다. 그런 다음, Spring Boot
애플리케이션에서 이 파일을 읽어 들여 해당 정보를 사용할 수 있다.<aside> 2️⃣ yaml 대신 클래스로 환경변수를 작성하는 방식이 좋은 방법인가?
</aside>
@Value
어노테이션 또는 **@ConfigurationProperties
**를 사용하여 외부 YML 또는 properties 파일에서 설정 값을 불러올 수 있다. 이 방법은 민감한 정보를 소스 코드 밖에 위치한 설정 파일에 저장하는데 도움이 된다.application.yml
파일에 설정을 저장하고, 이 값들을 자바 클래스에 주입하는 방법을 보자# application.yml
thirdparty:
api:
key: ${API_KEY}
@Configuration
@ConfigurationProperties(prefix = "thirdparty.api")
public class ThirdPartyApiProperties {
private String key;
// getters and setters
}
API_KEY
환경 변수의 값을 ThirdPartyApiProperties
클래스의 key
필드에 주입할 수 있다..env
파일을 사용하고, 프로덕션 환경에서는 환경 변수 또는 시크릿 관리 서비스를 사용하여 환경별로 다른 설정을 적용할 수 있게 한다.<aside> 3️⃣ @ConfigurationProperties를 사용하는 장점은 무엇인가?
</aside>
@ConfigurationProperties
**를 사용해 클래스로 환경 설정을 불러오는 것은 여러 가지 이점이 있다.
@ConfigurationProperties
클래스를 사용하면, 자동 완성을 통해 사용 가능한 속성을 쉽게 찾을 수 있다. 또한, 스프링 부트 설정 메타데이터 생성기를 사용하면, 이 클래스에 있는 모든 속성에 대한 메타데이터를 JSON 형식으로 생성할 수 있다. 이 메타데이터는 문서화에 사용할 수 있다.@ConfigurationProperties
**를 사용하면, 속성을 계층적으로 그룹화하여 관리할 수 있다. 이는 복잡한 애플리케이션에서 설정을 더 잘 구조화하고 관리하는 데 도움이 된다.@ConfigurationProperties
클래스에서는 JSR-303의 @Validated
어노테이션을 사용하여 설정 값에 대한 유효성 검사를 할 수 있다.@ConfigurationProperties
**는 리스트나 맵과 같은 복잡한 타입도 지원한다.@Value
어노테이션을 사용하여 필요한 값을 직접 주입하는 것이 더 간단할 수 있다. 하지만 위에서 언급한 이유로 인해, **@ConfigurationProperties
**를 사용하는 것이 더 많은 이점을 제공한다.@ConfigurationProperties
**를 사용하는 것이 더 효율적일 수 있다.