이 글의 배경이 되는 이야기는 16화: 법이 바뀌면 앱도 바뀌어야 한다에서 읽을 수 있습니다.
이 글을 읽으면 알 수 있는 것
- 식품 규제 데이터가 “한 번 수집하면 끝”이 아닌 이유
- RSS 피드 수집 + 키워드 필터링 구조
- 알림 상태 관리(NEW → REVIEWED → ACTION_TAKEN)의 설계
- 완전 자동화가 불가능한 영역에서의 현실적 대응
문제: 고시는 바뀌는데 코드는 가만히 있습니다
이전 글에서 첨가물 사용기준 고시를 파싱하는 이야기를 했습니다. 「식품첨가물의 기준 및 규격」이라는 고시를 hwpx에서 추출하여 DB에 적재했습니다.
그런데 이 고시는 정적인 문서가 아닙니다. 새로운 과학적 근거, 국제 기준 변경, 현장의 필요에 의해 꽤 자주 개정됩니다.
고시가 개정되면:
- 새로운 첨가물이 허가될 수 있습니다
- 기존 첨가물의 사용 기준이 변경될 수 있습니다
- 알레르기 표시 대상이 추가될 수 있습니다
이런 변경을 감지하지 못하면, 서비스는 이전 규정에 기반한 정보를 보여주게 됩니다. 틀린 정보를 보여주는 것과 같습니다.
갈림길: 변경 감지를 어떻게 할 것인가
| 방법 | 장점 | 단점 |
|---|---|---|
| 수동 확인 (정기 방문) | 구현 불필요 | 놓칠 확률 높음, 확인 빈도 불규칙 |
| 웹 스크래핑 | 상세 내용 추출 가능 | 사이트 구조 변경에 취약, 법적 리스크 |
| RSS 피드 구독 | 공식 제공 경로, 안정적 | RSS 제공 범위에 한정 |
식약처에서 공식적으로 RSS 피드를 제공하고 있었습니다. 공식 경로이므로 안정적이고, 구현도 단순합니다.
설계: 3개 피드, 키워드 필터링, 상태 관리
수집 대상
식약처 RSS 피드 3개를 구독합니다.
| 피드 | 내용 |
|---|---|
| 최근 개정규정 | 고시 개정 사항 |
| 법령/고시/훈령 | 법규 전반 |
| 행정예고 | 개정 예정 사항 (시행 전 공지) |
행정예고를 포함한 이유가 있습니다. 고시가 확정되기 전에 미리 예고가 나오므로, 대응 시간을 확보할 수 있습니다.
키워드 필터링
모든 RSS 항목을 저장하지는 않습니다. 제목에 관련 키워드가 포함된 항목만 걸러냅니다.
식품첨가물, 표시기준, 영양성분, 원재료,
식품위생, 알레르기, 알레르겐, 건강기능식품,
식품등의 표시, 기준 및 규격, 식품공전
이 11개 키워드 중 하나라도 제목에 포함되면 알림 대상이 됩니다. 필터 없이 전체를 저장하는 옵션도 있지만, 기본은 필터링 모드입니다.
상태 관리
알림은 4단계 상태를 가집니다.
NEW → REVIEWED → ACTION_TAKEN
↘ DISMISSED
| 상태 | 의미 |
|---|---|
| NEW | 감지됨, 아직 확인 안 함 |
| REVIEWED | 내용 확인 완료, 영향 분석 중 |
| ACTION_TAKEN | 서비스에 반영 완료 |
| DISMISSED | 확인했으나 서비스에 영향 없음 |
RSS 수집은 자동이지만, 확인과 반영은 사람이 합니다.
알림 흐름
전체 흐름은 이렇습니다.
[매주 자동 실행]
RSS 수집 → 키워드 필터링 → 중복 제거 → DB 저장 (status=NEW)
↓
이메일 발송 (신규 감지 건수 + 미확인 누적 건수)
↓
[사람이 처리]
이메일 확인 → 원문 링크로 고시 내용 확인 → 상태 변경
이메일은 신규 항목이 없어도 발송됩니다. “이번 주에는 관련 고시 변경이 없었습니다”라는 정기 리포트 형태입니다. 보내지 않으면 “시스템이 제대로 돌고 있는지” 알 수 없기 때문입니다.
중복 방지는 RSS 항목의 고유 ID(entry_id)로 처리합니다.
같은 항목이 여러 번 수집되어도 한 번만 저장됩니다.
결과
| 항목 | 내용 |
|---|---|
| 모니터링 피드 | 3개 (최근 개정규정, 법령/고시/훈령, 행정예고) |
| 필터 키워드 | 11개 |
| 알림 상태 | 4단계 (NEW → REVIEWED → ACTION_TAKEN / DISMISSED) |
| 실행 주기 | 주 1회 (자동) |
| 알림 채널 | 이메일 |
한계
감지는 자동이지만, 대응은 수동입니다. 고시가 바뀐 것을 알려줄 수는 있지만, 바뀐 내용을 자동으로 파싱해서 DB에 반영하는 것은 아직 불가능합니다. 고시 원문을 읽고, 영향 범위를 파악하고, 데이터를 수정하는 것은 사람의 일입니다.
키워드 필터링의 한계가 있습니다. “식품첨가물”이라는 단어가 제목에 없지만 내용은 관련된 고시가 있을 수 있습니다. 반대로, 키워드가 포함되어 있지만 실제로는 서비스와 무관한 건도 있습니다.
RSS 피드 자체의 한계입니다. RSS에는 제목과 링크만 포함되어 있고, 고시의 상세 내용은 없습니다. 어떤 조항이 어떻게 바뀌었는지는 원문을 직접 확인해야 합니다.
한 줄 교훈
데이터를 한 번 수집하는 것보다 최신 상태로 유지하는 것이 더 어렵습니다. 규제 데이터를 다루는 서비스라면, 규제 변경 감지 체계는 선택이 아니라 필수입니다.