공급자 셀프 등록 온보딩 설계 — 정보 정확도와 검수 비용의 균형

이커머스

공급자 온보딩데이터 품질사업자 인증검수 자동화폼 설계

이 글은 누구를 위한 것인가

  • 업소·매장 정보를 직접 등록받는 디렉터리·플랫폼을 만드는 팀
  • 크롤링·수집으로 채운 데이터의 정확도가 떨어져 고민인 경우
  • 등록은 받는데 검수 인력이 감당 안 되는 상황

들어가며

업소 정보를 모으는 방법은 셋이다.

[A] 직접 수집·크롤링
    빠르게 규모 확보 / 정확도·최신성 낮음, 당사자 항의

[B] 공급자 셀프 등록
    정확도 높음 / 규모가 안 늘어남, 과장 위험

[C] 혼합
    A로 뼈대를 만들고 B로 당사자가 정정

**현실적으로는 C가 답이고, 그때 설계의 핵심은 "이미 있는 항목을 당사자가 가져가는 흐름"**이다. 빈 폼에 처음부터 입력하게 하는 것보다 훨씬 완료율이 높다.

실제로 이 방식을 쓰는 서비스들은 등록 페이지를 "새로 만들기"가 아니라 "내 정보를 정확하게"로 표현한다. 풀림의 업주 정보 등록 안내도 같은 문구를 쓰는데, 이미 등재된 정보의 정정을 1차 목적으로 놓는 프레이밍이다. 당사자 입장에서 동기가 전혀 다르다 — 없는 걸 만드는 수고가 아니라, 틀린 걸 바로잡는 일이 된다.


1. 단계를 나눈다 — 한 번에 다 받지 않기

등록 폼이 길면 완료율이 떨어진다. 그렇다고 정보를 덜 받으면 쓸모가 없다.

[단계 분리]

  1단계  소유권 확인       "이 업소가 내 것이다"
         · 업소 검색·선택
         · 연락처 인증 (등록된 번호로 코드 발송)
         → 여기까지 3분 이내

  2단계  핵심 정보 정정     즉시 반영 가치가 높은 것
         · 영업시간, 전화번호, 주소 상세
         · 휴무일

  3단계  풍부화             선택 입력, 나중에 해도 됨
         · 소개글, 사진, 시술·메뉴 목록, 가격대

1단계를 통과시키는 것이 최우선이다. 소유권만 확인되면 그 사람은 언제든 돌아와 나머지를 채운다. 반대로 첫 화면에서 20개 필드를 요구하면 대부분 이탈한다.

[각 단계 후 즉시 보상]

  1단계 완료 → "이제 이 페이지를 관리할 수 있어요" + 관리 화면 진입
  2단계 완료 → "정보가 반영됐어요" + 실제 페이지 미리보기
  3단계 진행 → 충족률 표시 "70% 완성"

미리보기가 강력한 동기다. 자기 업소 페이지가 실제로 어떻게 보이는지 본 사람은 나머지를 채우려는 유인이 생긴다.

폼 자체의 원칙은 폼 디자인 가이드라인에 정리된 것들 — 레이블은 필드 위, 필수/선택 명시, 오류는 필드 옆에 — 을 그대로 따르면 된다. 여기서 특별할 것은 없다.


2. 소유권 확인 — 어디까지 요구할 것인가

가장 어려운 결정이다. 검증을 강화할수록 정확도는 오르고 등록은 줄어든다.

[검증 수단 — 약한 것부터]

  ① 등록된 대표번호로 인증코드      가장 가벼움, 번호가 최신이어야 함
  ② 사업자등록번호 진위 확인        국세청 기준 상태 조회
  ③ 사업자등록증 이미지 제출        사람 검수 필요
  ④ 우편물 코드 발송                가장 강하지만 며칠 소요

①로 시작하고, 민감한 변경에만 ②를 추가로 요구하는 단계적 구조를 권한다.

  일반 정보 수정 (영업시간, 소개글)   → ① 만으로 충분
  대표번호·주소 변경                  → ② 추가
  소유권 이전 (다른 사람에게)         → ③ 이상

