비싼 Twilio 대체하기: Supabase Custom SMS Hook과 이지어스(EasyAuth)로 5분 만에 국내 문자 인증 연동
SMS 인증, 서류 때문에 포기하셨나요?
Supabase로 사이드 프로젝트나 스타트업 MVP를 개발하다 보면 반드시 부딪히는 벽이 있습니다. 바로 **휴대폰 문자 인증(SMS Auth)**입니다.
기본 제공되는 Twilio는 국내 발송 비용이 건당 100~150원 정도로 비싸고, 전송 성공률도 떨어집니다. 그래서 국내 SMS API를 찾아보면 사업자등록증, 이용증명원, 발신번호 사전등록 등 까다로운 서류 절차 때문에 개발 흐름이 끊기기 일쑤입니다.
이 글에서는 서류 없이 5분 만에 시작할 수 있는 **EasyAuth(이지어스)**와 Supabase Custom SMS Hook을 활용해, 비싼 Twilio를 대체하고 빠르고 저렴하게 문자 인증을 구현하는 방법을 소개합니다.
왜 EasyAuth(이지어스)인가요?
1인 개발자나 초기 스타트업에게 복잡한 심사 과정은 사치입니다. EasyAuth는 개발자 친화적인 초간단 SMS API로 다음 장점을 제공합니다.
- 서류 완전 면제: 사업자등록증 없이 바로 가입 및 사용 가능
- 자동 발신번호: 귀찮은 대표번호 사전등록 불필요
- 합리적인 가격: Twilio나 타사(30
50원) 대비 저렴한 건당 1525원 - 무료 체험: 가입 즉시 테스트용 10건 무료 제공
두 개의 API(POST /send, POST /verify)만으로 구성되어 있어 연동이 매우 직관적입니다.
Supabase Custom SMS Hook 연동 가이드
Supabase는 Send SMS Hook을 통해 외부 SMS API를 연결할 수 있는 확장 기능을 제공합니다. Edge Function을 생성하여 EasyAuth API와 연결해 보겠습니다.
Step 1: Supabase Edge Function 생성
먼저 Supabase CLI를 이용해 새로운 Edge Function을 만듭니다.
supabase functions new send-sms-easyauth
Step 2: Edge Function 코드 작성
생성된 supabase/functions/send-sms-easyauth/index.ts 파일에 아래 코드를 작성합니다. Supabase Auth가 생성한 OTP를 EasyAuth의 /send 엔드포인트로 전달하는 로직입니다.
import { serve } from "https://deno.land/std@0.168.0/http/server.ts";
serve(async (req) => {
try {
// Supabase Auth Hook에서 전달받은 payload
const { user, sms } = await req.json();
const { phone, otp } = sms;
// E.164 포맷(+821012345678)을 국내 포맷(01012345678)으로 변환
const formattedPhone = phone.replace('+82', '0');
// EasyAuth API 호출
const response = await fetch("https://api.easyauth.io/send", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${Deno.env.get("EASYAUTH_API_KEY")}`
},
body: JSON.stringify({
phone: formattedPhone,
code: otp // Supabase가 생성한 OTP 전달
})
});
if (!response.ok) {
throw new Error("EasyAuth SMS 발송 실패");
}
return new Response(JSON.stringify({ success: true }), {
headers: { "Content-Type": "application/json" },
status: 200,
});
} catch (error) {
return new Response(JSON.stringify({ error: error.message }), {
headers: { "Content-Type": "application/json" },
status: 500,
});
}
});
Step 3: 환경변수 설정 및 배포
EasyAuth에서 발급받은 API 키를 Supabase 환경변수로 등록하고 함수를 배포합니다.
supabase secrets set EASYAUTH_API_KEY="your_easyauth_api_key"
supabase functions deploy send-sms-easyauth
Step 4: Supabase Dashboard에서 Hook 연결
- Supabase Dashboard로 이동합니다.
- Authentication > Hooks 메뉴로 들어갑니다.
- Send SMS 훅을 활성화하고, 방금 배포한
send-sms-easyauthEdge Function을 선택합니다.
Step 5: 클라이언트에서 로그인 요청
이제 프론트엔드 코드에서 평소처럼 Supabase Auth 메서드를 호출하면 끝입니다! OTP 검증은 Supabase가 자체적으로 처리합니다.
const { data, error } = await supabase.auth.signInWithOtp({
phone: '+821012345678',
});
마무리: 개발의 본질에 집중하세요
인증 기능은 서비스의 핵심이지만, 구현과 행정 처리에 너무 많은 시간을 쏟아서는 안 됩니다. 서류 제출이나 발신번호 등록 같은 번거로운 과정으로 스트레스받지 마세요.
단 5분이면 연동할 수 있는 **EasyAuth(이지어스)**와 Supabase를 조합하면, 토이 프로젝트부터 스타트업 MVP까지 가장 합리적인 비용(건당 15~25원)으로 빠르고 안전하게 SMS 인증을 구축할 수 있습니다.
지금 바로 EasyAuth에 가입하고 가입 시 제공되는 10건의 무료 크레딧으로 직접 테스트해 보세요!