회원가입 휴대전화 인증받기

kms·2024년 5월 22일

hotelking

목록 보기
2/3

대부분의 서비스(특히 결제와 관련된 서비스)의 경우에는 이메일 혹은 휴대전화 인증을 필수로 받는다.
이메일인증도 좋지만, 나중에 서비스에서도 필수적으로 받아야할 정보이고 활용가치가 높다면 아무래도 이메일인증보다는 휴대전화 인증이 더 간편할 것이다.

왜냐하면 이메일의 경우 인증하려고 하는 이메일을 또 다시 들어가야 하기 때문에 만약 해당 이메일 계정 비밀번호를 까먹었다면 계정 비밀번호를 찾는 번거러운 과정을 거쳐야하기 때문이다.

아래의 경우 회원가입시 휴대전화 인증을 필수로 받아야하는 상황을 가정하여 설계하였다.
만약 소셜로그인을 사용한다면, 소셜로그인을 이용했을 경우에는 인증된 휴대폰번호를 받을 수 없기 때문에 반드시 추가적으로 휴대번호을 기입한 후 회원가입이 이루어지도록 합니다.

이해를 돕기위해 아래와 같은 폼 형식이라고 가정합니다.

여러가지 SMS 기능을 제공하는 서드파티 앱 중에서 Twilo 를 기준으로 했습니다.
최종적으로 사용자가 가입하기 버튼을 누르기전에 반드시 휴대전화 인증을 거쳐야 회원가입이 완료됩니다.

아이디어

  1. 서버에서 휴대폰번호가 인증되었는 지를 체크하기 위해 별도의 저장공간을 둡니다.
  2. 인증번호는 서버에서 생성합니다. 이를 통해 각 휴대폰에 대한 인증번호를 추적할 수 있도록 합니다.
  3. 2번을 달성하기 위해 클라이언트에서 바로 SMS 서드파티앱으로 휴대폰 인증 요청을 하지 않고, 자체적으로 만든 서버를 거쳐서 인증하도록 합니다.

flow (1 ~ 9)

  1. 사용자는 휴대폰 번호를 입력한 후 "인증번호 받기" 버튼을 눌러 서버로 휴대폰 번호를 전송합니다.
  2. 서버는 발송하기 위한 랜덤의 새로운 인증번호 4자리를 만듭니다(9999).
  3. 만든 인증번호를 휴대폰 번호와 함께 저장합니다.
    3-1. 만료시간이 있다면? RDBMS 의 경우 생성시간+지속시간을 더한 만료일을 같이 저장합니다. Redis 를 사용한다면 제한 시간이 만료되면 키가 자동으로 삭제되도록 expire 를 사용하여 저장합니다.
  4. SMS 서드파티를 이용하여 휴대폰 번호로 인증번호를 전송합니다.
  5. 서버는 SMS 서드파티로 부터 성공 응답을 받습니다.
  6. 서버는 유저에게 성공 응답을 보냅니다.
  7. 사용자는 받은 인증번호를 입력한 후 가입하기 버튼을 눌러 최종적으로 회원가입 요청을 합니다.
인증번호 검증 및 회원가입
  1. 서버는 휴대번호와 인증번호가 DB 에 저장되어 있는 지 확인합니다.
    8-1. 이때 저장된 휴대폰 번호가 없거나 인증번호가 없는 경우 유저에게 에러를 응답합니다.
  2. 추가적인 Validation 을 진행한 후 사용자를 DB에 저장한 후 성공 응답을 응답합니다.

휴대폰인증을 미리 하는 경우

인증코드가 올바른지 유무를 회원가입하는 시점이 아니라 진짜 회원가입 이전에 검증받고 싶다면 어떻게 해야할까?
사실 8번의 과정을 진행할 수 있도록 하는 별도의 /verification-phone 이라고 하는 API 를 만들면 될 것이다.

그리고 최종 회원가입 요청 body 에는 isPhoneValid 필드를 추가해서 휴대폰 인증번호를 검증 받았는 지 여부를 서버가 알 수 있도록 한다.

{
  ... 
  "isPhoneValid": true
}

SMS 휴대폰인증 방식이 아니라 휴대폰 본인인증을 통한 (PASS 앱을 이용한 휴대폰 본인인증) 방식의 경우에는 인증번호를 저장하는 로직이 없어질 것이다. 왜냐하면 모든 인증자체를 알아서 해주기 때문이다.

출처

https://www.nhncloud.com/kr/service/notification/sms
https://blog.useb.co.kr/verification

0개의 댓글