Twilio : 인증을 위한 프로세스 시퀀스 다이어그램

Twilio 인증 프로세스 시퀀스 다이어그램



1. SMS 인증 코드 발송 프로세스

프로세스 설명

  1. 클라이언트가 전화번호 인증을 요청합니다.
  2. 컨트롤러는 요청을 받아 서비스 계층으로 전달합니다.
  3. 서비스는 다음 단계들을 수행합니다:
    • PhoneNumberFormatter를 통해 전화번호 형식을 검증
    • Redis를 통해 요청 제한 확인
    • Twilio API를 호출하여 인증 코드 발송
  4. 인증 시도 정보를 데이터베이스에 저장합니다.
  5. 결과를 클라이언트에게 반환합니다.
PhoneNumberFormatterDatabaseTwilioRedisServiceControllerClientPhoneNumberFormatterDatabaseTwilioRedisServiceControllerClientPOST /api/verification/sms/generatestartPhoneVerification()validatePhoneNumber()checkRateLimit()sendVerificationCode()verificationSidsaveNotification()VerificationResponse200 OK

2. 인증 코드 검증 프로세스

프로세스 설명

  1. 클라이언트가 수신한 인증 코드로 검증을 요청합니다.
  2. 서비스는 다음 검증 단계를 수행합니다:
    • 전화번호 형식 재검증
    • Redis에서 이전 시도 횟수 확인
    • Twilio API를 통해 코드 유효성 검증
  3. 검증 결과에 따라:
    • 성공 시: 시도 횟수 초기화
    • 실패 시: 시도 횟수 증가
  4. 검증 결과를 데이터베이스에 기록합니다.
  5. 최종 결과를 클라이언트에게 반환합니다.
PhoneNumberFormatterDatabaseTwilioRedisServiceControllerClientPhoneNumberFormatterDatabaseTwilioRedisServiceControllerClientalt[is verified][is not verified]POST /api/verification/sms/verifycheckPhoneVerification()validatePhoneNumber()checkAttemptCount()verifyCode()verificationStatusresetAttemptCount()incrementAttemptCount()saveVerificationResult()VerificationResponse200 OK

3. 요청 제한 처리 프로세스

프로세스 설명

  1. 서비스가 RateLimiter에 요청 제한 확인을 요청합니다.
  2. RateLimiter는 Redis에서 현재 요청 횟수를 조회합니다.
  3. 횟수에 따라 다음과 같이 처리됩니다:
    • 제한 초과: 요청 거부
    • 제한 이내: 카운터 증가 및 만료 시간 설정
  4. 처리 결과를 서비스에 반환합니다.
RateLimiterRedisServiceRateLimiterRedisServicealt[count >= limit][count < limit]isRateLimited()get(key)counttrue (limited)increment(key)expire(key, duration)false (not limited)

4. 전화번호 검증 프로세스

프로세스 설명

  1. 서비스가 전화번호 검증을 요청합니다.
  2. PhoneNumberFormatter는 Google의 libphonenumber 라이브러리를 사용하여:
    • 전화번호 파싱
    • 국가 코드 확인
    • 형식 검증
    • 유효성 검사
  3. 검증 결과를 서비스에 반환합니다.
GooglePhoneLibPhoneNumberFormatterServiceGooglePhoneLibPhoneNumberFormatterServicevalidatePhoneNumber()parse()PhoneNumberisValidNumber()booleanvalidation result

5. 알림 저장 프로세스

프로세스 설명

  1. 서비스가 알림 생성을 요청합니다.
  2. NotificationBuilder가 다음 정보를 설정합니다:
    • 알림 유형 (SMS, 이메일 등)
    • 상태 정보
    • 메시지 내용
    • 시간 정보
  3. 생성된 알림을 데이터베이스에 저장합니다.
  4. 저장된 알림 정보를 서비스에 반환합니다.
DatabaseNotificationBuilderServiceDatabaseNotificationBuilderServicebuild()setType()setStatus()setMessage()notificationsave()saved notification

주요 고려사항

에러 처리

  • 각 단계에서 발생할 수 있는 예외 상황 처리
  • 적절한 에러 메시지 반환
  • 실패 시 롤백 처리

보안

  • 요청 제한을 통한 무차별 공격 방지
  • 인증 정보의 안전한 저장
  • 만료 시간 적용

성능

  • Redis를 통한 빠른 응답 처리
  • 비동기 알림 처리
  • 데이터베이스 연결 풀 관리
다음 이전