이메일 발송 기능을 만들던 중 빌드를 돌렸더니 에러가 터졌다. 분명 WAS를 구동할 때는 잘 돌아갔는데 왜 다른 테스트들이 터지는지 의문이었다.
스프링 빈들이 모두 생성이 안되었다. 원래는 테스트까지 잘 동작했기 때문에 새로 만든 기능에서 스프링 빈 설정을 안한 부분이 있나 찾아보았지만, 모두 빈 주입을 잘 하고 있었다.
그러던 중 아래의 로그에 JavaMailSender 클래스의 빈이 등록이 안되었다고 한다! 필자는 JavaMailSender를 사용하긴 했지만, 해당 클래스의 설정으로 보낼 이메일을 구성하지는 않았다.
하지만 스프링 자체는 JavaMailSender라는 빈에 설정 값을 기반으로 빌드를 했기 때문에 아래와 같은 에러가 난 것 같다.
그래서 JavaMailSender의 설정 파일을 추가해주고 다시 돌렸더니 깔끔하게 성공한다!
@Configuration
public class JavaMailSenderConfig {
@Value("${spring.mail.host}")
private String host;
@Value("${spring.mail.port}")
private Integer port;
@Value("${spring.mail.username}")
private String adminMail;
@Value("${spring.mail.password}")
private String adminPassword;
@Bean
public JavaMailSender javaMailService() {
final JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost(host);
javaMailSender.setUsername(adminMail);
javaMailSender.setPassword(adminPassword);
javaMailSender.setPort(port);
javaMailSender.setJavaMailProperties(getMailProperties());
return javaMailSender;
}
private Properties getMailProperties() {
Properties properties = new Properties();
properties.setProperty("mail.transport.protocol", "smtp");
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.starttls.enable", "true");
properties.setProperty("mail.smtp.ssl.enable","true");
return properties;
}
}
스프링 자체가 JavaMailSender의 설정으로 동작하니, 나도 기존에 작성했던 MimeMessage가 아닌 JavaMailSender 설정을 기반으로 서비스 로직을 다시 짜봐야 할 것 같다.
그렇지 않으면 애플리케이션에서는 사용할 필요가 없는 Configuration 클래스가 되어버릴테니 말이다!