Best Practice

비즈고 API를 프로덕션 환경에서 안정적으로 운영하기 위한 권장 패턴입니다.


1. 항상 Fallback을 설정하세요

카카오, RCS 등 특정 채널만 사용하면 단말 미지원, 채널 장애 시 발송이 완전히 실패합니다.
SMS를 마지막 Fallback으로 항상 포함하는 것을 권장합니다.

"messageFlow": [
  { "kakaoAlimtalk": { ... } },
  { "sms": { "from": "0200000000", "text": "대체 문자" } }
]

2. msgKey를 반드시 저장하세요

발송 응답의 msgKey는 이후 발송 결과 조회, 문의, 재시도에 필요합니다.
DB에 저장하지 않으면 결과를 추적할 수 없습니다.

const response = await sendMessage(payload);
const msgKey = response.data.data.destinations[0].msgKey;

// DB에 저장
await db.messages.insert({ msgKey, ref: payload.ref, status: 'sent' });

3. ref 필드를 활용하세요

ref에 주문 ID, 사용자 ID 등 내부 식별자를 넣으면 발송 결과를 내부 시스템과 연결할 수 있습니다.

{
  "destinations": [{ "to": "01000000000" }],
  "messageFlow": [{ "sms": { ... } }],
  "ref": "order-20260403-001"
}

4. API 키는 서버 환경 변수에만 저장하세요

# .env
BIZGO_API_KEY=your_api_key_here
// 코드에 직접 하드코딩 금지
const apiKey = process.env.BIZGO_API_KEY; // ✓
const apiKey = "실제키값";                // ✗

키가 노출되면 즉시 콘솔에서 폐기하고 재발급하세요.


5. 웹훅은 빠르게 응답하세요

웹훅 수신 서버는 5초 이내에 HTTP 200을 반환해야 합니다.
무거운 처리는 비동기로 분리하세요.

app.post('/webhook/bizgo', async (req, res) => {
  // 즉시 200 응답
  res.status(200).json({ result: 'ok' });

  // 처리는 비동기로
  setImmediate(() => processReport(req.body));
});

6. 중복 발송을 방어하세요

웹훅 재시도로 인해 같은 msgKey의 리포트가 여러 번 수신될 수 있습니다.
msgKey를 기준으로 멱등성(idempotency) 처리를 구현하세요.

async function processReport(report) {
  const exists = await db.reports.findOne({ msgKey: report.msgKey });
  if (exists) return; // 이미 처리된 경우 무시

  await db.reports.insert(report);
  // 후속 처리...
}

7. Sandbox 환경에서 먼저 테스트하세요

프로덕션 발송 전 반드시 Sandbox 환경에서 테스트합니다.

  • Sandbox Base URL: https://sandbox.ibapi.kr/api/comm
  • Sandbox 웹훅 발신 IP: 211.115.98.231

8. 발신번호를 사전 등록하세요

미등록 발신번호로 발송하면 이통사에서 차단됩니다.
SMS/LMS/MMS 발송 전 반드시 콘솔에서 발신번호를 등록하세요.


9. 알림톡 템플릿은 미리 준비하세요

알림톡 템플릿 심사는 1~3 영업일이 소요됩니다.
서비스 오픈 일정에 맞춰 미리 등록 신청하세요.


10. 에러 로그에 민감정보를 마스킹하세요

전화번호, 인증번호 등 민감정보는 로그에 마스킹 처리합니다.

function maskPhone(phone) {
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
}

console.log(`발송 대상: ${maskPhone('01012345678')}`); // 010****5678