22/02/22 TIL

Jaden.dev·2022년 2월 22일
0

📌 코드를 수정하지 않고 dev phase로 실행하려면?

Run/Debug Configuration

실행시키는 환경에 대한 설정을 할 수 있다.
해당 Configuration 설정에서 VM options을 이용해 active할 profile을 명시해주면 해당 profile 환경에서 run된다. 이는 JVM 옵션을 조정하는 것이다.

-Dspring.profiles.active=dev

해당 방법으로 이제 intelliJ 에서 여러 환경에서 같은 코드를 실행해 볼 수 있게 되었다!

application.yml

spring.profiles 를 여러개 선언해줄 수 있으며, --- 를 통해 구분된다.
스프링은 Configuration에서 프로필 이름을 설정할 수 있도록 하고, 스프링 컨테이너를 생성할 때 프로필을 선택할 수 있도록 한다.
환경에 따라 설정 정보를 만들어서 (.yml) 각각 별도의 프로필 이름을 부여하고, 환경에 알맞은 프로필을 선택하여 환경에 따라 다른 설정을 사용할 수 있게 된다.

@Profile 어노테이션

@ApplicationContext 인터페이스의 구현 객체에서 getEnvironment 메서드를 통해 Environment 객체를 뽑아내 현재 어떤 환경(프로필)에서 실행 중인지 확인이 가능하다.

@Configuration 어노테이션 아래 @Profile 을 사용하면, 스프링 프로필에 따라 아래 코드가 실행된다. @Profile 어노테이션 뒤에는 여러가지 프로필을 등록할 수도 있고, ! & | 와 같은 논리 연산자도 쓸 수 있다.

실제로 WebConfig 클래스를 살펴보면 @Profile 을 이용해 세 가지 프로필을 등록해놓은 것을 볼 수 있었다. 아마 production 프로필은, 실제 프러덕트로 나가면 web 관련 코드가 필요없어서 포함되지 않은 것 같다.

Application Run Profile 확인

지난번에 200 OK response를 받았던 컨트롤러에 약간의 코드를 추가해서 지금 어떤 환경에서 실행 중인지 확인해보았다.

application.properties(or .yml)를 찾는 과정

아래 스프링 공식 문서를 보면 좀 더 자세한 내용을 알 수 있다.

Externalized Configuration
https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config
External Application Properties
https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.files

공식문서를 읽어보면, application-{profile}.properties 형태의 파일을 인식해 config에 적용하는 것으로 이해할 수 있다.
어플리케이션이 시작될 때, root, /config 패키지, 현재 디렉토리, 현재 디렉토리 하위 /config 서브디렉토리, 가까운 /config 서브디렉토리 순으로 application.properties 를 찾고 로드한다. 로드된 document는 스프링 EnvironmentPropertySources 로 추가된다.

📌 외부 환경변수를 spring으로 읽어오기

spring.config.location 으로 외부 환경변수가 저장된 properties 파일 위치를 명시한 뒤 @Value 어노테이션을 이용해서 값을 가져온다.

@ConfigurationProperties

key 값이 같은 변수들을 묶어서 관리할 수 있게 해준다.

@Value

https://codevang.tistory.com/243

📌 궁금한 점

  • 만약 따로 VM options에서 아무런 설정이 없을 때, application.yml 을 로드하고, active profile 이 local 이라 local 프로필 환경에서 실행된다면, 다시 application-local.yml 을 찾아서 해당 환경으로 컨테이너가 로드되는 것인가?
profile
https://github.com/JadenHeo

0개의 댓글