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
) {
}
application.properties에 있는 여러 설정값을
하나의 객체로 묶어서 받아오는 기능이다.
예를 들어 설정이
biz-assist.mail.enabled=false
biz-assist.mail.port=587
biz-assist.mail.auth=true
이렇게 있으면
mailProperties.enabled();
mailProperties.port();
mailProperties.auth();
처럼 사용할 수 있다.
@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}
처럼 작성했다.
설정 객체를 실제 Spring Bean으로 등록하기 위해
다음 코드도 같이 사용했다.
@EnableConfigurationProperties(BizAssistMailProperties.class)
그러면 다른 Bean을 만들 때
@Bean
JavaMailSender bizAssistJavaMailSender(
BizAssistMailProperties mailProperties
) {
...
}
처럼 주입받아서 사용할 수 있다.
설정값 하나 정도라면
@Value("${biz-assist.mail.host}")
처럼 받을 수도 있다.
근데 SMTP 설정은
host
port
username
password
auth
timeout
SSL
STARTTLS
처럼 값이 많았다.
이걸 각각 따로 받기보다
메일 설정이라는 하나의 객체로 묶는 게 더 보기 쉬웠다.
메일 서버 설정은
개발 환경마다 달라질 수 있고
아이디나 비밀번호를
소스 코드에 직접 넣을 수도 없었다.
그래서
코드
→ 메일 발송 로직
application.properties
→ 설정 이름과 기본값
환경변수
→ 실제 접속 정보
로 나눴다.