CMS 게시물의 자격요건을 자동으로 구조화
목차
정부 규정 관련 CMS 게시물에서 자격 정보를 자동으로 추출하는 기능을 만들었다. 게시물이 텍스트 형태로 저장되어 있다면, 그 안에 산재된 자격요건들을 구조화된 데이터로 변환해야 하는 경우가 자주 생긴다. 이번 작업은 그 변환 과정을 체계화한 것이다.
왜 이 기능이 필요했나
CMS에 올라오는 게시물들은 사람이 읽기 좋은 형태의 마크업이나 HTML이다. "다음 조건을 만족하는 사람이 신청 가능합니다", "①소득 기준은 월 xxx 이하" 같은 자유로운 텍스트 형식이 대부분이다.
그런데 시스템에서 이런 정보를 활용하려면?
- 사용자 프로필과 자동 매칭하기
- 자격 조건을 구조화된 쿼리로 검색하기
- 대시보드나 API 응답에서 정규화된 형태로 제공하기
이 모든 게 텍스트 덩어리 상태론 불가능하다. 따라서 추출기(extractor)가 필요했다.
추출 로직의 설계
자격요건 추출이 단순해 보이지만, 실제론 꽤 까다롭다:
| 고려사항 | 설명 | 예시 |
|---|---|---|
| 다양한 표현 방식 | 같은 조건을 여러 방식으로 표현 | "연령 20세 이상", "20세 초과" |
| 범위형 조건 | 상한·하한이 함께 있는 경우 | "소득 1억 이상 5억 미만" |
| 복합 조건 | AND/OR 논리가 섞여있음 | "거주지가 서울이거나 경기도인 경우" |
| 예외 케이스 | 특정 조건하에서만 적용 | "기본적으로는 ~이나, 장애인인 경우는 제외" |
추출기를 구축할 때는 정규표현식만으로는 부족하고, 도메인 규칙(domain rules)을 체계적으로 정의해야 한다.
구현의 핵심 포인트
추출기를 만들 때 팀에서 고민했던 부분:
- 신뢰도 vs 커버리지: 모든 케이스를 잡으려다 거짓양성(false positive)이 증가할 위험
-
초기엔 높은 신뢰도로 시작해서, 운영 중 오류를 모니터링하고 룰을 추가하는 방식 선택
-
유지보수성: 매번 게시물 형식이 바뀔 때마다 코드를 수정하면 안 됨
-
추출 규칙을 설정 파일이나 데이터로 분리하는 구조 검토
-
성능: 대량의 게시물을 일괄 처리할 때 비용
- 배치 처리와 캐싱을 고려해 설계
배운 점: 텍스트 추출의 일반적 함정
이 작업을 하면서 느낀 건, "텍스트 파싱은 생각보다 훨씬 복잡하다"는 것이다. 특히 사람이 작성한 비정형 데이터에서는:
- 휴먼 에러를 고려해야 함 — 게시물 작성자가 형식을 따르지 않은 경우가 생각보다 많다
- 임계값 설정이 중요 — 어디까지가 "자격요건"인지 경계가 모호할 수 있음
- 검증 단계는 필수 — 자동 추출 후 수동 검증 또는 휴리스틱 검사 없이는 위험
특히 정부 관련 내용처럼 정확성이 중요한 도메인에선 추출된 데이터를 그대로 사용하기보다 "후보군"으로 보고, 최종 검증을 거치는 워크플로우를 설계하는 게 좋다.
이번 기능이 추가되면서 CMS 게시물이 한층 더 '머신 리더블'해졌다. 단순히 디스플레이용 콘텐츠가 아니라 시스템이 이해하고 활용할 수 있는 자산이 된 셈이다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.