
시스템 프로퍼티(System Properties) 란 JVM 시 구동할 때 자동으로 설정되는 시스템 속성값입니다. 시스템 프로퍼티는 키(Key) 와 값(Value)로 구성되어 있으며 운영체제에서 사용되는 파일 경로, 구분자, 운영체제의 종류 및 자바 프로그램을 실행시킨 사용자 아이디 JVM 버전등이 여기에 속합니다.
여기서 시스템 프로퍼티는 Enciroment 를 통해 확인 가능합니다.
그리고 Enviroment 는 Application Context 에 또 다른 기능입니다.
public interface ApplicationContext extends EnviromentCapable, ListableBeanFactory,
HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver
위의 코드는 ApplicationContext 의 인터페이스 선언부입니다.
여기서 집중해야할 부분은 EnviromentCapable 인터패이스를 부모 인터페이스로 두고 있는 것을 확인할 수 있는데 이는 바로 ApplicationContext 가 DI 기능 뿐만 아니라 Enviroment 까지 제공하고 있다는 것입니다
@Component
public class Runner implements AppicationRunner {
@Autowired
ApplicationContext ctx;
@Override
public void run(ApplicationArguments args) throws Exception {
Enviroment env = ctx.getEnviroment(); // Enviroment 객체
System.out.println(Arrays.toString(enviroment.getActiveProfiles());
}
```
해당 코드는 ApplicationContext 타입의 ctx 객체를 통해 Enviroment 를 가져오는 코드입니다.
결국 스프링 구동시 설정되는 값들은 시스템 프로퍼티 라고 하며 이는 스프링의 설정 값들을 추상화해놓은 Enviroment 로 읽어올 수 있습니다.
application.properties 를 사용하면, 환경별로 각기 다른 파일을 만들어야 합니다.
보통 환경은 사용자가 정의하기 나름이지만 dev(개발),test(테스트),local(로컬),prod(운영) 등이 사용됩니다.
환경별로 다른 파일을 만드는 경우 무조건 application-{사용할 환경 이름}.properties 형식으로 파일 이름을 지정해야합니다.
spring.profiles.active=test
특정 환경에 맞는 profiles 를 설정은 default 로 제공되는 application.properties 파일에 spring.profiles.active={활성화할 환경} 을 통해 할 수 있습니다.