Spring Boot에서는 application.properties
또는 application.yml
파일을 통해 설정값을 외부에서 관리할 수 있습니다. 이때 Java 코드에서 해당 값을 읽어오기 위해 사용하는 가장 기본적인 방식이 @Value 어노테이션입니다.
1. @Value란 무엇인가?
@Value
는 Spring의 의존성 주입(Dependency Injection) 기능 중 하나로, 외부 설정 파일에 정의된 값을 필드, 생성자, 메서드 파라미터 등에 주입할 수 있게 해줍니다.
@Value("${설정키}")
private 자료형 변수명;
Spring Boot의 application.properties 또는 application.yml에 있는 값을 필드로 바로 읽어와서 사용할 수 있기 때문에 매우 간편합니다.
2. 실습: application.properties 값 주입
application.properties 예시
app.name=MySpringApp
app.version=1.0.0
@Value로 주입
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class AppInfo {
@Value("${app.name}")
private String appName;
@Value("${app.version}")
private String appVersion;
public void printInfo() {
System.out.println("앱 이름: " + appName);
System.out.println("앱 버전: " + appVersion);
}
}
이처럼 간단하게 설정 값을 읽어와서 내부 로직에 활용할 수 있습니다.
3. application.yml에서 @Value 사용하기
application.yml 예시
app:
name: MyYamlApp
version: 2.0.0
자바 코드
@Value("${app.name}")
private String appName;
@Value("${app.version}")
private String appVersion;
key를 읽는 방식은 동일하지만, yml에서는 계층 구조로 되어 있어 app.name
형태로 접근해야 합니다.
4. 주입 시 주의할 점
- 필수 설정값 누락 시 애플리케이션이
startup error
를 발생시킬 수 있습니다. - 기본값(default value)을 지정해 안전하게 처리할 수 있습니다.
@Value("${app.description:기본 설명입니다}")
private String appDescription;
app.description이 존재하지 않을 경우에도 "기본 설명입니다"가 주입됩니다.
5. 컬렉션이나 배열 주입
application.properties
app.supportedLanguages=ko,en,ja
자바 코드
@Value("${app.supportedLanguages}")
private List<String> languages;
단, 콤마(,)를 기준으로 분리되며, 배열(String[])로 받을 수도 있습니다.
6. 환경별 설정과 함께 쓰기 (Spring Profile)
@Value
는 프로파일별 설정에도 잘 어울립니다. 예를 들어 dev, prod 환경마다 다른 값을 application-dev.properties, application-prod.properties에 정의하면,
@Value("${api.endpoint}")
private String endpoint;
운영 환경에서 자동으로 적절한 값이 주입됩니다.
7. @Value vs @ConfigurationProperties
단일 값 주입에는 @Value가 간편하지만, 여러 개의 관련 설정을 묶어서 관리하려면 @ConfigurationProperties를 사용하는 것이 좋습니다.
// @Value 예시
@Value("${mail.host}")
private String host;
@Value("${mail.port}")
private int port;
// @ConfigurationProperties 예시
@ConfigurationProperties(prefix = "mail")
public class MailProperties {
private String host;
private int port;
}
보다 체계적인 설정 관리가 필요한 경우에는 @ConfigurationProperties 방식도 함께 고려해보세요.
결론
@Value
는 Spring Boot에서 설정값을 읽어오는 가장 간단한 방법입니다. 개별 값 주입에 매우 유용하며, 프로파일, 기본값, 배열, 컬렉션 등 다양한 방식으로 활용할 수 있습니다.
단, 설정이 많아질 경우 @ConfigurationProperties
로 전환하여 유지보수성과 확장성을 확보하는 것이 좋습니다.
'개발 > JAVA' 카테고리의 다른 글
Postman vs Insomnia: API 테스트 도구 완전 정복 (0) | 2025.09.28 |
---|---|
JUnit5와 Spring Test 기초: 단위 테스트부터 통합 테스트까지 (0) | 2025.09.27 |
Spring Boot에서 SLF4J와 Logback으로 로깅 설정하기 (0) | 2025.09.25 |
Spring Boot DevTools 활용하기 – 개발 생산성을 높이는 자동 리로드 기능 (0) | 2025.09.24 |
@Configuration과 @Bean의 차이 – Spring 개발자라면 반드시 짚고 가야 할 핵심 개념 (0) | 2025.09.23 |