비트베이크

[PocketBase] 1인 개발자를 위한 완벽한 스택: 서류 없이 JS Hooks로 5분 만에 SMS 인증 구현하기

2026-05-29T01:01:49.922Z

Close-up of a laptop screen displaying programming code, suitable for developer and security-related content with a clean, modern aesthetic.

[PocketBase] 1인 개발자를 위한 완벽한 스택: 서류 없이 JS Hooks로 5분 만에 SMS 인증 구현하기

혼자서 빠르게 MVP(최소 기능 제품)를 만들어야 하는 1인 개발자나 사이드 프로젝트 빌더들에게 백엔드 구축은 언제나 큰 허들입니다. 개발 속도를 높이기 위해 Firebase나 Supabase 같은 BaaS를 선택하기도 하지만, 커스텀 로직이 필요할 때는 아쉬움이 남습니다.

그런데 여기, 단일 파일로 실행되는 초경량 오픈소스 백엔드 PocketBase가 있습니다. 게다가 Go 언어를 몰라도 JavaScript로 서버 로직을 작성할 수 있는 JS Hooks 기능까지 지원하죠.

하지만 백엔드를 아무리 빨리 구축해도, 한국에서 서비스 필수 요소인 **'휴대폰 SMS 본인인증'**을 연동하려고 하면 숨이 턱 막힙니다. 사업자등록증, 통신사 가입 증명원 등 수많은 서류를 제출하고, 발신번호를 사전 등록한 뒤 심사 통과까지 며칠을 기다려야 하기 때문입니다.

이 글에서는 단 1개의 파일로 끝나는 PocketBase와 **서류 제출이 전혀 필요 없는 SMS API인 EasyAuth(이지어스)**를 조합하여, 단 5분 만에 완벽한 SMS 본인인증 API를 구축하는 방법을 소개합니다.


왜 PocketBase와 EasyAuth의 조합인가?

1. PocketBase JS Hooks: 극강의 생산성

PocketBase는 내장된 Goja(V8 호환) 엔진을 통해 pb_hooks 폴더 안에 JavaScript 파일만 넣으면 서버 사이드 라우팅과 비즈니스 로직을 즉시 확장할 수 있습니다. 복잡한 서버 세팅 없이 바로 API 엔드포인트를 만들 수 있죠.

2. EasyAuth: 1인 개발자의 구원투수

기존 SMS API 서비스들의 높은 진입장벽을 완벽히 허물어버린 개발자 친화적 서비스입니다.

  • 서류 100% 면제: 사업자등록증이나 이용증명원이 필요 없습니다.
  • 즉시 시작: 가입부터 API Key 발급, 연동까지 5분이면 충분합니다.
  • 자동 발신번호: 귀찮은 발신번호 사전 등록 절차가 생략됩니다.
  • 합리적 가격: 건당 15~25원으로 기존(30~50원) 대비 절반 수준의 비용을 자랑합니다.

튜토리얼: 5분 만에 SMS 인증 API 만들기

지금부터 PocketBase의 JS Hooks를 활용해 클라이언트에게 SMS 인증번호를 발송(POST /send)하고 검증(POST /verify)하는 커스텀 API 엔드포인트를 만들어 보겠습니다.

Step 1. 사전 준비

  1. PocketBase 공식 홈페이지에서 실행 파일을 다운로드 받습니다.
  2. EasyAuth 홈페이지에 가입하고 무료 체험 10건과 함께 API Key를 발급받습니다.

Step 2. pb_hooks 폴더 및 파일 생성

PocketBase 실행 파일이 있는 디렉토리에 pb_hooks라는 폴더를 생성하고, 그 안에 main.pb.js 파일을 만듭니다.

project-folder/
├── pocketbase (실행 파일)
└── pb_hooks/
    └── main.pb.js

Step 3. /api/sms/send 엔드포인트 구현

클라이언트로부터 전화번호를 받아 EasyAuth의 /send API를 호출하는 로직을 작성합니다. PocketBase JS Hooks 내장 객체인 $http.send를 활용합니다.

// pb_hooks/main.pb.js

