2023-12-01 작성

Spring Boot에서 static 변수로 선언한 @Value 값이 NULL일 경우

Spring Boot에서는 초기화 과정에서 컴포넌트를 주입할 때, 애플리케이션에 대한 Key/Value 형태의 설정을 클래스 내 변수에 값을 넣어주는 @Value 어노테이션이 존재한다.

이러한 설정은 application.properties 설정 파일에서 다음과 같은 형식으로 관리할 수 있다.

encrypt.key=1.0.2

이러한 방식을 사용하여 다른 3rd party 서비스를 사용할 때 Access Key 또는 Secret Key 같은 설정을 유용하게 할 수 있다.

static 변수에 대하여 @Value 사용하기

@Component로 선언된 클래스에서 @Value으로 변수를 설정하여 설정파일에 선언한 값을 가져올 수 있다. 다만 static 변수에서 다음과 같이 @Value 을 사용한다면 잘못된 결과를 초래하게 된다.

잘못된 예

@Component
public class EncryptUtil {

    @Value("${encrypt.key}"})
    public static String encryptKey;
    
}

위와 같이 클래스 에서 정의되어 있는 static으로 선언된 변수를 사용하면 항상 null 값이 반환된다. static 변수에 대해서는 @Value이 동작하지 않는다.

올바른 예

이를 해결하기 위해 setter 메소드를 추가하여 static 변수에 직접적으로 값을 넣을 수 있도록 하면 값을 가져와진다.

@Component
public class EncryptionUtil {

    public static String encryptKey;

    @Value("${encrypt.key}"})
    public void setKey(String key) {
        encryptKey = key;
    }
}