(백)
단순 메일 전송이 아니라 아래와 같이 실제 서비스 수준의 이메일 인증 시스템 전체 플로우를 구축
인증번호 생성 → 저장 → 만료 처리(5분) → 재전송 로직 → 로그 기록 → 재시도 처리(MAX_RETRY)까지 완성된 구조를 설계
Redis 같은 외부 캐시 서버 없이도 만료·저장 구조를 정교하게 구현하여 보안성과 편의성을 동시에 확보
메일 전송 실패 시 자동 재시도(MAX_RETRY)를 적용해 실제 배포 환경에서의 안정성 확보
모든 메일 전송 시도(성공/실패)를 DB(Log 테이블)에 기록하여 운영 중 문제가 발생했을 때 원인 추적이 가능하도록 설계
아래는 실제 서비스에서 사용된 메일 발송/로깅/재시도 구현 코드임



(프론트)
SignupEmailActivity):
인증 요청 버튼이 활성화되도록 설정인증 요청 버튼을 클릭하면, 백엔드로 이메일 인증 코드 발송 요청을 보내는 API를 호출SignupVerificationActivity):
재전송 버튼을 제공하여 이메일 인증번호를 다시 받을 수 있도록 함.onSaveInstanceState()와 onRestoreInstanceState()를 사용하여 입력한 이메일과 인증번호를 저장하고 복원
(백)