// 1. SMS 인증번호 발송 API
routerAdd("POST", "/api/sms/send", (e) => {
    // 클라이언트가 보낸 데이터 추출
    const body = $apis.requestInfo(e).data;
    const phone = body.phone;

    if (!phone) {
        return e.json(400, { error: "전화번호(phone)는 필수입니다." });
    }

    try {
        // EasyAuth 발송 API 호출
        const res = $http.send({
            url: "https://api.easyauth.co/send",
            method: "POST",
            body: JSON.stringify({ phone: phone }),
            headers: {
                "Content-Type": "application/json",
                "Authorization": "Bearer YOUR_EASYAUTH_API_KEY" // 발급받은 API 키 입력
            }
        });

        // EasyAuth의 응답을 클라이언트에게 그대로 전달
        return e.json(200, res.json);
    } catch (err) {
        return e.json(500, { error: "SMS 발송에 실패했습니다.", details: err.message });
    }
});

Step 4. /api/sms/verify 엔드포인트 구현

사용자가 입력한 인증번호를 검증하는 로직입니다. EasyAuth의 /verify API는 번호와 코드를 받아 즉시 검증 결과를 반환하므로 백엔드에서 별도의 DB 캐싱이나 Redis 세팅이 필요 없습니다.

// 2. SMS 인증번호 검증 API
routerAdd("POST", "/api/sms/verify", (e) => {
    const body = $apis.requestInfo(e).data;
    const phone = body.phone;
    const code = body.code;

    if (!phone || !code) {
        return e.json(400, { error: "전화번호(phone)와 인증번호(code)가 필요합니다." });
    }

    try {
        // EasyAuth 검증 API 호출
        const res = $http.send({
            url: "https://api.easyauth.co/verify",
            method: "POST",
            body: JSON.stringify({ phone: phone, code: code }),
            headers: {
                "Content-Type": "application/json",
                "Authorization": "Bearer YOUR_EASYAUTH_API_KEY"
            }
        });

        return e.json(200, res.json);
    } catch (err) {
        return e.json(500, { error: "검증에 실패했습니다.", details: err.message });
    }
});

Step 5. 서버 실행 및 테스트

이제 터미널에서 PocketBase를 실행합니다.

./pocketbase serve

서버가 시작되면 즉시 API를 테스트해 볼 수 있습니다. Postman이나 cURL을 사용해 보세요.

발송 테스트:

curl -X POST http://127.0.0.1:8090/api/sms/send \
  -H "Content-Type: application/json" \
  -d '{"phone": "01012345678"}'

검증 테스트:

curl -X POST http://127.0.0.1:8090/api/sms/verify \
  -H "Content-Type: application/json" \
  -d '{"phone": "01012345678", "code": "123456"}'

실무 팁 및 Best Practices (보안 고려사항)

위의 코드만으로도 훌륭하게 작동하지만, 실제 프로덕션 환경에서는 다음 사항들을 고려하면 더욱 안전한 애플리케이션을 만들 수 있습니다.

  1. 환경 변수 사용하기 API 키를 코드에 직접 하드코딩하는 것은 위험합니다. 운영체제 환경변수를 설정하고 process.env (또는 PocketBase의 $os.getenv())를 통해 API 키를 불러오는 것을 권장합니다.

    const apiKey = $os.getenv("EASYAUTH_API_KEY");
    
  2. 클라이언트 측 번호 검증 서버로 API 요청을 보내기 전, 프론트엔드에서 전화번호 형식이 올바른지 정규식으로 1차 검증을 거치면 불필요한 API 호출을 막아 비용을 절감할 수 있습니다.

  3. Rate Limiting (호출 제한) 악의적인 사용자가 SMS 발송 API를 무단으로 연속 호출하는 것을 방지하기 위해 프론트엔드에 타이머를 두거나, PocketBase 내부에 호출 이력 컬렉션을 만들어 짧은 시간 내의 중복 요청을 제한하는 로직을 추가하는 것이 좋습니다.


결론

PocketBase의 직관적인 JS Hooks와 EasyAuth의 조합은 복잡한 백엔드 설정이나 지루한 서류 심사 없이 SMS 본인인증을 구현할 수 있는 가장 현대적이고 빠른 방법입니다.

스타트업 MVP를 개발 중이거나 토이 프로젝트를 준비하는 1인 개발자라면, 굳이 인증 하나 때문에 스트레스 받지 마세요. 서류 없이 5분 만에 연동할 수 있고, 가입 시 10건의 무료 테스트까지 제공하는 EasyAuth로 개발 본연의 재미에 집중하시길 바랍니다!

> 🚀 가장 쉬운 SMS 인증 API, EasyAuth > 복잡한 서류 제출 없이, 지금 바로 시작해 보세요. > 👉 EasyAuth 무료로 시작하기

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

광고 문의하기

다른 글 보기

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호

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