Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

개발합니다

[Spring] 환경 추상화(Environment Abstraction)란? 본문

Web/Spring

[Spring] 환경 추상화(Environment Abstraction)란?

돈기법 2022. 3. 30. 17:08

스프링은 외부 설정 파일이나, VM 아규먼트와 같이 시스템 환경 변수와 같은 환경 정보를 읽을 수 있는
런타임 환경 서비스 추상화인 Environment 인터페이스를 제공하고 있다.

스프링 런타임 환경 추상화를 이용하면 다양한 소스로부터 일관된 방식으로 환경 정보를 읽을 수 있기 때문에
코드를 변경하지 않고도 얼마든지 설정 정보를 작성하는 방식을 변경할 수 있다.

 

환경 추상화(Environment Abstraction)란?

프로파일(profile)과 프로퍼티 소스(property-source)로 구성되며, 컨테이너와 통합 된 서비스 추상화이다.
이를 통해 실행 환경에 따라 빈을 구성할 수 있고, 일관된 방식으로 외부 설정 정보를 관리하고, 접근할 수 있다.

개발자는 environment 인터페이스나 애노테이션을 이용해 환경 추상화 API를 사용할 수 있다.

 

빈 정의 프로파일(profile)

빈 정의 프로파일은 실행 환경에 따라 컨테이너에 빈을 등록할 수 있는 매커니즘이다.
@Profile 애노테이션으로 프로파일 별로 빈 등록을 할 수 있다.
프로파일은 OS 환경변수, JVM 시스템 파라미터, 서블릿 배포서술자(web.xml), Environment API등을 통해 활성화 할 수 있다.
보편적으로 환경은 개발, 운영 또는 성능 측정 등 애플리케이션이 실행되는 환경을 뜻한다.

 

프로퍼티 소스(PropertySource)

프로퍼티 소스는 키=밸류 형태로 작성된 설정 정보로 보편적으로 애플리케이션 외부에서 불러 구성한다.
환경변수, 서블릿 매개변수, 프로퍼티 파일 등 다양한 소스를 일관된 방식으로 사용할 수 있게 지원한다.

 

@Value를 사용한 빈 프로퍼티 값 설정하기

@Value는 환경 설정정보 또는 다른 빈을 이용해 빈 프로퍼티 값을 설정한다.
필드, 설정자 메소드, 메소드 파라미터에 사용할 수 있다.

 

@Component
class MovieRecommender {
	
	private String recommendedCategory;
	
	public String getCatalog() {	
		return reconnendedCategory;
	}
	
        // 환경 설정정보에서 키('catalog.name')에 연결된 값을 읽어 빈 프로퍼티로 설정한다.
	@Value("${catalog.name}")
	public void setCatalog(String catalog) {
		this.recommendedCategory = catalog;
	}

}

 

@Configuration
// 설정정보가 담긴 프로퍼티 파일을 스프링 컨테이너에 등록한다.
@PropertySource("classpath:application.properties")
class AppConfig {

}

 

# application.properties 파일

catalog.name=MovieCatalog