본문 바로가기

스프링/스프링 핵심 기술

5. IoC 컨테이너: Environment(Profile, Property)

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도 존재하는 것을 확인할 수 있다.

참고 자료