Spring Boot에서 @Value를 사용해 properties 값 주입하기

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로 전환하여 유지보수성과 확장성을 확보하는 것이 좋습니다.