[Spring] @ConfigurationProperties 다시 보기

snowballnote·2026년 10월 2일

Biz Assist에서 SMTP 설정을 코드 밖으로 빼면서
@ConfigurationProperties를 사용했다.

@ConfigurationProperties(prefix = "biz-assist.mail")
public record BizAssistMailProperties(
        boolean enabled,
        String host,
        int port,
        String username,
        String password,
        String from,
        String to,
        boolean auth,
        boolean starttlsEnabled,
        boolean sslEnabled,
        int connectionTimeout,
        int readTimeout,
        int writeTimeout
) {
}

@ConfigurationProperties가 뭐였지

application.properties에 있는 여러 설정값을
하나의 객체로 묶어서 받아오는 기능이다.

예를 들어 설정이

biz-assist.mail.enabled=false
biz-assist.mail.port=587
biz-assist.mail.auth=true

이렇게 있으면

mailProperties.enabled();
mailProperties.port();
mailProperties.auth();

처럼 사용할 수 있다.

prefix는 뭐지

@ConfigurationProperties(prefix = "biz-assist.mail")

여기서 prefix는
어떤 설정들을 이 객체에 묶을지 정하는 기준이다.

즉

biz-assist.mail.*

로 시작하는 설정값들을
BizAssistMailProperties에 넣는다.

환경변수도 같이 받을 수 있다

Biz Assist에서는 비밀번호 같은 값을
코드에 직접 넣지 않았다.

biz-assist.mail.password=${BIZ_ASSIST_MAIL_PASSWORD:}

이렇게 작성하면

BIZ_ASSIST_MAIL_PASSWORD

환경변수 값이 들어간다.

뒤의 :는 환경변수가 없을 때
기본값을 비워두겠다는 의미다.

포트처럼 기본값이 있는 경우는

biz-assist.mail.port=${BIZ_ASSIST_MAIL_PORT:587}

처럼 작성했다.

@EnableConfigurationProperties

설정 객체를 실제 Spring Bean으로 등록하기 위해
다음 코드도 같이 사용했다.

@EnableConfigurationProperties(BizAssistMailProperties.class)

그러면 다른 Bean을 만들 때

@Bean
JavaMailSender bizAssistJavaMailSender(
        BizAssistMailProperties mailProperties
) {
    ...
}

처럼 주입받아서 사용할 수 있다.

왜 @Value를 여러 개 쓰지 않았을까

설정값 하나 정도라면

@Value("${biz-assist.mail.host}")

처럼 받을 수도 있다.

근데 SMTP 설정은

host
port
username
password
auth
timeout
SSL
STARTTLS

처럼 값이 많았다.

이걸 각각 따로 받기보다
메일 설정이라는 하나의 객체로 묶는 게 더 보기 쉬웠다.

Biz Assist에서는 왜 썼나

메일 서버 설정은
개발 환경마다 달라질 수 있고

아이디나 비밀번호를
소스 코드에 직접 넣을 수도 없었다.

그래서

코드
→ 메일 발송 로직

application.properties
→ 설정 이름과 기본값

환경변수
→ 실제 접속 정보

로 나눴다.

profile
개발자로 이 험난한 세상 살아가기

0개의 댓글