본문으로 건너뛰기

유료 문자 API 대신 내 안드로이드폰으로 무료 SMS 게이트웨이 만들기: Aside·무선 ADB·TextBee 실전 연동기

· 약 7분
Datapopcorn CEO / AI automation educator

오프라인 AI 실습 세미나인 와구와구클럽 신청 시스템을 구축하면서 중요한 문제를 마주했습니다. 신청자가 폼을 제출하면 입금 계좌번호(하나은행)와 본인의 접수 내역 확인 링크(https://datapopcorn.ai/waguwaguclub#my)를 휴대폰 문자(SMS)로 즉시 발송해야 했습니다.

보통은 알리고, 쿨SMS(솔라피), 뿌리오 같은 상용 문자 API를 떠올립니다. 하지만 상용 서비스를 도입하려면 사업자등록증 제출, 통신서비스 이용증명원을 통한 발신번호 사전등록, 건당 10~40원의 유료 충전이라는 번거로운 사전 작업이 필요합니다.

그런데 우리 주머니 속 스마트폰을 보면, 통신사(SKT/KT/LGU+) 요금제에 이미 무제한 무료 문자(SMS/LMS/MMS)가 포함되어 있습니다.

"그렇다면 내 안드로이드 스마트폰을 24시간 가동되는 개인 SMS 게이트웨이 서버로 쓸 수는 없을까?"

오픈소스 SMS 게이트웨이 TextBee와 무선 ADB(Wireless Debugging), AI 브라우저 Aside를 결합해 단 3분 만에 서버리스 Vercel 환경에서 내 폰으로 무료 문자를 자동 발송하는 파이프라인을 구축한 과정을 정리합니다.

이 글에서 다루는 핵심 내용
  1. TextBee 원리: 클라우드 REST API 호출 ➔ 안드로이드 스마트폰 ➔ SIM 카드 무제한 문자로 발송
  2. 장애물 돌파 (무선 ADB): 삼성 갤럭시 One UI 6+의 '보안 위험 자동 차단'을 케이블 없이 Wi-Fi 무선 ADB로 원클릭 우회 설치
  3. Aside 브라우저 조작: 브라우저 에이전트로 API Key 발급 및 기기 페어링 자동화
  4. Next.js & Vercel 실전 코드: 한국 번호(E.164) 처리 및 자동 발송 백엔드 연동

1. TextBee: 안드로이드폰을 SMS 게이트웨이로 만드는 원리​

TextBee는 안드로이드 폰을 프로그래밍 가능한 SMS 게이트웨이로 변환해 주는 오픈소스 도구입니다.

  1. 웹 서비스에서 TextBee REST API로 POST https://api.textbee.dev/api/v1/gateway/send-sms를 요청합니다.
  2. TextBee 클라우드가 내 폰의 백그라운드 앱으로 푸시 신호를 보냅니다.
  3. 휴대폰의 안드로이드 SmsManager가 SIM 카드를 통해 즉시 신청자에게 문자를 발송합니다.
  4. 발송된 문자는 스마트폰의 기본 문자 앱과 구글 메시지 웹(messages.google.com)에도 실시간으로 동기화되어 기록이 남습니다.

컴퓨터(맥북)가 꺼져 있어도, 휴대폰만 켜져 있다면 24시간 언제든 100% 무료로 문자가 발송됩니다.


2. 최신 안드로이드 보안 장벽과 무선 ADB 해결책​

가장 큰 난관은 앱 설치였습니다.

최신 삼성 갤럭시(One UI 6+)에는 **'보안 위험 자동 차단(Auto Blocker)'**과 **'Google Play 프로텍트'**가 기본 탑재되어 있어, SMS 발송 권한을 가진 외부 APK 파일을 브라우저에서 다운로드하면 설치 버튼 자체가 비활성화되거나 차단됩니다.

스마트폰 설정에 들어가 보안 차단을 끄고, 출처 허용을 누르고, 세부 정보 보기에서 '무시하고 설치'를 찾는 과정은 매우 번거롭습니다.

무선 ADB(Wireless Debugging)로 원클릭 우회​

우리는 케이블 연결도 필요 없는 Wi-Fi 무선 ADB를 활용했습니다:

  1. 휴대폰 설정 > 개발자 옵션 > 무선 디버깅 켜기
  2. 맥북 터미널에서 mDNS로 자동 검색된 기기에 연결:
    adb connect 192.168.0.28:39285
  3. 터미널 명령 한 줄로 보안 경고를 건너뛰고 APK 설치 및 모든 권한을 일괄 승인:
    # 1. APK 설치 (-g 옵션으로 런타임 권한 자동 부여)
    adb install -r -g -d /tmp/textbee.apk

    # 2. SMS 및 백그라운드 알림 권한 승인
    adb shell pm grant com.vernu.sms android.permission.SEND_SMS
    adb shell pm grant com.vernu.sms android.permission.READ_PHONE_STATE
    adb shell pm grant com.vernu.sms android.permission.POST_NOTIFICATIONS

    # 3. 백그라운드 절전 모드(배터리 최적화) 예외 등록
    adb shell dumpsys deviceidle whitelist +com.vernu.sms

    # 4. 앱 실행
    adb shell monkey -p com.vernu.sms -c android.intent.category.LAUNCHER 1

이 명령들이 실행되면 폰 화면에 어떠한 보안 경고나 팝업도 뜨지 않고 깔끔하게 앱이 설치되고 실행됩니다.


3. 실제 화면으로 보는 단계별 설정 과정​

1단계: Aside 브라우저로 API Key 발급​

AI 브라우저 Aside CLI(aside repl)를 통해 textbee.dev/dashboard에 접속하고 **[Add API key] ➔ [Generate API Key]**를 실행했습니다.

Aside 브라우저에서 생성된 TextBee 대시보드 API Key 및 QR 코드 화면

Aside 브라우저에서 자동으로 생성된 API Key와 기기 페어링 QR 코드 모달. (보안을 위해 실제 키 값은 마스킹 처리되었습니다)

2단계: 안드로이드 폰에서 앱 실행​

무선 ADB로 앱을 실행하면 환영 화면이 나타납니다.

TextBee 안드로이드 앱 첫 실행 환영 화면

TextBee 앱의 시작 화면. [Get Started]를 누르면 기기 연결 단계로 진입합니다.

3단계: QR 코드 스캔 또는 API 키 등록​

Aside 브라우저에 떠 있는 QR 코드를 폰 카메라로 비추거나 수동으로 API Key를 입력합니다.

TextBee 계정 연결 화면

화면의 QR 코드를 비추면 QR scanned successfully 메시지와 함께 1초 만에 계정이 연결됩니다.

4단계: 기기 이름 확인 및 등록​

기기 이름(samsung SM-S906N)을 확인하고 등록을 진행합니다.

디바이스 이름 설정 및 등록 화면

[Register Device] 버튼을 누르면 클라우드 게이트웨이에 내 기기가 고유 ID로 등록됩니다.

5단계: 필수 권한 자동 검증​

앞서 무선 ADB로 권한을 부여해 두었기 때문에, 모든 필수 권한(Send SMS, Receive SMS, Phone State, Notifications)이 이미 초록색 체크(Granted) 상태로 완료되어 있습니다.

SMS 발송 및 알림 권한 완료 화면

무선 ADB 명령으로 모든 권한과 배터리 최적화 예외가 사전 적용되어 추가 터치 없이 즉시 통과합니다.

6단계: 게이트웨이 연동 완료​

모든 설정이 완료되고 나만의 고유 Device ID가 발급되었습니다.

TextBee 연동 완료 화면

"You're all set!" 화면. 발급된 고유 Device ID를 서버 환경 변수에 등록하면 즉시 문자를 전송할 수 있습니다.


4. Next.js 백엔드 연동 실전 코드​

이제 Vercel에 배포된 Next.js 백엔드에서 문자를 쏘는 유틸리티(lib/wagu-sms.ts)를 작성합니다.

4-1. 한국 전화번호 E.164 국제 규격 변환​

TextBee API는 E.164 포맷(+821012345678)을 권장합니다. 하이픈 제거 및 010 앞자리 변환 함수를 작성합니다.

export function toE164(phone: string): string {
const digits = phone.replace(/[^0-9]/g, '');
if (digits.startsWith('82')) return `+${digits}`;
if (digits.startsWith('0')) return `+82${digits.slice(1)}`;
return `+82${digits}`;
}

4-2. 문자 발송 함수 작성​

export async function sendTextBeeSms(recipientPhone: string, message: string) {
const apiKey = process.env.TEXTBEE_API_KEY;
const deviceId = process.env.TEXTBEE_DEVICE_ID;

if (!apiKey) {
console.warn('[SMS] TEXTBEE_API_KEY 미설정으로 발송 생략');
return { success: false, error: 'NO_API_KEY' };
}

const endpoint = deviceId
? `https://api.textbee.dev/api/v1/gateway/devices/${deviceId}/send-sms`
: 'https://api.textbee.dev/api/v1/gateway/send-sms';

try {
const res = await fetch(endpoint, {
method: 'POST',
headers: {
'x-api-key': apiKey,
'Content-Type': 'application/json',
},
body: JSON.stringify({
recipients: [toE164(recipientPhone)],
message,
}),
signal: AbortSignal.timeout(10000),
});

const data = await res.json().catch(() => ({}));
return { success: res.ok, data };
} catch (err: any) {
console.error('[SMS] 발송 실패:', err?.message);
return { success: false, error: err?.message };
}
}

4-3. 신청 접수 API에 문자 발송 연결​

신청서 제출 API(/api/wagu/register)에서 구글 시트에 행을 추가한 직후, 신청자 번호로 계좌 정보와 마이페이지 링크를 전송합니다.

// 구글 스프레드시트 기록 후 SMS 발송
try {
await sendWaguRegistrationSms({
phone: s.phone,
name: s.name,
courseName: course.name,
session: s.session,
amount: course.amount,
depositor: s.depositor,
});
} catch (smsErr) {
// SMS 발송 오류가 신청서 접수 트랜잭션을 깨지 않도록 안전 격리
console.error('[Wagu Register] SMS 발송 에러:', smsErr);
}

5. 실전 테스트 및 운영 팁​

터미널에서 즉시 1초 테스트​

Vercel에 환경 변수를 등록한 뒤, 테스트 엔드포인트로 문자를 발송해 봅니다:

curl -X POST https://datapopcorn.ai/api/wagu/sms/test \
-H "Content-Type: application/json" \
-d '{"phone": "010-XXXX-XXXX"}'

호출 즉시 제 갤럭시폰 상단 알림에 문자가 발송되었다는 시스템 노티가 뜨고, 수신자 폰에 1초 만에 깔끔한 장문 안내 문자가 도착했습니다!

통신사 일일 발송 한도 주의사항​

국내 이동통신 3사(SKT, KT, LGU+)는 개인용 요금제의 스팸 방지를 위해 다음과 같은 일일 발송 규정이 있습니다:

  • 일반 권장 한도: 하루 150~200건까지는 완전 무료 및 제한 없음
  • 모임·세미나·소규모 웹앱: 신청자 접수 확인, 예약 확인 알림 등 하루 수십~100건 안팎의 볼륨에는 추가 비용 0원으로 완벽하게 작동합니다.
  • 대량 마케팅 단체 문자는 전문 대량 발송 업체를 이용하되, 1인 비즈니스나 검증 단계의 알림용으로는 이보다 가성비 좋은 대안이 없습니다.

마치며​

유료 API 계약과 통신사 서류 제출 없이, 내가 이미 매달 내고 있는 휴대폰 요금제의 무료 문자를 웹 서비스의 백엔드 알림 채널로 확장했습니다.

  • 비용: 0원 (기존 통신사 요금제 활용)
  • 속도: API 호출 후 스마트폰 전송까지 약 1~2초
  • 편의성: 무선 ADB로 보안 차단 없는 무중단 원클릭 셋업

본인 서비스나 사내 자동화에 문자 알림이 필요하다면, 서랍 속 잠자고 있는 안드로이드 공기계나 지금 쓰고 있는 스마트폰으로 나만의 SMS 게이트웨이를 구축해 보세요!