Develop/JAVA

[Spring Boot] application.yml 변수 Java Static 변수에서 사용하는 방법

issuemaker99 2024. 10. 15. 23:25
728x90

Spring Boot 애플리케이션에서 application.yml에 정의된 설정 값을 Java의 static 변수에서 사용하는 방법은 일반적으로 직접적인 주입이 불가능합니다. Spring의 의존성 주입은 인스턴스 수준에서 이루어지기 때문에, static 변수에는 값을 할당하는 방법을 조금 더 고려해야 합니다. 

 

1. application.yml 파일에 변수 정의하기

먼저, Spring Boot 애플리케이션의 application.yml 파일에 값을 정의해 보겠습니다.

# application.yml
app:
  config:
    name: MySpringApp
    version: 1.0

 

위에서 app.config.name과 app.config.version 두 개의 설정 값을 정의하였습니다.

 

2. 설정 값을 Java static 변수에서 사용하기

static 변수에 값을 할당하는 방법은 여러 가지가 있지만, 여기서는 @PostConstruct와 setter 메서드를 사용하는 방법 두 가지를 설명합니다.

2.1. @PostConstruct를 사용하는 방법

@PostConstruct는 Spring이 해당 클래스의 모든 의존성을 주입하고 난 후 호출되는 메서드를 정의할 때 사용합니다. 이를 통해 인스턴스 변수에 주입된 값을 static 변수에 할당할 수 있습니다.

2.1.1. 코드 예제

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class AppConfig {

    // 주입받을 인스턴스 변수
    @Value("${app.config.name}")
    private String appName;

    @Value("${app.config.version}")
    private String appVersion;

    // static 변수
    public static String STATIC_APP_NAME;
    public static String STATIC_APP_VERSION;

    // @PostConstruct 메서드로 static 변수에 할당
    @PostConstruct
    public void init() {
        STATIC_APP_NAME = appName;
        STATIC_APP_VERSION = appVersion;
    }
}

 

@PostConstruct 메서드에서는 Spring 컨텍스트가 초기화된 후 appName과 appVersion 값을 static 변수에 할당합니다. 이를 통해 다른 클래스에서 static 변수를 사용하여 설정 값을 참조할 수 있습니다.

2.2. Setter 메서드를 사용하는 방법

@PostConstruct를 사용하는 대신, setter 메서드를 통해 static 변수에 값을 할당하는 방법도 있습니다. 이 방법은 각 값이 주입될 때 바로 static 변수에 할당될 수 있는 장점이 있습니다.

2.2.1. 코드 예제

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class AppConfig {

    // 주입받을 인스턴스 변수
    private String appName;
    private String appVersion;

    // static 변수
    public static String STATIC_APP_NAME;
    public static String STATIC_APP_VERSION;

    // 주입을 위한 setter 메서드
    @Value("${app.config.name}")
    public void setAppName(String appName) {
        AppConfig.STATIC_APP_NAME = appName;
    }

    @Value("${app.config.version}")
    public void setAppVersion(String appVersion) {
        AppConfig.STATIC_APP_VERSION = appVersion;
    }
}

 

setter 메서드를 사용하면 Spring이 값을 주입할 때 즉시 static 변수에 값을 할당할 수 있습니다. 이 방식은 코드를 보다 직관적으로 구성할 수 있는 장점이 있습니다.

2.3. static 변수를 사용하는 클래스

위 두 방법에서 static 변수에 할당된 값을 다른 클래스에서 참조할 수 있습니다.

public class SomeService {

    public void printAppConfig() {
        System.out.println("App Name: " + AppConfig.STATIC_APP_NAME);
        System.out.println("App Version: " + AppConfig.STATIC_APP_VERSION);
    }
}

 

SomeService 클래스는 AppConfig의 static 변수를 참조하여 설정 값을 출력합니다.

3. 전체 코드

3.1. application.yml

# application.yml
app:
  config:
    name: MySpringApp
    version: 1.0

 

3.2. @PostConstruct를 사용하는 AppConfig.java

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class AppConfig {

    @Value("${app.config.name}")
    private String appName;

    @Value("${app.config.version}")
    private String appVersion;

    public static String STATIC_APP_NAME;
    public static String STATIC_APP_VERSION;

    @PostConstruct
    public void init() {
        STATIC_APP_NAME = appName;
        STATIC_APP_VERSION = appVersion;
    }
}

 

3.3. Setter 메서드를 사용하는 AppConfig.java

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class AppConfig {

    private String appName;
    private String appVersion;

    public static String STATIC_APP_NAME;
    public static String STATIC_APP_VERSION;

    @Value("${app.config.name}")
    public void setAppName(String appName) {
        AppConfig.STATIC_APP_NAME = appName;
    }

    @Value("${app.config.version}")
    public void setAppVersion(String appVersion) {
        AppConfig.STATIC_APP_VERSION = appVersion;
    }
}

 

3.4. Static 변수를 사용하는 클래스

public class SomeService {

    public void printAppConfig() {
        System.out.println("App Name: " + AppConfig.STATIC_APP_NAME);
        System.out.println("App Version: " + AppConfig.STATIC_APP_VERSION);
    }
}

 

4. 결론

Spring Boot에서 application.yml 파일에 정의된 설정 값을 static 변수에서 사용하기 위해서는 @PostConstruct나 setter 메서드를 활용하는 방법을 사용할 수 있습니다.

  • **@PostConstruct**를 사용하면 Spring 컨텍스트가 초기화된 후 한 번에 값을 static 변수에 할당할 수 있습니다.
  • Setter 메서드를 사용하면 주입되는 즉시 값을 static 변수에 할당할 수 있어 코드가 조금 더 직관적입니다.

두 가지 방법 모두 Spring의 의존성 주입과 static 변수의 사용 간의 차이를 극복할 수 있는 유용한 방법이므로, 상황에 맞게 선택하여 사용할 수 있습니다.


이 글을 통해 application.yml 값을 static 변수에 할당하는 방법에 대한 명확한 가이드를 제공하고, 각 방식의 장단점을 이해하는 데 도움이 되기를 바랍니다.

LIST