②는 공공데이터포털의 사업자등록정보 진위확인 API로 자동화할 수 있다. 사업자등록번호·대표자명·개업일자를 넣어 국세청 등록 상태와 대조하는 방식이라, 폐업 상태를 걸러내는 데도 같이 쓸 수 있다.

[진위 확인 결과 처리]

  계속사업자   → 통과
  휴업자       → 통과하되 페이지에 상태 표시
  폐업자       → 등록 거부 + 기존 페이지 비활성화 검토
  조회 불가    → 사람 검수 큐로

"조회 불가"를 자동 거부하지 않는 것이 중요하다. 개인사업자 정보 불일치나 API 일시 오류가 섞여 있어서, 자동 거부하면 정당한 등록자를 잃는다.


3. 과장·오기재를 어떻게 막을 것인가

당사자가 입력한다고 정확한 건 아니다. 노출을 늘리려는 유인이 있다.

[흔한 왜곡]

  · 해당 없는 카테고리·태그를 모두 선택
  · 실제보다 넓은 서비스 지역 표기
  · 가격을 최저가만 표시
  · 소개글에 검색 키워드 나열
[대응 — 입력 단계에서]

  □ 카테고리 선택 개수 상한 (예: 3개)
  □ 태그는 자유 입력 금지, 정의된 목록에서만
  □ 가격은 범위 입력 강제 (최저~최고)
  □ 소개글 최소·최대 길이 + 반복 키워드 검출

"선택 개수 상한"이 가장 단순하면서 효과적이다. 전부 고를 수 없게 만들면 실제로 중요한 것을 고르게 된다.

const MAX_CATEGORIES = 3;

function validateCategories(selected: string[]): ValidationResult {
  if (selected.length === 0) return { ok: false, message: '1개 이상 선택해 주세요' };
  if (selected.length > MAX_CATEGORIES) {
    return { ok: false, message: `최대 ${MAX_CATEGORIES}개까지 선택할 수 있어요` };
  }
  return { ok: true };
}

상한을 두는 이유를 화면에 설명하는 것도 필요하다. "많이 고를수록 좋다"고 생각하는 등록자에게 "정확할수록 맞는 손님이 온다"는 프레이밍을 주면 저항이 줄어든다.


4. 검수 — 전수 검수는 불가능하다

등록이 늘면 사람이 다 볼 수 없다. 위험도에 따라 나눈다.

[3단 분기]

  자동 승인      기존 값과 차이가 작고 형식 검증 통과
                 예: 영업시간 30분 조정, 오탈자 수정

  자동 승인 + 사후 감사   변경은 반영하되 표본 검수 대상에 포함
                 예: 소개글 수정, 사진 추가

  사전 검수      반영 전 사람이 확인
                 예: 상호·주소 변경, 카테고리 대폭 변경,
                     신규 등록, 이전에 반려된 이력이 있는 계정

"자동 승인 + 사후 감사"가 대부분을 흡수해야 운영이 지속된다. 모든 변경을 사전 검수로 돌리면 반영이 며칠씩 밀리고, 그러면 공급자가 등록을 포기한다.

[사전 검수로 올릴 신호]

  · 짧은 기간에 반복 수정 (24시간 내 5회 이상)
  · 이전 반려 이력
  · 외부 링크·연락처가 소개글에 삽입됨
  · 금지 표현 사전에 걸림
[검수 큐 운영]

  목표 처리 시간을 공개한다      "보통 1영업일 이내"
  초과 시 자동 알림               등록자에게 지연 안내
  반려는 사유를 구체적으로        "형식에 맞지 않음" 금지

반려 사유가 모호하면 재제출이 반복되고 검수 부하가 오히려 늘어난다. "어느 필드가, 왜, 어떻게 고치면 되는지"까지 써야 한 번에 끝난다.


5. 충족률 — 무엇을 얼마나 채웠는가

필드별 중요도가 다르므로 단순 개수 비율은 의미가 없다.

const FIELD_WEIGHTS = {
  name: 10, address: 10, phone: 10, hours: 8,   // 필수급
  categories: 6, priceRange: 5, description: 5,  // 핵심
  photos: 4, holidays: 3, parking: 2, amenities: 1,  // 부가
} as const;

