Twilio Verify를 활용해 Go로 SMS OTP 기반 패스워드리스 인증 시스템을 구현하는 튜토리얼이다. 비밀번호 없이 전화번호로 로그인하는 흐름 전체를 Go의 net/http, Gorilla Sessions, Twilio Go SDK 조합으로 구성한다.
핵심 포인트- 패스워드리스 인증은 사용자 전화번호 → SMS OTP 발송 → 코드 검증의 3단계 흐름으로 구성된다.
- 4개 라우트(GET/POST "/" + GET/POST "/verify")로 로그인 폼과 OTP 검증 폼을 분리한다.
- Gorilla Sessions로 요청 간 전화번호 상태를 유지하고, Twilio Go SDK로 SMS 발송과 코드 검증을 처리한다.
- 환경 변수(Account SID, Auth Token, Verify Service SID)로 Twilio 인증 정보를 분리 관리한다.
- sendOtpCode()가 OTP를 트리거하고, verifyOtpCode()가 Twilio verification check 엔드포인트로 코드를 검증한다.
상세 정리- 배경: 전통적인 비밀번호는 유출·망각 리스크가 있고, SMS OTP는 모바일 기기를 인증 수단으로 활용해 이를 해소한다.
- 프로젝트 구조: templates/와 assets/ 폴더를 포함한 Go 프로젝트를 생성하고 godotenv, Gorilla 패키지, Twilio SDK를 설치한다.
- 환경 설정: Twilio Console에서 Verify 서비스를 생성하고 Account SID, Auth Token, Verify Service SID를 .env 파일에 저장한다.
- showSignInForm(): html/template으로 전화번호 입력 폼을 렌더링한다.
- sendOtpCode(): 폼 제출 시 전화번호를 세션에 저장하고 Twilio Verify API로 SMS를 트리거한다.
- showVerifyOtpForm(): 6자리 코드 입력 폼을 렌더링한다.
- verifyOtpCode(): 세션의 전화번호와 사용자 입력 코드를 Twilio verification check 엔드포인트로 검증하고 성공/실패 메시지를 반환한다.
- 서버 구성: net/http 패키지 기반으로 포트 8080에서 실행되며 정적 파일 서빙도 포함한다.
- UI: HTML/CSS로 기본 스타일링된 전화번호 입력, OTP 입력, 결과 확인 페이지를 제공한다.
왜 읽나Go로 SMS 기반 패스워드리스 인증을 빠르게 프로토타이핑하려는 백엔드 개발자에게 엔드투엔드 구현 레퍼런스로 유용하다.