본문 바로가기

Spring Framework

[Spring] Note2. @Configuration @Value

반응형

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