같은 서비스인데 파일마다 이름이 다르게 찍힙니다. "로얄 케어 120분", "방문)로얄 케어 120분", "프리미엄 마스터+ 로얄 케어 120분"이 사실은 하나의 서비스입니다. 사람은 한눈에 알아보지만 시스템은 그렇지 않습니다. 이 글은 그 흔들림을 흡수한 서비스명 자동 매핑 설계를, 다지점 방문 케어 서비스 프랜차이즈의 급여 정산 자동화 사례를 기준으로 정리합니다.
서비스명 자동 매핑이 풀어야 하는 문제
서비스명 자동 매핑은 원본 표기의 흔들림을 별칭·부분매칭으로 흡수해 하나의 표준(canonical) 서비스에 연결하는 일입니다. 표기가 통일되지 않으면 같은 서비스가 여러 이름으로 흩어져 집계에서 빠지고, 그 빠진 건이 곧 관리사 급여의 오차가 됩니다.
이 문제를 사람이 매번 "이건 저 서비스야"라고 지정하게 두면 실무가 지속되지 못합니다. 그래서 매핑은 규칙으로 만들되, 거짓 매칭(false positive)이 나지 않도록 우선순위를 신중하게 설계해야 합니다. 짧은 이름이 긴 이름 안에 우연히 포함되어 엉뚱한 서비스로 붙는 사고를 막는 것이 핵심입니다.
매핑 우선순위: 정확 → 접두어 제거 → 최장 부분매칭
매핑은 세 단계를 순서대로 시도하고, 먼저 맞는 단계에서 멈춥니다.
- 정확 일치: 표준 서비스명 또는 등록된 별칭과 정확히 같으면 즉시 연결합니다. 별칭 사전이 매핑의 1차 원천입니다.
- 접두어 제거 후 재시도: "프리미엄 마스터+" 같은 수식 접두어를 떼어내고 다시 정확 일치를 봅니다. "프리미엄 마스터+ 로얄 케어 120분"이 기본 서비스 "로얄 케어 120분"으로 떨어지게 합니다.
- 최장 부분매칭: 그래도 없으면 포함 관계를 보되, 가장 긴 별칭을 고릅니다. "방문)로얄 케어 120분"은 "로얄"(짧음)이 아니라 "로얄 케어 120분"(긺)에 붙어야 하기 때문입니다.
먼저 맞는 단계에서 멈추고, 끝까지 없으면 사람에게 경고합니다
왜 "최장" 부분매칭인가
부분매칭에서 가장 흔한 사고는 짧은 별칭이 먼저 걸리는 것입니다. "로얄"이라는 짧은 별칭이 있으면 "로얄 케어 120분"도, "로얄 스페셜 90분"도 전부 "로얄"에 붙어버립니다. 그래서 후보 중 포함되는 별칭이 가장 긴 것을 고릅니다. 긴 별칭일수록 더 구체적이고, 구체적일수록 오탐이 적습니다.
미매핑으로 남은 이름은 버리지 않고 업로드 전 경고로 노출합니다. "매핑 안 됨"을 조용히 0원으로 처리하면 급여가 어긋나므로, 사람이 별칭을 추가하거나 표준 서비스를 만들도록 유도합니다. 별칭 사전이 곧 이 시스템의 학습 결과가 되어, 새 표기를 한 번 등록하면 다음 달부터는 자동으로 잡힙니다.
이 접근을 편집 거리(Levenshtein) 같은 확률적 유사도 대신 별칭·부분매칭이라는 결정적 규칙으로 잡은 것은 의도된 선택입니다. 급여가 걸린 매핑에서는 "아마 이 서비스일 것"이라는 추정보다, 같은 입력이면 언제나 같은 결과가 나오는 재현성이 중요합니다. 확률적 매칭은 임계값을 조금만 바꿔도 결과가 흔들리고, 왜 그 서비스에 붙었는지 사람이 설명하기 어렵습니다. 반면 별칭 사전은 "이 표기는 이 서비스"라고 사람이 명시적으로 등록한 규칙이라, 결과를 추적하고 감사할 수 있습니다.
콤마 분리는 매핑 전에
한 행에 "부가 관리 추가, 스페셜 케어 120분"처럼 두 서비스가 콤마로 묶여 있으면, 매핑 전에 두 항목으로 분리해야 각각 표준 서비스에 연결됩니다. 단 "+"는 정상 서비스명에 들어가는 문자(예: "프리미엄 마스터+")라 분리하지 않습니다. 콤마만 분리하고 "+"는 보호하는 이 구분이, 실제 운영에서 잘못 집계되던 회원권 건수를 바로잡은 핵심이었습니다.
이 매핑은 파싱된 데이터를 받아 급여 계산으로 넘기는 중간 단계입니다. 파싱 자체는 양식이 제각각인 엑셀을 자동으로 읽는 법에서, 매핑된 결과로 급여를 계산하는 단계는 급여 정산 자동화 사례에서 이어집니다.
자주 묻는 질문
표기가 흔들리는 항목명을 어떻게 자동으로 통일하나요?
이름·별칭 사전으로 정확 일치를 먼저 보고, 수식 접두어를 제거해 다시 맞춘 뒤, 그래도 없으면 가장 긴 별칭으로 부분매칭합니다. 매핑되지 않은 이름은 경고로 남겨 사람이 별칭을 추가하도록 유도합니다.
문자열 유사 매칭이란 무엇인가요?
정확히 같지 않아도 포함 관계나 별칭을 이용해 같은 대상으로 연결하는 매칭입니다. 이 사례는 편집 거리 같은 확률적 유사도 대신, 별칭 사전과 최장 부분매칭이라는 결정적 규칙을 써서 결과가 예측 가능하고 재현되도록 했습니다.
왜 가장 긴 별칭을 고르나요?
짧은 별칭이 긴 이름 안에 우연히 포함되어 엉뚱한 서비스로 붙는 오탐을 막기 위해서입니다. "로얄"보다 "로얄 케어 120분"이 더 구체적이므로, 포함되는 별칭 중 가장 긴 것을 선택합니다.
콤마로 묶인 서비스명은 어떻게 처리하나요?
매핑 전에 콤마 기준으로 분리해 각각을 표준 서비스에 연결합니다. 다만 "+"는 정상 서비스명에 쓰이는 문자라 분리하지 않습니다. 이 구분 덕분에 한 행에 묶여 잘못 집계되던 건수가 정상화됐습니다.