SMS 인증

Solapi 기반 SMS OTP 인증 시스템의 설정과 사용법을 안내합니다.

개요

kindie는 Solapi를 통해 SMS OTP 인증을 제공합니다. 회원가입 시 전화번호 인증, 본인확인 등에 사용됩니다.

Solapi 설정

1. 가입 및 발신번호 등록

  1. Solapi에 가입
  2. 발신번호 관리에서 발신번호 등록 (인증 필요)
  3. API 키 관리에서 API 키와 시크릿 발급

2. 환경변수 설정

SOLAPI_API_KEY="your-api-key"
SOLAPI_API_SECRET="your-api-secret"
SMS_SENDER_NUMBER="01012345678"
# 알림톡을 사용할 때만 필요
SOLAPI_PFID="KA01PFxxxxxxxxxxxxxxxxxxxx"

발신번호는 반드시 Solapi에서 사전 등록한 번호여야 합니다.

OTP 인증 플로우

1. 사용자: 전화번호 입력
2. 서버: 6자리 OTP 생성 → Solapi API로 SMS 발송
3. 서버: OTP를 DB에 저장 (5분 만료)
4. 사용자: 수신한 OTP 입력
5. 서버: OTP 검증 (일치 여부 + 만료 확인)
6. 서버: 인증 완료 처리

Rate Limiting

무분별한 SMS 발송을 방지하기 위해 기본 Rate Limit이 설정되어 있습니다:

// config.ts
export const smsConfig = {
  otpLength: 6,            // OTP 자릿수
  otpExpiryMinutes: 5,     // OTP 유효시간
  maxAttemptsPerHour: 5,   // 시간당 최대 시도 횟수
};

관련 파일

lib/sms/
├── index.ts          Solapi API 클라이언트 (SMS 발송)
└── verify.ts         OTP 생성, 저장, 검증

app/api/sms/
├── send/route.ts     SMS 발송 API
└── verify/route.ts   OTP 검증 API

components/auth/
└── phone-verify-form.tsx   전화번호 인증 폼 UI

기능 비활성화

SMS 인증이 불필요하다면:

// config.ts
export const features = {
  // ...
  sms: false,
};

SMS 관련 환경변수를 설정하지 않아도 에러가 발생하지 않습니다.