[Spring] EnvironmentCapable

yu-jin-song·2021년 7월 2일
0

Spring

목록 보기
5/18
post-thumbnail

1. 개요

  • profile과 property 관리
  • 로컬, 개발, 운영 등을 구분해서 처리

2. 기능

✅ profile

특정 실행 환경에서 사용할 빈들의 그룹

📝 개요

  • 운영을 유지보수하면서 추가 요구사항에 대한 배포 진행
    : 단계적(local, test, stage)인 서버 배포 → 테스트 최종 완료
    ∴ 운영(prd) 서버 배포
  • 각 서버에 필요한 Bean과 특정 환경에서만 Bean 등록이 필요한 경우 또는 접근 URL 다르게 지정하는 경우를 구별하기 위해 사용

📝 설정

1. @Profile

/*
 ** 방법 1. @Configuration에 정의
 */
@Configuration
@Profile("test")  //빈 설정 파일이 test profile일 때만 사용
public class TestConfiguration {

    @Bean
    public BookRepository bookRepository() {
        return new TestBookRepository();
    }
    
}

/*
 ** 방법 2. @Bean 메소드에 정의
 */
@Configuration
public class TestConfiguration {

    @Bean @Profile("test")
    public BookRepository bookRepository() {
        return new TestBookRepository();
    }
    
}

/*
 ** 방법 3. @Component 클래스에 정의
 */
@Repository
@Profile("test")
public class TestBookRepository implements BookRepository {
    
}

2. VM option : -Dxxx.profiles.active="프로파일1,프로파일2,프로파일3,..."

3. @ActiveProfiles : 테스트 수행 시 어떤 profile을 사용할 것인지 지정


📝 확인

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    ApplicationContext ac;
    
    @Override
    public void run(ApplictionArguments args) throws Exception {
    
        Environment environment = ac.getEnvironment();
        
        //현재 active한 프로파일 가져오기
        System.out.println(Arrays.toString(environment.getActiveProfiles()));
        //기본으로 적용되는 프로파일 가져오기
        System.out.println(Arrays.toString(environment.getDefaultProfiles()));
    }
}

💡 Environment
활성화 할 프로파일 확인 및 설정


✅ property

애플리케이션 구동시 필요한 정보들을 key-value 형태로 정의한 설정값

📝 개요

  • Spring에서 계층형으로 property에 접근
    = property에 우선순위 존재
  • key 동일 → 우선순위 높은 property의 value 가져옴

    💡 우선순위

    1. ServletConfig 매개변수
    2. ServletContext 매개변수
    3. JNDI(java:comp/env/)
    4. JVM 시스템 프로퍼티(VM Option)
    5. JVM 시스템 환경 변수(운영체제 환경 변수)

📝 설정

1. VM option : -Dxxx.name="프로퍼티명"

2. 프로퍼티 파일(.properties) ex) xxx.name = 프로퍼티명


📝 확인

@Override
public void run(ApplicationArguments args) throws Exception {
    Environment environment = ac.getEnvironment();
    System.out.println(environment.getProperty("device.name"));
}



📖 참고

profile
기쁘게 코딩하고 싶은 백엔드 개발자

0개의 댓글