-
Spring Environment란?Spring Framework 2023. 8. 9. 00:01728x90
개요
Spring을 활용하다 보면 local, dev, prod 등 다양한 환경들을 사용하게 됩니다.
이때 환경별로 다르게 처리하고 싶은 경우에 Profile("local"), Profile("dev"), Profile("prod")등을 활용할 수 있지만 이렇게 되면 3가지의 클래스가 생겨나게 됩니다.
Spring Environment를 활용하여 이를 제어할 수 있습니다.
Spring Environment란?
package org.springframework.core.env; public interface Environment extends PropertyResolver { String[] getActiveProfiles(); String[] getDefaultProfiles(); @Deprecated boolean acceptsProfiles(String... profiles); boolean acceptsProfiles(Profiles profiles); }
org.springframework.core.env 패키지에 속하며 현재 애플리케이션이 실행 중인 환경을 나타내는 인터페이스입니다.
애플리케이션 환경의 두 가지 주요 측면인 profile와 properties를 다룹니다.
Properties에 관한 접근은 상위 인터페이스인 PrepertyResolver를 통해 다루어집니다.
getActiveProfiles()를 통해 활성화 중인 Profile의 정보들을 가져올 수 있습니다.
예를 들어 다음과 같이 활용할 수 있습니다.
@Component @RequiredArgsConstructor public class QASupporter { private final Environment environment; public boolean isProd(){ boolean isEnvironmentProd = Arrays.asList(environment.getActiveProfiles()).contains("prod"); return isEnvironmentProd } }
Environment Bean을 주입받고, 현재 활성화된 Profiles리스트에 Prod가 포함되는지 체크합니다.
MockEnvironment
Environment의 테스트를 목적으로 사용되는 클래스입니다.
class QaSupporterTest { MockEnvironment environment = new MockEnvironment(); QASupporter qASupporter = new QASupporter(environment); @ParameterizedTest @ValueSource(strings = {"local","dev","beta"}) public void envLocalTest(String value){ environment.addActiveProfile(value); boolean result = qASupporter.isProd(); Assertions.assertFalse(result); } }
addActiveProfile()을 통해 Profile 환경을 추가할 수 있습니다.
이를 통해 테스트코드에서도 Environment가 포함된 코드를 검증할 수 있습니다.
참고자료
'Spring Framework' 카테고리의 다른 글
feign client ErrorDecoder 분석 (0) 2023.08.25 @Transactional 과 Database Connection (2) 2023.08.24 Spring Boot Multiple Port 사용 (멀티 커넥트, 다중 포트) (0) 2023.07.31 Spring Cloud Data Flow란? (0) 2023.07.25 Spring RequestContextHolder으로 Client IP 주소 가져오기 (0) 2023.07.22