[#0] 말조심: AI 기반 한국어 욕설 필터링 엔진 개발기

Nyam·2025년 11월 26일

말조심

목록 보기
1/4
post-thumbnail

프로젝트 개요

실시간 기반의 프로젝트 웹게임 서버를 운영하면서
“사용자가 입력하는 텍스트를 어떻게 안전하게 관리할 것인가?”
이 문제는 항상 가장 복잡한 기술적 난제 중 하나였다.

한국어에서는 욕설 변형이 너무 자유롭다.
숫자, 특수문자, 자모 분리, 무의미한 반복, 의도적 오타까지…
기존의 단순 금칙어 필터링으로는 결코 잡을 수 없는 경우를 수없이 봤다.

그러다 보니 자연스럽게
“이걸 제대로 해결하는 API를 직접 만들어보면 어떨까?”
라는 생각이 들었고, 그 결과 이번 프로젝트 말조심(MalJosim) 을 시작하게 되었다.

이 글은 말조심 프로젝트를 어떤 이유로 시작하게 되었는지,
그리고 어떤 방향으로 개발해 나갈 계획인지 정리한 첫 번째 개발 일지다.

🚨 왜 욕설 필터링 API가 필요한가?

실시간 서비스에서 겪었던 문제들

웹게임 프로젝트들을 운영하며 예상보다 훨씬 많은 텍스트 케이스를 만났고,
그중 상당수가 기존 필터로는 탐지조차 불가능했다.

예를 들면 이런 것들:

  • “ㅅㅂ”, “ㅅㅂㄹㅁ”, “shebal”, “c!bal”

  • “시이이발”, “ㅆ ㅣ바루”, “죶같네”

  • “개좋다” vs “개같다”

  • “미친 속도” vs “미친놈”

단순 사전식 필터를 쓴다면
문맥 오탐, 변형·오타 탐지 실패, 붙여쓰기 문제 등
운영 중 오류가 너무 잦아졌다.

그리고 이런 문제는 대형 게임/커뮤니티/메신저도 공통적으로 겪고 있다.
그래서 시장에도 제대로 된 “한국어 텍스트 필터 API”가 적다.

결론적으로,

정규화 + 사전식 + AI + 문맥 판단을 결합한 “하이브리드 욕설 필터”가 필요했다.

🛠️ 그래서 시작한 프로젝트, 말조심(MalJosim)
한국어 욕설 필터링을 위한 AI 기반 Moderation API

말조심은 단순 금칙어 필터가 아니다.
아키텍처 자체가 “문맥 + 의미 + 변형 처리”를 모두 목표로 한다.

🧱 말조심의 전체 구조 (계획)

1) Normalization Engine

한국어 욕설 변형을 잡기 위한 가장 중요한 단계

  • 자모 분리/재조합

  • 숫자 → 한글(5=ㅅ, 2=ㄹ 등)

  • 반복 문자 축소

  • 특수문자 제거

정규화가 정확해야 그다음 단계가 제대로 작동한다.

2) PostgreSQL + Prisma 기반 금칙어 원본

PostgreSQL을 선택한 이유는 다음과 같다

  • SaaS 확장을 위한 고객별 데이터 분리

  • 금칙어 메타데이터 관리(aliases, severity, category)

  • CRUD 로그, 관리자 패널 확장성

Prisma를 쓰는 이유

  • 타입 안전성

  • 쉬운 스키마 진화

  • 빠른 개발 속도

  • JSON 필드 처리에 강함

3) Redis 기반 런타임 캐시

실시간 필터링은 PostgreSQL에서 처리하면 느리고 비효율적이다.
그래서 런타임에서는 Redis Set만 사용한다.

  • bad_words:global

  • bad_words:client:{id}

  • Boot-time sync

  • Write-through 캐싱

조회 성능은 O(1)로 매우 빠르다.

4) Sliding Window 기반 단어 추출

한국어 욕설은 대부분 “붙여쓰기 형태”로 나타난다.

  • 씨발놈

  • 좆같냐

  • 개좆같네

이를 해결하기 위해
문장을 2~6자 길이의 substring으로 슬라이딩하여 후보를 만든다.

5) RAG + LangChain 기반 의미 기반 후보 생성

이번 프로젝트의 핵심 차별점은 여기에 있다.

욕설 데이터(단어,설명,변형)를 모두 Embedding하여 VectorStore(Chroma/Qdrant)를 구축한다.

문장이 들어오면 이를 VectorStore에 Query하여 의미적으로 가까운 욕설 후보를 가져온 뒤
LLM이 이를 문맥 기반으로 분류한다.

이 구조가 기존 사전식 필터의 한계를 보완한다.

6) LLM 기반 문맥 판단

  • “새끼 고양이” → 욕 아님

  • “개좋아” → 욕 아님

  • “개같네” → 욕 맞음

이런 케이스들을 문맥 기반으로 정확히 분류한다.

출력은 JSON 형태:

[
  { "original": "ㅅㅂ", "normalized": "씨발", "score": 0.93 }
]

7) Final Scoring

사전식 + AI 점수를 조합하여 allow / warning / block 으로 결과를 반환한다.

🗺️ 전체 개발 로드맵

✔ 1단계 — 기본 스키마 & 캐싱

PostgreSQL + Prisma 구축

금칙어 스키마 설계

Redis 런타임 캐시 구조 확정

Normalization Engine 구현 시작

✔ 2단계 — 사전식 필터링 완성

Sliding Window 후보 추출

Redis 기반 매칭

CRUD + Write-through 캐싱

✔ 3단계 — RAG 파이프라인 구축

데이터 Embedding

VectorStore 인덱싱

LangChain Retriever / Chain 구성

✔ 4단계 — LLM 문맥 판별

JSON Output 전문 프롬프트 개발

Dictionary + AI Scoring 조합

5단계 — API/SDK 개발

/v1/moderation/check

Javascript SDK

Playground UI 제작

✔ 6단계 — SaaS 기반 확장

관리자 페이지

고객별 금칙어

보고서/로그/통계

Rate Limit + Auth

✨ 마무리

말조심(MalJosim) 은 단순히 욕설을 차단하는 기술이 아니라
“정확하고 유연한 대화 환경을 만드는 시스템”을 목표로 한다.

앞으로 개발 과정은 Velog에 계속 기록할 예정이고,
AI 기반 필터링 시스템을 만들고 싶은 개발자에게도 도움이 되기를 바란다.

profile
Backend Developer

0개의 댓글