블로그 글을 발행하기 전에 가장 많이 놓치는 부분이 ‘내용 품질’보다 먼저 잡히는 스팸/어뷰징 신호입니다.
이번 금칙어 검사기는 단어 하나를 단순 차단하는 방식이 아니라, 패턴별 위험도를 나눠 점수화해서 수정 우선순위를 바로 확인할 수 있게 구성했습니다.

핵심 로직 요약

  1. 규칙 세트 로딩: 스팸/과장/어뷰징/연락처/URL 규칙을 카테고리별로 분리
  2. 텍스트 정규화: 공백/개행/대소문자 영향을 줄여 탐지 정확도 보정
  3. 다중 탐지 실행: 사전 매칭 + 정규식 탐지를 병렬 적용
  4. 리스크 점수화: 탐지 항목별 가중치 합산으로 위험도 계산
  5. 실시간 피드백 출력: 문제 위치/카테고리/수정 힌트를 함께 제공

1) 규칙 세트 분리: 유지보수 가능한 탐지 구조

탐지 규칙을 한 배열에 몰아넣지 않고, 카테고리별로 분리해 관리하면 기준 업데이트가 쉬워집니다.

const rules = {
  spam: ['도박', '불법', '대출'],
  exaggerated: ['100%', '무조건', '완치'],
  abusePattern: [/([!?.])\1{3,}/g, /(.)\1{5,}/g],
  contact: [/01[0-9]-?\d{3,4}-?\d{4}/g, /kakao\s*id[: ]?\w+/gi],
  url: [/(https?:\/\/|www\.)\S+/gi]
};

핵심은 규칙 추가 시 기존 계산 흐름을 건드리지 않도록 규칙 데이터와 실행 로직을 분리하는 것입니다.

2) 입력 텍스트 정규화

같은 문장도 공백/개행/대소문자 때문에 탐지 누락이 생길 수 있어, 검사 전에 정규화 단계를 둡니다.

const normalized = inputText
  .replace(/\u00A0/g, ' ')
  .replace(/\s+/g, ' ')
  .trim();

이 전처리만으로 불필요한 오탐·누락이 줄어들고, 검사 결과 일관성이 올라갑니다.

3) 사전 매칭 + 정규식 탐지 결합

단순 키워드 검사만으로는 URL 변형, 연락처 표기 변형 같은 우회 패턴을 놓치기 쉽습니다.
그래서 문자열 포함 검사와 정규식 패턴 검사를 함께 사용합니다.

const foundSpam = rules.spam.filter((word) => normalized.includes(word));
const foundUrls = [...normalized.matchAll(rules.url[0])].map((m) => m[0]);

조합형 탐지는 구현이 조금 복잡해지지만, 실제 사용자 입력에서는 탐지 품질 차이가 크게 납니다.

4) 리스크 점수화(가중치 기반)

탐지 결과를 단순 개수로만 보여주면 우선순위가 불분명합니다.
카테고리별 가중치를 적용해 총점을 만들면 어떤 문제부터 고쳐야 하는지가 명확해집니다.

const weights = { spam: 3, exaggerated: 2, abusePattern: 2, contact: 4, url: 3 };
const score =
  foundSpam.length * weights.spam +
  foundExaggerated.length * weights.exaggerated +
  foundPatterns.length * weights.abusePattern +
  foundContacts.length * weights.contact +
  foundUrls.length * weights.url;

예: 연락처 노출은 정책 리스크가 커서 높은 가중치, 과장 표현은 문맥에 따라 조정 가능하므로 상대적으로 낮은 가중치를 둘 수 있습니다.

5) 결과 UI: 수정 가능한 피드백으로 변환

검사 결과는 ‘위험’ 한 줄 경고보다 수정 액션으로 연결되는 안내가 중요합니다.

  • 감지 카테고리(스팸/과장/연락처/URL)
  • 감지된 실제 텍스트 조각
  • 권장 수정 방식(삭제/완화/문맥 보강)
  • 전체 리스크 레벨(낮음/중간/높음)

이 구조로 보여주면 사용자는 바로 문장을 수정하고 재검사할 수 있어 발행 전 품질 점검 속도가 빨라집니다.

예외 처리 포인트

  • 빈 입력/초단문 입력 방어
  • 같은 단어 반복 탐지 시 중복 카운트 정책 통일
  • 한글·영문·기호 혼합 텍스트에서 정규식 과탐 방지
  • 결과 점수는 절대 기준이 아닌 사전 경고용임을 명시

내부 링크

요약

이번 코어 로직의 핵심은 아래 3가지입니다.

  • 규칙 세트 분리로 유지보수성 확보
  • 사전 매칭 + 정규식 결합으로 탐지 정확도 개선
  • 가중치 점수화로 수정 우선순위 제시

즉, 금칙어 검사기는 단순 차단기가 아니라 발행 전 문서를 빠르게 다듬는 리스크 사전 점검 워크플로우로 설계하는 것이 효과적입니다.