스프링/스프링 핵심 기술
5. IoC 컨테이너: Environment(Profile, Property)
Stranger_s
2019. 12. 12. 15:49
Environment
프로파일과 프로퍼티를 다루는 인터페이스이다.
Profile
- Bean들의 그룹이다. 특정 환경에서 어떠한 빈들을 등록할 때 사용할 수 있다.
- 테스트 환경에서는 A그룹의 빈을 사용하고 배포 환경에서는 B 그룹의 빈을 사용하게 할 수 있다.
- ApplicationContext가 Environment를 상속받아 사용되기 때문에 Environment를 받아올 있다.
- 현재 아무런 설정을 하지 않았기 때문에 Active 값은 ""이며 Defalut 값은 "default"로 설정된다.
Profile 사용해보기
- @Profile을 이용하여 특정 Profile에만 원하는 로직을 수행할 수 있다.
- test Profile에서만 BookRepository를 빈으로 등록한다.
- test Profile이 아닐 경우 BookRepository는 빈으로 등록되지 않으므로 사용할 수 없다.
Profile 설정이 안 되어 있을 때
- 프로파일을 설정하지 않고 그냥 실행하면 빈이 등록되지 않았으므로 빈을 찾지 못한다는 에러가 발생한다.
Profile 설정하기
- IDE 우측 상단에 왼쪽 사진처럼 표시되어있는 곳을 클릭해 EditConfigurations에 들어가 profile을 test로 설정하였다.
- 정상적으로 앱이 구동되고 ActiveProfiles에 test가 출력된다.
- Configuration을 따로 만들지 않고 Repository에 직접 프로파일을 설정할 수도 있다.
- 주석으로 처리된 @Profile과 같이! 를 붙이면 test가 아닌 모든 곳에 적용한다는 뜻이다.
Property
- 다양한 방법으로 설정값을 정의할 수 있다.
- Environment의 역할은 Property Source 설정 및 Property 값을 가져오는 것이다.
Property 우선순위
- 1. ServletConfig 매개변수
- 2. ServletContext 매개변수
- 3. JNDI(java:comp/env/)
- 4. JVM 시스템 프로퍼티(-Dkey = "value")
- 5. JVM 시스템 환경 변수(운영 체제 환경 변수)
Property 사용해보기
- Vm options에 -Dapp.name=test1라고 설정한다
- getProperty("app.name")을 하면 test 1이 출력된다.
- 다른 방법으로는 resouces 폴더에 app.properties라는 파일을 만들고 위와 같이 입력한다.
- Configuration이 존재하는 클래스에 @PropertySource를 통해 추가가 가능하다.
- 결과를 확인해보면 app.about property도 존재하는 것을 확인할 수 있다.