Note1. @Configuration & @Value Annotation
@Configuration
해당 클래스가 스프링의 설정 정보를 담고 있음을 나타낸다.
스프링 컨테이너는 @Configuration 어노테이션이 붙은 클래스를 스프링빈 정의를 위한 소스로 사용하며, 내부적으로는 CGLIB 라이브러리 내부의 프록시 객체를 생성해 @Bean이 여러번 호출되더라도 언제든지 동일한 싱글톤 객체를 반환하도록 보장해준다.
@Value
외부 설정 파일 application.propeties, application.yml 과 같이 시스템 환경 변수에 정의된 값을 필드나 파라미터에 주입할 때 사용한다.
${property.name} 형식으로 사용하며 스프링이 관리하는 객체 안에서만 동작한다는 점에 유의하자.
(new, static 같이 직접 생성한 객체에서는 값이 주입되지 않는다)
Note2. @Value는 어떻게 설정값을 읽어오는가
스프링은 애플리케이션 실행 시 설정 파일을 찾아 로드한다.
스프링 부트 내부의 PropertySourceLoader Component는 application.yml, application.properties 같은 파일을 읽어 Key-Value 형태로 PropertySource 객체에 담아 "Enviroment Interface"에 저장한다.
Enviroment에는 application.yml, 시스템 환경변수, 명령줄 인수 등 다양한 환경값이 통합되어 관리된다.
따라서 application.yml은 스프링 빈이 아니더라도 @Value가 값을 읽어올 수 있는 것이다.
Note3. S3 Example Code
다음은 AWS의 S3서비스를 사용하기 위해 정의한 S3Config 코드이다.
@Configuration
public class S3Config {
@Value("${aws.s3.access-key}")
private String accessKey;
@Value("${aws.s3.secret-key}")
private String secretKey;
@Value("${aws.s3.region}")
private String region;
@Bean
public S3Client s3Client() {
AwsBasicCredentials awsCredentials = AwsBasicCredentials.create(accessKey, secretKey);
return S3Client.builder()
.region(Region.of(region))
.credentialsProvider(StaticCredentialsProvider.create(awsCredentials))
.build();
}
}
'🌱 Spring Framework' 카테고리의 다른 글
| [Spring] Note1. Flyway Setting (0) | 2026.02.15 |
|---|---|
| [Spring] Note0. ResponseEntity (0) | 2026.02.14 |