본문으로 건너뛰기
Advertisement

2.5 환경 변수와 설정 프로퍼티 (application.yml, @ConfigurationProperties)

스프링 부트는 외부 설정을 애플리케이션 코드에서 쉽게 분리할 수 있도록 다양한 방법을 제공합니다. 이 장에서는 application.yml의 활용법과 타입 안정성을 제공하는 @ConfigurationProperties에 대해 알아봅니다.

1. application.properties vs application.yml

스프링 부트는 기본적으로 application.properties 파일을 생성하지만, 계층적 설정이 가능한 YAML 형식이 실무에서 압도적으로 많이 쓰입니다.

application.yml 예제:

server:
port: 8080

spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: password

2. @Value를 이용한 단일 값 주입

가장 간단하게 프로퍼티 값을 주입받는 방법은 @Value 애너테이션을 사용하는 것입니다.

@Service
public class EmailService {

@Value("${spring.mail.host}")
private String mailHost;

public void sendEmail() {
System.out.println("Host: " + mailHost);
}
}
경고

@Value는 간단하지만, 오타가 나거나 값이 없을 때 런타임 에러를 발생시킬 수 있으며 통합된 타입 검사나 자동완성이 부족합니다.

3. @ConfigurationProperties를 이용한 타입 세이프 매핑

실무에서는 설정값들을 논리적으로 묶어 하나의 자바 빈(Bean) 객체로 관리하는 @ConfigurationProperties를 적극 권장합니다.

@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "app.aws.s3")
public class AwsS3Properties {
private String accessKey;
private String secretKey;
private String bucketName;
}

해당 속성을 활성화하려면 메인 클래스에 @ConfigurationPropertiesScan을 추가하거나, 클래스 자체에 @Component를 붙이면 됩니다.

# application.yml
app:
aws:
s3:
access-key: AKIA...
secret-key: aBcd...
bucket-name: my-asset-bucket

@ConfigurationProperties의 이점

  1. IDE에서 강력한 **자동 완성(Auto-completion)**을 지원하여 오타 발생을 막아줍니다.
  2. 애플리케이션 시작 시 타입 불일치 에러를 런타임 전에 확실히 감지해줍니다.
  3. JSR-303(@Validated)와 결합하여 어플리케이션 시작 전에 설정값의 포맷 유효성 검사까지 강제할 수 있습니다.
Advertisement