[Spring] Environment의 2가지 기능 프로파일(Profile) & 프로퍼티(Property)

Junseo Kim·2020년 1월 21일
0

ApplicationContext는 BeanFactory 기능 말고도 여러가지 기능을 가지고 있다.

Environment기능

ApplicationContext는 'EnvironmentCapable'를 상속받고 있다.

스크린샷 2020-01-21 오후 6.54.17.png

EnvironmentCapable은 2가지 기능이 있다.
1. 프로파일
2. 프로퍼티

프로파일 기능

프로파일은 Bean들의 묶음이다.(테스트 환경에서는 어떤 묶음의 Bean들을 쓰겠다. 실제 배포에서는 어떤 묶음의 Bean들을 쓰겠다는 것이다.)

Environmet는 활성화 할 프로파일을 확인하고 설정해주는 것이다.

기본적으로는 default 프로파일로 설정되어있다.

Default 프로파일은 직접 프로파일 설정하지 않아도 적용되는 프로파일이다. 직접 생성한 Bean들도 따로 어떤 프로파일에 들어가는지 설정하지 않으면 전부 Default 프로파일에 속한다.

Bean에 특정 프로파일을 설정하려면 @Profile("프로파일이름") 형식으로 지정해준다.(@Component @Profile("")도 마찬가지로 사용가능하다.)

스크린샷 2020-01-21 오후 7.16.22.png

또한 클래스가 아닌 메소드 자체에도 사용가능하다.

스크린샷 2020-01-21 오후 7.28.40.png
프로파일 이름을 줄 때, 표현식(!, &, |)도 사용가능 하다.
스크린샷 2020-01-21 오후 7.30.27.png

이후 이 Bean을 사용하려고 하면 실행오류가 난다. 왜냐하면 test 프로파일을 적용해주지 않았기 때문이다. test 프로파일을 적용하기 위해서는 아래와 같이 해주어야한다.

먼저 실행 버튼 좌측을 눌러 Edit Configuration을 눌러준다.

스크린샷 2020-01-21 오후 7.18.49.png

그 후, VM options에 -Dspring.profiles.active="프로파일명1, 프로파일명2..." 을 적어주고 적용하면 된다.

스크린샷 2020-01-21 오후 7.20.09.png

[현재 적용중인 프로파일과 default 프로파일을 확인해볼때 사용하는 코드]

스크린샷 2020-01-21 오후 8.53.50.png

스크린샷 2020-01-21 오후 8.54.20.png

프로퍼티 기능

어플리케이션에 등록되어 있는 여러 key-value로 제공되는 프로퍼티에 접근할 수 있는 기능이다.

여러 프로퍼티들은 계층형구조이다.(우선 순위가 존재한다는 뜻)

프로퍼티를 설정해주는 방법은 아래와 같다.

resources 디렉토리에 ~.properties 파일을 만들어준다.

스크린샷 2020-01-21 오후 8.50.39.png

아래와 같이 key-value 꼴로 값을 미리정해놓을 수 있다.
스크린샷 2020-01-21 오후 8.55.55.png

그 후, @PropertySource 라는 어노테이션을 사용해서 이 어플리케이션이 만들어준 app.properties 파일을 참조할 수 있도록 한다.
스크린샷 2020-01-21 오후 8.59.34.png

이 프로퍼티들을 가져올 수 있는 방법 중 2가지를 알아보려고 한다.

getProperty

Environment 객체의 getProperty 메소드를 이용해서 프로퍼티 값을 가져올 수 있다. .properties 파일의 key에 해당하는 값으로 값을 가져온다.

스크린샷 2020-01-21 오후 9.02.38.png

@Value

@Value 어노테이션을 사용해서 값을 가져올 수도 있다. .properties 파일의 key에 해당하는 값으로 값을 가져온다.

스크린샷 2020-01-21 오후 9.03.01.png

스크린샷 2020-01-21 오후 9.04.32.png

주의 사항

Environment 객체를 주입받아 사용하려 할 때, null 값이 들어가는 경우가 있다. 이 경우 해당 클래스가 Bean으로 등록되어 있는 지 확인해보는 것을 추천한다.

2개의 댓글

comment-user-thumbnail
2021년 4월 14일

글 잘 봤습니다! 따로 정리하는 글에 붙여넣고 싶은데 출처 밝히고 퍼가도 될까요?!

1개의 답글