이 글의 배경이 되는 이야기는 7화: 포장지에 답이 있었습니다에서 읽을 수 있습니다.
이 글을 읽으면 알 수 있는 것
- 품목제조보고(C002)의 원재료 데이터가 왜 대분류 수준에 머무는 경우가 많은지
- HACCP 포장지표기정보 API에서 어떤 품질의 데이터를 얻을 수 있는지
- 두 데이터 소스를 결합할 때의 우선순위 설계
문제: “유지류”가 전부인 성분표
식품안전나라 C002 API는 제품의 원재료 목록을 제공합니다. 104만 건의 제품에 대해 원재료 정보가 있으니, 양으로 보면 충분해 보입니다.
그런데 데이터를 하나씩 들여다보니 품질 편차가 컸습니다.
| 제품 예시 | C002 원재료 데이터 |
|---|---|
| A 과자 | 밀가루(밀:미국산, 호주산), 팜유(말레이시아산), 설탕, 정제소금, L-글루타민산나트륨… (20개 이상) |
| B 과자 | 밀가루, 설탕, 유지류 (3개) |
B 제품에 원재료가 세 가지만 들어가는 것이 아닙니다. 품목제조보고서에 그렇게만 기재한 겁니다.
이 차이가 문제가 되는 이유는 명확합니다. “유지류”라는 대분류로는 그 안에 팜유가 있는지, 코코넛유가 있는지 알 수 없습니다. 기피 성분 판별이 불가능합니다.
발견: HACCP 포장지표기정보 API
공공데이터포털을 탐색하다가 HACCP 인증 관련 API를 발견했습니다.
이 API의 응답에는 rawmtrl이라는 필드가 있었습니다. 포장지에 인쇄된 원재료 텍스트를 그대로 담고 있는 필드입니다.
C002에서 “밀가루, 설탕, 유지류”로만 나오던 제품이, HACCP API에서는 이렇게 나왔습니다:
밀가루(밀:미국산, 호주산), 설탕, 팜유(말레이시아산),
전분(옥수수:미국산), 정제소금, L-글루탐산나트륨(향미증진제),
5'-리보뉴클레오티드이나트륨(향미증진제)…
포장지에 인쇄되어 있는 그 원문이었습니다. 원산지 정보, 첨가물의 기능 분류까지 포함된 상세 데이터.
여기에 알레르기 유발물질(allergy), 영양성분(nutrient), 바코드(barcode)까지 함께 제공됩니다.
갈림길: 데이터가 겹칠 때 누구를 믿을 것인가
HACCP API에 등록된 제품 중 상당수는 C002에도 원재료 데이터가 있습니다. 같은 제품에 대해 두 가지 소스가 존재하는 상황. 어느 쪽을 우선할지 정해야 했습니다.
| 전략 | 장점 | 단점 |
|---|---|---|
| C002만 사용 | 104만 건 전체 커버 | 대분류 수준 제품이 많음 |
| HACCP만 사용 | 포장지 원문 수준의 상세함 | 1.4%만 커버 |
| HACCP 우선, C002 보완 | 있는 곳에서 최고 품질, 나머지도 커버 | 소스별 품질 편차가 서비스에 노출됨 |
세 번째를 선택했습니다.
연결 기준은 prdlstReportNo(품목제조보고번호)입니다. HACCP 데이터에도 이 번호가 있어서, Product 테이블과 1:1로 연결할 수 있었습니다. 이름이나 제조사를 비교해서 추정하는 것이 아니라, 번호가 일치하는 것끼리만 연결합니다.
적재 설계: 무의미한 값 정리
API 응답에는 "알수없음", "N/A", "-" 같은 값이 섞여 있었습니다. 원래 비어 있어야 할 필드에 이런 문자열이 들어가 있으면, 나중에 “데이터가 있는 제품”을 셀 때 오류가 생깁니다.
그래서 적재 단계에서 무의미한 값을 일괄 정리했습니다.
빈 문자열, "알수없음", "null", "N/A", "n/a", "-"
→ 모두 "값 없음"으로 통일
이렇게 하면 “이 제품에 원재료 데이터가 있는가?”라는 질문에 정확히 답할 수 있습니다. 필드가 비어 있으면 진짜 없는 것이고, 값이 있으면 진짜 있는 겁니다.
결과
| 항목 | 수치 |
|---|---|
| HACCP API 등록 제품 | ~14,700건 |
| 전체 제품 대비 비율 | ~1.4% |
| Product 테이블 FK 연결 | prdlstReportNo 기반 1:1 |
| 추가 확보 정보 | 포장지 원재료, 알레르기, 영양성분, 바코드, 제품 이미지 |
한계
커버리지가 1.4%입니다. HACCP 인증을 받은 제품 중에서도 포장지표기정보가 등록된 것만 해당합니다. 나머지 98.6%의 제품은 여전히 C002 데이터에 의존합니다.
HACCP 데이터도 완벽하지 않습니다. 일부 제품은 rawmtrl 필드가 비어 있거나, 원재료가 아닌 제품 설명이 들어가 있는 경우도 있었습니다.
한 줄 교훈
하나의 API가 부족할 때, 같은 정보를 다른 형태로 제공하는 또 다른 API가 존재할 수 있습니다. 공공데이터포털은 생각보다 넓습니다.