function completeness(item: Item): number {
  let filled = 0, total = 0;
  for (const [field, w] of Object.entries(FIELD_WEIGHTS)) {
    total += w;
    if (isFilled(item[field])) filled += w;
  }
  return Math.round((filled / total) * 100);
}

충족률을 공급자에게 보여주되, 노출 순위와 직접 연결하는 건 신중해야 한다.

  연결하면:  채우려는 동기가 강해짐
             동시에 허위 입력 동기도 강해짐

  절충:      충족률은 노출 '자격'의 최소 기준으로만 사용
             (60% 미만은 목록 노출 제외 등)
             순위는 다른 신호로 결정

내부 표현과 별개로, 외부 검색엔진에 넘기는 구조화 데이터는 LocalBusiness 스키마Google의 지역 비즈니스 구조화 데이터 가이드를 따르는 편이 낫다. 필드 설계를 처음부터 이 스키마에 맞춰두면 나중에 매핑하느라 고생하지 않는다.


6. 신선도 — 등록보다 유지가 어렵다

한 번 등록하고 방치되는 것이 가장 흔한 실패다.

[신선도 관리]

  · 마지막 확인 시각을 항목마다 저장
  · 일정 기간(예: 6개월) 경과 시 확인 요청 발송
  · 확인만 하면 되는 1클릭 흐름 ("변경 없음" 버튼)
  · 장기 미확인 항목은 페이지에 상태 표시

"변경 없음" 버튼이 핵심이다. 정보를 다시 입력하게 하면 아무도 안 하지만, 버튼 하나로 "그대로예요"를 확인하는 건 한다.

[표시 문구]

  ✓ "2026년 8월 업주 확인"        신뢰 신호
  ✓ "정보가 오래되었을 수 있어요"   1년 이상 미확인
  ✗ 아무 표시 없음                  사용자가 판단할 근거 없음

오래된 정보를 숨기지 말고 상태를 드러내는 편이 낫다. 잘못된 정보로 헛걸음한 사용자가 서비스 전체를 불신하게 되는 비용이, 표시로 인한 노출 감소보다 크다.


7. 측정

[온보딩 퍼널]

  등록 시작 → 소유권 확인 → 2단계 완료 → 3단계 진입 → 충족률 60%+

[운영 지표]

  · 단계별 이탈률
  · 검수 큐 대기 시간 / 반려율 / 재제출 성공률
  · 자동 승인 비율        낮으면 규칙이 과하게 엄격
  · 사후 감사 적발률      높으면 자동 승인 기준을 조여야 함
  · 6개월 내 재확인율     신선도 관리의 실효

"자동 승인 비율"과 "사후 감사 적발률"을 함께 보는 것이 균형점을 찾는 방법이다. 자동 승인이 90%인데 적발률이 1% 미만이면 더 풀어도 되고, 적발률이 10%를 넘으면 조여야 한다.


8. 정리

  1. 빈 폼 작성이 아니라 기존 항목의 정정으로 프레이밍한다
  2. 소유권 확인을 1단계로 분리하고 3분 안에 끝낸다
  3. 단계마다 즉시 보상 — 특히 실제 페이지 미리보기
  4. 검증 강도는 변경의 민감도에 따라 단계적으로
  5. 사업자 진위 확인 API로 폐업 항목까지 함께 정리
  6. 카테고리 선택 상한이 과장을 막는 가장 단순한 장치
  7. 검수는 3단 분기 — 사후 감사가 대부분을 흡수해야 지속 가능
  8. 충족률은 노출 자격의 최소 기준으로만, 순위와 직결하지 않기
  9. 신선도는 "변경 없음" 1클릭으로 유지하고 상태를 표시한다

가장 먼저 손대면 좋은 건 1번과 3번이다. 등록 폼의 필드를 줄이는 것보다, 이미 있는 정보를 보여주고 "여기서 틀린 부분만 고치세요"로 바꾸는 것이 완료율에 훨씬 크게 작용한다.