메일을 보내는 메소드가 존재.
해당 메소드는 매일 메일을 받기로 한 모든 유저에게 메일을 보내야 하는 상황이었다.
userUrlMap.forEach((userInterest, url) -> {
try {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
helper.setTo(userInterest.getReceiveEmail());
String title = "title";
helper.setSubject(title);
String htmlContent = getMailHTML(url);
helper.setText(htmlContent, true);
helper.setFrom(fromEmail, fromName);
javaMailSender.send(message);
} catch (Exception e) {
log.info(e.getMessage());
} finally {
userInterest.setIsTodaySendMail(true);
userInterestRepository.saveAndFlush(userInterest);
}
});
메일은 JavaMailSender 를 사용해서 전송 중이었으며, 인원 한 명에게 보내는데 대략 0.5초 가량이 걸리고 있었다.
문제는 메일을 보내야 하는 인원이 증가함에 따라, 전송 시간이 길어졌고, 어느 순간 배포를 진행했다가 배포로 인해 서버가 다운, 메일 전송 메소드가 중도에 끊겨 버리는 이슈가 발생했다.
생각한 해결 방법은 먼저
그래서 결론적으로는 2번을 선택하기로 했다. 3번이 가장 깔끔해 보이기는 하나, 비용 상의 문제로 2번을 선택하고, 추후 비용 문제가 어느 정도 해결되었을 때, 3번으로 변경하기로 한다.