Axum 웹 프레임워크와 Twilio Verify를 활용해 Rust로 패스워드리스 인증 시스템을 구현하는 튜토리얼이다. SMS OTP 방식으로 비밀번호 없는 로그인을 구현하며, Rustlio 라이브러리로 Twilio API를 통합한다.
핵심 포인트- Axum(웹 프레임워크), Handlebars(템플릿), Rustlio(Twilio SDK), 세션 미들웨어의 4가지 핵심 의존성으로 구성된다.
- 4개 라우트(루트 GET/POST + verify GET/POST)로 전화번호 입력과 OTP 검증을 분리 처리한다.
- Rustlio의 Verify 구조체가 send_verification_token()과 check_verification_token() 메서드로 Twilio API를 추상화한다.
- Axum 세션 미들웨어로 폼 제출 사이에 사용자 전화번호를 유지한다.
- HTML5 tel 입력 모드와 6자리 패턴 검증으로 클라이언트 단 유효성 검사를 처리한다.
상세 정리- 배경: Rust의 강타입 시스템과 안전성을 활용해 패스워드리스 인증을 구현하는 접근이다.
- Cargo 프로젝트 초기화 후 Axum, Handlebars, Rustlio, 세션 크레이트를 의존성에 추가한다.
- Twilio Console에서 Verify 서비스를 생성하고 Account SID, Auth Token, Service SID를 .env에 저장한다.
- send_otp_code() 함수: 전화번호 폼 제출을 받아 세션에 저장하고 Rustlio로 SMS 발송 API를 호출한 뒤 검증 페이지로 리다이렉트한다.
- verify_otp_code() 함수: 세션에서 전화번호를 꺼내 사용자 제출 코드와 함께 Twilio 검증 API에 전달하고 성공/실패 상태를 반환한다.
- Handlebars 템플릿 3개: 전화번호 입력 폼, OTP 코드 입력 폼(6자리 숫자 제한), 검증 결과 페이지.
- cargo run으로 포트 8080에서 서버를 시작해 전화번호 입력→SMS 수신→코드 검증 흐름을 테스트한다.
왜 읽나Rust 백엔드에 SMS 기반 패스워드리스 인증을 도입하려는 개발자에게 Axum 기반 실전 구현 예제로 유용하다.