안드로이드 기반 SMS OTP 전송 시스템 구축 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
앱 개발, DevOps
대상자
- 초보 백엔드 개발자/에스컬레이션 해커
- 로컬 환경에서 OTP 시스템 테스트를 원하는 개발자
- Termux와 Python 활용한 자동화 기술 학습자
핵심 요약
- 📱 Termux + Python + Cloudflare Tunnel 조합으로 로컬 OTP 서버 구축 가능
- Flask 기반 HTTP 서버에서
termux-sms-send
명령어를 활용한 SMS 자동 전송 구현 - 포트 포워딩을 통해 로컬 서버를 외부에서 접근 가능하게 하는 기술적 핵심
섹션별 세부 요약
1. 개발 환경 구성
- Termux 설치
- F-Droid에서 Termux 및 Termux:API 앱 설치
- pkg install python
및 pip install flask
명령어로 Python 환경 구성
- 필요 라이브러리 설치
- termux-api
패키지 설치로 Android SMS API 접근 가능
- flask
설치로 웹 서버 구동
2. OTP 전송 서버 구현
- sms_sender.py 스크립트 구성
```python
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
if self.path == "/send-sms":
data = json.loads(self.rfile.read(...))
command = f'termux-sms-send -n {data["phone"]} "Your OTP is {data["otp"]}"'
os.system(command) # Termux 명령어 실행
```
- HTTP 8080 포트에서 서버 실행
- HTTPServer(server_address, RequestHandler)
실행
3. 포트 포워딩 기술
- 로컬 서버 외부 노출 방법
- Cloudflare Tunnel 또는 Ngrok 사용
- cloudflared tunnel --url http://localhost:8080
명령어로 공개 URL 생성
- 외부 요청 처리 흐름
- 외부에서
POST http://public-url/send-sms
요청 - Termux 서버에서
termux-sms-send
명령어 실행 - Android 기기로 SMS 전송
4. 완전한 OTP 시스템 연동
- 백엔드 통합 예시
- Node.js + MongoDB에서 OTP 생성 및 저장
- 생성된 OTP를 Termux 서버로 전송
- 사용자 입력 OTP와 데이터베이스 값 비교
결론
- Cloudflare Tunnel 또는 Ngrok 사용으로 로컬 서버를 외부에 노출하는 것이 핵심
- termux-sms-send 명령어를 활용한 SMS 자동 전송은 제3자 SMS API 없이도 가능
- Flask + Python 기반으로 가볍고 빠른 OTP 서버 구축 가능