<aside> 👉
</aside>
@Service
@RequiredArgsConstructor
public class EmailService {
private final JavaMailSender emailSender;
public void sendEmail(EmailRequest emailRequest) {
MimeMessage emailForm = createEmailForm(emailRequest);
emailSender.send(emailForm);
}
}
public record EmailRequest(
String recipient,
String subject,
String text
) { }
private MimeMessage createEmailForm(EmailRequest emailRequest) {
try {
MimeMessage message = emailSender.createMimeMessage();
message.addRecipients(TO, emailRequest.recipient());
message.setSubject(emailRequest.subject());
message.setText(emailRequest.text(), "utf-8", "html");
return message;
} catch (Exception e) {
throw new CustomCommonException(CommonErrorCode.UNABLE_TO_SEND_EMAIL);
}
}
@Timer
public void sendEmail(EmailRequest emailRequest) {
...
}
public class EmailTest extends IntegrationTest {
@Autowired
private EmailService emailService;
// JavaMailSender의 기능을 그대로 사용하며, Mock 객체의 기능인 실행 횟수 검증 사용을 위해서 @SpyBean 선언
@SpyBean
private JavaMailSender mailSender;
@Test
public void 메일_전송_성공() {
// given
final EmailRequest emailRequest = EmailRequest.builder()
.recipient("[email protected]")
.subject("테스트 메일")
.text("메일 내용")
.build();
// when
emailService.sendEmail(emailRequest);
// then
verify(mailSender, times(1)).send((MimeMessage) any());
}
}
c.l.ordermanage.common.timer.TimerAop : sendEmail - total time : 3.408221792초
<aside> <img src="/icons/question-mark_red.svg" alt="/icons/question-mark_red.svg" width="40px" />
메일 전송 시, 3초 정도의 시간이 걸리는 이유