Twilio 인증 프로세스 시퀀스 다이어그램
1. SMS 인증 코드 발송 프로세스
프로세스 설명
- 클라이언트가 전화번호 인증을 요청합니다.
- 컨트롤러는 요청을 받아 서비스 계층으로 전달합니다.
- 서비스는 다음 단계들을 수행합니다:
- PhoneNumberFormatter를 통해 전화번호 형식을 검증
- Redis를 통해 요청 제한 확인
- Twilio API를 호출하여 인증 코드 발송
- 인증 시도 정보를 데이터베이스에 저장합니다.
- 결과를 클라이언트에게 반환합니다.
2. 인증 코드 검증 프로세스
프로세스 설명
- 클라이언트가 수신한 인증 코드로 검증을 요청합니다.
- 서비스는 다음 검증 단계를 수행합니다:
- 전화번호 형식 재검증
- Redis에서 이전 시도 횟수 확인
- Twilio API를 통해 코드 유효성 검증
- 검증 결과에 따라:
- 성공 시: 시도 횟수 초기화
- 실패 시: 시도 횟수 증가
- 검증 결과를 데이터베이스에 기록합니다.
- 최종 결과를 클라이언트에게 반환합니다.
3. 요청 제한 처리 프로세스
프로세스 설명
- 서비스가 RateLimiter에 요청 제한 확인을 요청합니다.
- RateLimiter는 Redis에서 현재 요청 횟수를 조회합니다.
- 횟수에 따라 다음과 같이 처리됩니다:
- 제한 초과: 요청 거부
- 제한 이내: 카운터 증가 및 만료 시간 설정
- 처리 결과를 서비스에 반환합니다.
4. 전화번호 검증 프로세스
프로세스 설명
- 서비스가 전화번호 검증을 요청합니다.
- PhoneNumberFormatter는 Google의 libphonenumber 라이브러리를 사용하여:
- 전화번호 파싱
- 국가 코드 확인
- 형식 검증
- 유효성 검사
- 검증 결과를 서비스에 반환합니다.
5. 알림 저장 프로세스
프로세스 설명
- 서비스가 알림 생성을 요청합니다.
- NotificationBuilder가 다음 정보를 설정합니다:
- 알림 유형 (SMS, 이메일 등)
- 상태 정보
- 메시지 내용
- 시간 정보
- 생성된 알림을 데이터베이스에 저장합니다.
- 저장된 알림 정보를 서비스에 반환합니다.
주요 고려사항
에러 처리
- 각 단계에서 발생할 수 있는 예외 상황 처리
- 적절한 에러 메시지 반환
- 실패 시 롤백 처리
보안
- 요청 제한을 통한 무차별 공격 방지
- 인증 정보의 안전한 저장
- 만료 시간 적용
성능
- Redis를 통한 빠른 응답 처리
- 비동기 알림 처리
- 데이터베이스 연결 풀 관리