본문 바로가기

기록지/강남대학교 멋쟁이사자처럼 지원 페이지

[멋쟁이사자처럼 지원페이지] #3 Email 인증 구현 - (Feat.당근마켓)

반응형

1. 서론

 

 다음 기수를 위한 멋쟁이사자처럼 지원페이지를 제작하던 중 CV에 나와있던 Email에 관련된 불편사항을 해결하고자 하였다. 이렇게까지 하는 이유는 2년전 당근마켓 서류에서 광탈하고 받은 금같은 피드백 때문이다. 해당 피드백을 요약하자면,  "단순히 완성시킨다는 것을 넘어서 점점 발전하는 서비스를 구현하는 사람을 원한다." 이다. 그래서 올해 기수를 모집하며 들어본 여러 불편한 점들을 정리하던 중 가장 시급한 일을 처리하고자 하였다.

 

2. 본론

 

 가장 큰 문제는 바로 Email 인증. 우리 시스템은 1차와 2차 합격 여부를 Email로 전송할 수 있도록 시스템을 설계하였다. 지원자가 100명이 넘었기에 일일이 1차 합격 메일, 2차 합격 메일을 전송하는 것은 좋지 않다고 판단하여 프론트 단에서 메일을 쏴주면 해당 메일로 메일을 전송할 수 있게 하였다. 메일은 다음과 같다.



 사용자의 이름은 자동으로 불러올수록 시스템을 구현하였다.

 

 중요한점은 강남대학생이 아니어도 메일을 입력할 수 있었다는 것... 그래서 가장 먼저 생각한 방법은 강남대학교 도메인으로만 이루어진 메일을 받자는 것이었다. 그러나 결국, 해당 메일만을 알고 있으면 지원서를 제출할 수 있다는 생각이 들었다. 그래서 결국 메일인증을 만들었다.

 

 메일인증의 동작 과정은 다음과 같다.


1. 프론트단에서 메일을 넘겨주고 api를 호출함.

2. 해당 메일로 6자리 난수를 전송하고, 프론트 단에서도 6자리 난수를 보냄.

3. 프론트에서 6자리 난수를 리턴받아 사용자가 입력한 난수와 일치하는지를 판별.


 Gmail 서버를 사용하여 구현하였다. 다음은 간단한 구현코드이다.

 

@Override
    public int sendVerificationMail(AcceptEmailDto acceptEmailDto) throws MessagingException {

        Integer verificationNum = getVerificationNumber();
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);

        helper.setTo(acceptEmailDto.getEmail());
        helper.setSubject("강남대학교 멋쟁이사자처럼 인증메일");

        //템플릿에 전달할 데이터 설정
        Context context = new Context();
        context.setVariable("verificationNum", verificationNum);

        //메일 내용 설정 : 템플릿 프로세스
        String html = templateEngine.process("acceptEmail.html",context);
        helper.setText(html, true);

        //helper.addInline("image1", new ClassPathResource("templates/images/_.png"));
        //helper.addInline("image2", new ClassPathResource("templates/images/.jpg"));

        //메일 보내기
        javaMailSender.send(message);

        return verificationNum;
    }

    public Integer getVerificationNumber() {
        // 난수의 범위 111111 ~ 999999 (6자리 난수)
        Random r = new Random();
        Integer checkNum = r.nextInt(888888) + 111111;
        //System.out.println("인증번호 : " + checkNum);

        return checkNum;
    }

 

3. 결어

 

 사실 내가 잘 하는지도 모르겠다. 하지만 이런식으로 계속 관철하다보면 언젠가는 좋은 기업에서 일하는 날이 올 것이라고 믿는다. 피드백이 이렇게 감사한일인줄은 몰랐다. 화이팅.

반응형