티스토리 뷰

spring

@Value 어노테이션 주의점

주다애 2024. 11. 14. 14:18

🧪 @Value 어노테이션

@Value 어노테이션은 설정파일에 설정한 내용을 주입시키는 어노테이션이다.

예를 들어, GitHub 레포지토리에 코드를 공유하는 상황에서 DB 연결에 필요한 비밀번호나 클라우드 관련 민감 정보가 노출되는 상황은 매우 위험한 상황이다. 즉, 메타정보들은 파일로 따로 빼서 관리해야 한다. 그리고 그런 정보들을 주입시키는 어노테이션이 @Value 이다.

 

간단한 코드로 예시를 살펴보면

@Configuration
public class RedisConfig {
    @Value("${spring.data.redis.host}")
    private String redisHost;
    @Value("${spring.data.redis.port}")
    private int redisPort;
}
spring:
  data:
    redis:
      host: my-cache
      port: 6379

application.yml의 redis 관련 값을 설정하고 RedisConfig 클래스에서 @Value 어노테이션을 통해 받아올 수 있다.

그럼 redisHost와 redisPort에 yml에서 설정한 값이 정상적으로 주입된다.

 

@Value의 주입 시점(주의점 1)

위의 코드에서 설정 값이 정상적으로 주입되는 이유는 @Value 어노테이션을 단순히 사용했기 때문이 아니다.

즉, @Value 어노테이션을 사용해서 설정 값이 정상적으로 주입되지 않을 수 있다는 뜻이다.

 

@Value 어노테이션은 대상 컴포넌트가 스프링 컨텍스트에 빈으로 등록되고 의존 관계를 주입하는 시점에 동작한다.

 

즉, 위의 코드는 RedisConfig 클래스를 @Configuration 어노테이션을 통해 스프링 빈으로 등록했기 때문에 해당 빈에 의존 관계를 주입할 때 @Value 어노테이션이 정상적으로 작동한 것이다. 즉, 스프링 컨테이너 안에서 사용해야된다.

 

@Value의 주입 방식(주의점 2)

@Value 어노테이션은 필드 주입, 생성자 주입, setter 주입 등의 방식을 사용할 수 있다.(위의 예시는 필드 주입 방법)

각 상황에 맞는 주입 방식을 사용해야 한다.

 

@Value VS @ConfigurationProperties

@Value 어노테이션과 마찬가지로 @ConfigurationProperties 어노테이션 또한 설정 값을 주입하는 방법이다.

둘의 차이에 대해서 알아보자

 

@Value

1. 단일 값을 주입할 때 사용한다.

2. 또한 RelaxedBinding이 적용되지 않는다. RelaxedBinding이란 프로퍼티의 값의 이름이 조금 달라도 유연하게 바인딩을 시켜주는 규칙을 의미한다. 예를 들어서 context-path가 contextPath에 바인딩 되는 것을 의미한다.

즉, @Value는 정확하게 일치하는 프로퍼티 이름으로만 값 주입이 가능하다.

 

@ConfigurationProperties

1. 값을 클래스로 바인딩할 때 사용한다.

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "my.main-project.person")
public class MyPersonProperties {

	private String firstName;

	public String getFirstName() {
		return this.firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

}

 

2. 또한 RelaxedBinding이 적용된다.

  사용 이유 RelaxedBinding SpEL
@Value 단일 값 주입 RelaxedBinding 적용 X 적용 O
@ConfigurationProperties 클래스로 N개의 값 바인딩 RelaxedBinding 적용 O 적용 X

 

참고 자료

https://mangkyu.tistory.com/207

 

[Spring] @Value와 @ConfigurationProperties의 사용법 및 차이

Spring에서 프로퍼티에 있는 값을 불러오는 다양한 방법들이 있다. 이번에는 대표적인 방식인 @Value와 @ConfigurationProperties의 차이에 대해 알아보도록 하자. 1. @Value와 @ConfigurationProperties의 사용법 및

mangkyu.tistory.com

 

'spring' 카테고리의 다른 글

@Component만 사용하면 안되나요?  (0) 2024.12.12
Servlet(서블릿) 이란?  (0) 2024.11.26
싱글톤 패턴  (0) 2022.11.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함