비트베이크

비싼 Twilio 대체하기: Supabase Custom SMS Hook과 이지어스(EasyAuth)로 5분 만에 국내 문자 인증 연동

2026-04-11T01:01:29.943Z

developer security interface

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원) 대비 저렴한 건당 15~25원
  • 무료 체험: 가입 즉시 테스트용 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 연결

  1. Supabase Dashboard로 이동합니다.
  2. Authentication > Hooks 메뉴로 들어갑니다.
  3. Send SMS 훅을 활성화하고, 방금 배포한 send-sms-easyauth Edge 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건의 무료 크레딧으로 직접 테스트해 보세요!

비트베이크에서 광고를 시작해보세요

광고 문의하기

다른 글 보기

2026-06-04T01:04:15.823Z

The 2026 E-Commerce New Product Launch Survival Formula: Dominating Platform Search Rankings in 7 Days via Reward-Based Trials and Purchase Verification

2026-06-04T01:04:15.800Z

2026 이커머스 신제품 론칭 생존 공식: 리워드형 체험단과 구매 인증으로 7일 만에 플랫폼 검색 랭킹 장악하기

2026-06-01T01:01:58.264Z

Surviving the 2026 Cookieless Era for B2C: Building Zero-Party Data with Reward-Based Quiz Marketing

2026-06-01T01:01:58.231Z

2026 쿠키리스 시대의 B2C 생존법: 리워드 기반 퀴즈 마케팅으로 제로파티 데이터 구축하기

서비스

피드자주 묻는 질문고객센터

문의

비트베이크

레임스튜디오 | 사업자 등록번호 : 542-40-01042

경기도 남양주시 와부읍 수례로 116번길 16, 4층 402-제이270호

트위터인스타그램네이버 블로그