해당 포스팅은 스프링부트에서 yml에 환경변수를 지정하고, 출력 테스트를 진행할 때 @Value 애너테이션의 동작에 대한 간단한 개요를 정리하려고 한다.
스프링 시큐리티를 통해 JWT를 적용하려고 하다가. yml에서 환경변수의 값을 지정하고, 출력 테스트를 하려고 할 때 null이 출력 됨을 확인했다.

먼저 값을 지정하려면, 윈도우 기준으로
시작 - '환경 변수'를 검색하면 시스템 시스템 환경 변수 편집이 나온다.
거기서 환경 변수 - 시스템 변수 - 새로 만들기 를 통해서 다음과 같이 변수 이름과 값을 넣으면 된다.

리눅스로 편하게 지정하려면 다음 명령어를 사용하면 된다.
(리눅스가 없으면 Git bash를 활용하면 된다.)
openssl rand -hex 64
yml에는 다음과 같이 지정한다.
(일단 임시다.)
// application.yml
jwt-variable:
secret-key: ${JWT_SECRET_KEY}
그리고 이제 테스트에서 출력을 해볼건데,,
public class SecurityTest {
@Value("${jwt-variable.secret-key}")
private String secretKey;
@Test
void printTest() {
System.out.println("secretKey = " + secretKey);
}
}
스프링 컨테이너에 빈을 올리는 과정을 생략하려고 이렇게 코드를 작성했다.
그런데 null이 출력되었다.

왜 그런지 봤더니, @Value 애너테이션은 스프링의 Bean 주입이 마치고 난 후에 값의 주입이 일어난다고 한다.
그래서 그냥 클래스 레벨에 @SpringBootTest 애너테이션을 선언했다.
조금 느리지만, 다음과 같이 잘 나오는 것을 확인할 수 있다.
