24. 외부화된 구성 by ys
스프링 부트는 환경 설정을 외부에 할 수있게 해서 같은 어플리케이션 코드를 다른 환경에서 사용할 수있게 한다. 외부 환경 설정을 하기 위해 Properties 파일들, YAML 파일들, 환경변수들 그리고 Command-Line 인수들을 사용할 수 있다. 설정된 프라퍼티들은 @Value를 사용해 직접 빈들에 주입할 수도 있고, 스프링의 Environment 추상을 통해 접근하거나 @ConfigurationProperties를 통해 구조화된 객체에 묶일 수도 있다.
스프링 부트는 값들을 합리적으로 재정의하도록 설계한 매우 특별한 PropertySource 순서를 사용한다. 프라퍼티들은 다음 순서대로 적용된다.
홈 디렉토리상의 Devtools의 전역설정 프라퍼티(devtools가 실행 중일때
~/.spring-boot-devtools.properties)테스트 할 때
@TestPropertySource어노테이션테스트 할 때
@SpringBootTest#properties어노테이션Command-Line 인수
SPRING_APPLICATION_JSON에 설정된 프라퍼티들(환경변수나 시스템 프라퍼티 내장된 inline JSON)ServletConfig초기파라미터ServletContext초기파라미터java:comp/env로 부터의 JNDI 속성Java 시스템 프라퍼티(
System.getProperties()).운영체제 환경변수
random.*형태의 프라퍼티들만 가지고 있는RandomValuePropertySource패키지된 jar 파일 외부의 프로파일 관련 어플리케이션 프라퍼티들(
application-{profile}.properties와 YAML 문서)패키지된 jar 파일 내부의 프로파일 관련 어플리케이션 프라퍼티들(
application-{profile}.properties와 YAML 문서)패키지된 jar 파일 외부의 어플리케이션 프라퍼티들 (
application.properties와 YAML 문서)패키지된 jar 파일 내부의 어플리케이션 프라퍼티들 (
application.properties와 YAML 문서)@Configuration클래스에 선언한@PropertySource어노테이션기본 프라퍼티들 (
SpringApplication.setDefaultProperties를 사용해 작성된)
구체적인 예제를 제공하기 위해, name 프라퍼티를 사용하는 @Component를 다음 예제와 같이 개발하고 있다고 가정한다.
import org.springframework.stereotype.*;
import org.springframework.beans.factory.annotation.*;
@Component
public class MyBean {
	@Value("${name}")
	private String name;
    // ...
}어플리케이션의 클래스패스(jar파일 내)상에 application.properties 파일이name에 대한 유용한 기본 프라퍼티 값을 제공할 수있다. 새로운 환경에서 실행될 때, name을 재정의한 application.properties 파일이 jar파일 외부에서 제공될 수도 있다. 일회성 테스트를 위해 시작할 때 Command-Line 인수를 이용해 전달 할 수 있다. (예를 들어 java -jar app.jar --name="Spring").
![[팁]](https://wannaqueen.gitbook.io/spring5/~gitbook/image?url=https%3A%2F%2Fdocs.spring.io%2Fspring-boot%2Fdocs%2Fcurrent%2Freference%2Fhtmlsingle%2Fimages%2Ftip.png&width=300&dpr=4&quality=100&sign=e19e9545&sv=2)
SPRING_APPLICATION_JSON 프라퍼티는 환경변수로 Command line상에서 제공될 수 있다. 예를 들어 다음 라인을 UNI*X 쉘에서 사용할 수있다.
$ SPRING_APPLICATION_JSON='{"acme":{"name":"test"}}' java -jar myapp.jar
위 예가 실행되면, 스프링 Environment에서는 acme.name=test로 된다. JSON을 시스템 프라퍼티에서 spring.application.json을 사용해 다음 예처럼 제공할 수도 있다.
$ java -Dspring.application.json='{"name":"test"}' -jar myapp.jar
JSON을 Command-line 인수를 사용해 다음 예 처럼 제공할 수도 있다.
$ java -jar myapp.jar –spring.application.json='{"name":"test"}'
다음과 같이 JNDI 변수를 이용해 JSON을 제공을 할 수도 있다. 
java:comp/env/spring.application.json
Last updated
Was this helpful?