본문 바로가기

문자발송 플랫폼에서 발신번호와 발송이력을 관리하는 방법

문자발송 작성 · 수정 · 글쓴이 미션비

핵심 답변

발신번호는 증빙 서류나 본인인증으로 명의가 확인된 번호만 '사용 가능' 상태로 등록하고, 발송 요청 때 등록·승인된 번호가 아니면 서버에서 차단합니다. 발송이력은 요청 1건(전체·성공·실패 건수)과 수신번호별 상세를 나눠 저장하고, 상세는 기간 단위로 테이블을 나눠 조회 부담을 줄입니다. 모든 조회는 로그인한 사용자 소유 범위로 조건을 겁니다.

문자 플랫폼에서 가장 먼저 설계할 두 가지

문자발송 플랫폼을 만들면 발송 화면과 요금 충전에 먼저 눈이 갑니다. 운영을 해 보면 더 오래 신경 쓰게 되는 것은 누구의 번호로 보낼 수 있는가(발신번호)무엇을 언제 누구에게 보냈는가(발송이력)입니다. 앞의 것은 제도와 직결되고, 뒤의 것은 데이터가 가장 빨리 커지는 곳입니다.

아래는 미션비가 문자발송 플랫폼 센드엠을 직접 운영하며 정리한 구조입니다. 등록 절차와 서류는 관련 제도와 통신사 정책을 따르므로, 이 글은 시스템 설계 관점으로만 읽어 주세요.

발신번호: 확인된 번호만 쓰게 한다

등록 요청과 승인 번호를 나눈다

발신번호 데이터 구분
등록 요청사용자가 신청한 번호, 등록 방식, 첨부한 증빙 서류, 처리 상태(대기·승인·반려)와 사유
사용 가능 번호승인이 끝난 번호만. 사용 여부, 대표 번호 지정, 등록 경로

발송 요청이 들어오면 서버가 사용 가능 번호 목록에 있는지를 확인하고, 없으면 발송을 막습니다. 화면에서 선택지를 제한하는 것만으로는 부족합니다. API로 직접 호출하면 화면 제한은 우회되기 때문입니다.

증빙 서류는 실제로 저장하고, 소유자를 분리한다

증빙 서류 방식으로 신청하는데 첨부가 없으면 접수 단계에서 명확한 메시지로 거절합니다. 첨부 파일은 회원 첨부·게시판 첨부와 같은 저장 구조를 쓰더라도 종류를 구분해 조회·권한 경로를 섞지 않습니다. 소유자 판단 기준이 서로 다르기 때문입니다.

자동 등록은 명의가 확인된 경우만

가입자의 휴대폰 번호를 발신번호로 자동 등록하면 편리합니다. 다만 센드엠에서는 휴대폰 본인인증 결과가 있을 때만 자동 등록합니다. 명의 확인 없이 입력받은 번호를 곧바로 사용 가능 상태로 넣으면 사전 등록 절차를 우회하는 구조가 되기 때문입니다. 소셜 로그인처럼 본인인증이 없는 가입은 자동 등록 대상에서 뺍니다.

발송이력: 요청과 상세를 나눈다

발송이력 저장 구조
발송 요청(마스터)요청 1건. 발신번호, 메시지 종류, 본문, 예약 시각, 전체·대기·성공·실패 건수, 사용 중계 경로, 취소 여부
수신 상세수신번호 1건당 1행. 수신번호, 발송 시각, 결과 코드, 결과 수신 시각
결과 코드표중계 경로별 결과 코드 → 공통 결과명·설명

목록 화면은 대부분 요청 단위로 보면 충분하므로 마스터만 읽고, 사용자가 특정 요청을 열었을 때만 상세를 읽습니다. 건수 집계를 마스터에 두면 목록에서 매번 상세를 세지 않아도 됩니다.

상세는 기간 단위로 나눈다

수신 상세는 요청 1건에 수천·수만 행이 생기므로 가장 빨리 커집니다. 센드엠은 상세를 월 단위 테이블로 나눠 최근 기간은 현재 테이블에서, 지난 달은 해당 월 테이블에서 읽습니다. 마스터에 등록 월을 남겨 두면 어느 테이블을 읽을지 바로 정할 수 있습니다.

결과 코드는 경로마다 다르다

같은 "번호 없음"이라도 통신사·중계사마다 결과 코드가 다릅니다. 코드를 그대로 보여 주면 사용자가 이해할 수 없고, 경로를 바꾸면 통계가 끊깁니다. 경로별 코드를 공통 결과명으로 바꾸는 코드표를 데이터로 관리합니다.

조회 권한: 내 데이터만

  • 발송이력·주소록·발신번호의 모든 조회·수정·삭제 쿼리에 로그인 사용자 조건을 겁니다.
  • 삭제는 INSERT … SELECT … WHERE 사용자 형태로 이력을 먼저 남긴 뒤 같은 조건으로 삭제합니다. 소유자가 아니면 이력도 삭제도 0건이 됩니다.
  • 다른 계정의 데이터 번호를 넣어 요청해 보는 교차 접근 시험을 기능 검증에 포함합니다.

주의사항

  • 발신번호 등록 요건, 제출 서류, 발송이력 보관 기간은 제도와 통신사 정책에 따라 바뀔 수 있습니다. 코드에 박지 말고 설정과 운영 문서로 관리합니다.
  • 발송이력의 본문과 수신번호는 개인정보입니다. 조회 화면에 마스킹 기준을 두고, 보관 기간이 지난 데이터 정리 절차를 함께 만듭니다.
  • 가입 직후 기본 설정 생성 같은 부가 처리가 실패해도 가입 자체를 되돌리지 않도록 분리하되, 실패는 반드시 로그로 남깁니다.

정리

발신번호는 "요청"과 "사용 가능 번호"를 나누고 서버에서 검증합니다. 발송이력은 "요청"과 "수신 상세"를 나누고, 상세는 기간 단위로 분리하며, 결과 코드는 공통 기준으로 변환합니다. 그리고 모든 조회는 사용자 소유 범위로 제한합니다.

이 글과 관련해 자주 묻는 질문

실제 상담에서 가장 자주 나오는 질문과, 저희가 드리는 답변입니다.

회원가입한 휴대폰 번호를 발신번호로 바로 쓰게 해도 되나요?

휴대폰 본인인증 결과가 있어 번호 명의가 확인된 경우에만 자동 등록하는 편이 안전합니다. 명의 확인 없이 입력받은 번호를 바로 사용 가능 상태로 넣으면 발신번호 사전 등록 절차를 우회하는 구조가 됩니다.

발송이력은 얼마나 보관해야 하나요?

보관 기간은 관련 법령·통신사 정책·이용약관 기준을 확인해 정하고, 기간이 지난 데이터를 정리하는 절차까지 함께 만듭니다. 기준은 바뀔 수 있으므로 기간 값은 설정으로 두고, 조회 화면에도 조회 가능 기간을 안내합니다.

관련 서비스와 글

문자 발송을 새로 만들지, 붙일지 고민이신가요?

플랫폼 전체 구축과 기존 서비스에 API 연동 중
어느 쪽이 맞는지부터 함께 정리해 드립니다.

문자 시스템 상담하기