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 변수에 할당하는 방법에 대한 명확한 가이드를 제공하고, 각 방식의 장단점을 이해하는 데 도움이 되기를 바랍니다.
'Develop > JAVA' 카테고리의 다른 글
[Java] Spring Security 에서 SameSite 설정방법 (PG사 결제 시 리턴 후 세션 끊김현상 해결) (6) | 2024.10.24 |
---|---|
[Java] BigDecimal 나누기 소수점 올림, 버림, 반올림 사용방법 (5) | 2024.10.21 |
[Java] 현재 서버 도메인 정보 갖고오기 (13) | 2024.09.26 |
[Java] spring security 설정 csrf 특정 url 예외 처리 (6) | 2024.09.26 |
[Java] GET POST 메서드 REST API 호출 서비스 만들기 (6) | 2024.09.25 |