달파
경력근거: 고객의 비즈니스와 데이터를 Ontology로 구조화하고
※ 실제 산출물이 아닌 AI 예측 시안입니다.
공고가 주요 업무로 '고객의 비즈니스와 데이터를 Ontology로 구조화하고, 흩어져 있는 내부 시스템과 SaaS를 연동·통합해 AI가 신뢰할 수 있는 데이터 기반을 만들어요' 를 적었고, 자격 요건은 '복잡하게 얽힌 비즈니스 엔티티와 워크플로우를 명확한 데이터 스키마로 정리해 오신 분' 입니다. 소비재 브랜드의 상품 마스터는 칸 이름도 값 표기도 회사마다 달라서, 코브라 에이전트를 붙이는 현장의 첫 막힘이 늘 여기서 생깁니다. 이 포트폴리오는 고객사 표와 규격표를 속성 이름으로 맞춰 값을 규격대로 읽어 내는 기술을 보여주며, 화장품 성분 표기 규제나 소비재 상품 분류 체계 전문성은 주장하지 않습니다. 전성분 표기 규정이나 소비재 카테고리 체계를 물으시면 상품표에서 본 만큼만 답할 수 있습니다.
주요 업무에 '고객의 비즈니스와 데이터를 Ontology로 구조화하고, 흩어져 있는 내부 시스템과 SaaS를 연동·통합해 AI가 신뢰할 수 있는 데이터 기반을 만들어요' 가 적혀 있습니다. 고객사 상품표를 그 구조에 얹기 전에 무엇이 못 올라가는지 정하는 일이 이 업무의 첫 칸입니다.
자격 요건이 '복잡하게 얽힌 비즈니스 엔티티와 워크플로우를 명확한 데이터 스키마로 정리해 오신 분' 입니다. 소비재 브랜드의 상품 마스터는 칸 이름도 값 표기도 회사마다 달라, 규격과 맞춰 보는 일이 그 정리의 실물입니다.
풀고 있는 문제로 '사내 문서, 레거시 시스템, SaaS에 흩어진 비정형 데이터를 어떻게 수집·정제하고, AI가 곧바로 탐색할 수 있는 형태로 구조화할 수 있을까?' 를 적었고, 우대사항에도 'Ontology나 Knowledge Graph로 기업 데이터를 구조화하고' 가 있습니다. 올라갈 값과 못 올라갈 값을 갈라 두는 것이 그 구조화의 앞단입니다.
고객사가 내려준 상품 속성표를 상품 하나씩 묶어, 코브라 에이전트가 읽을 Product 온톨로지 규격에 그대로 올라가는지 속성마다 정합니다. 수치 속성은 '50ml내외'·'1,200g' 처럼 단위와 어림 표현이 붙은 문구에서 단위 표기와 천 단위 구분을 떼고 숫자 하나로 읽히는지 보고, 값 목록이 정해진 속성은 고객사가 적은 값이 그 목록 안에 있는지 봅니다. 필수인데 줄이 아예 없거나 값이 비어 있는 속성과 온톨로지에 자리가 없는 사내 속성은 따로 사유를 붙입니다. 표준출력에는 상품 수와 사유별 건수가 뜨고, 같은 실행이 적재 배치가 그대로 읽는 JSON Lines 거부 목록을 남깁니다.
고객사에 들어가 코브라 에이전트를 붙이는 달파 FDE 엔지니어
적재가 중간에 멈추는 이유는 고객사 데이터가 엉망이어서가 아니라, 온톨로지가 요구하는 속성과 고객사 상품표가 쓰는 칸이 서로 다른 말로 적혀 있기 때문입니다. 두 표를 속성 이름으로 맞추고 값을 규격대로 읽어 보면 손볼 속성이 상품마다 목록으로 나옵니다.
상품 속성표와 온톨로지 규격표를 넣으면 속성마다 다섯 사유 중 하나를 정하고, 읽어낸 수치와 규격이 요구하는 형식을 달아 표준출력 요약과 JSON Lines 거부 목록을 내는 CLI 가 도는 완결품입니다. 규격표는 고객사와 이미 합의된 것을 파일로 받아 쓰고, 규격 자체를 제안하는 일은 다루지 않습니다.
여러 브랜드 실행을 합쳐 같은 속성 이름에서 되풀이해 걸린 횟수를 세고, 두 브랜드 이상에서 같은 사유로 걸린 속성을 고객사 입력 서식 손질 후보로 냅니다.
거부 목록을 고객사 데이터 담당에게 보낼 수정 요청 문서로 조립하고, 고친 표를 다시 넣어 직전 실행과 무엇이 달라졌는지 사유별로 견주는 비교 표를 냅니다.
FDE 엔지니어가 상품표와 규격표 두 파일을 걸어 명령을 치면 속성마다 사유가 붙고 사유별 건수가 표준출력에 뜨는 장면을 시연합니다.
속성 60건을 골라 제가 생각한 사유를 먼저 적어 두고, 도구가 낸 사유와 하나씩 견줍니다. 상품표와 규격표가 둘 다 합성 기준이므로 이 값은 규칙이 제가 정한 대로 도는지를 보여줄 뿐, 적재 성능과는 다릅니다.
값이 비어 있는 필수 속성과 단위가 제각각인 수치 문구, 온톨로지에 자리가 없는 사내 속성이 섞인 입력 30종을 먼저 통과시켜 표준출력 요약과 거부 목록 JSON Lines 가 한 줄도 깨지지 않는지 봅니다.
온톨로지에 속성을 하나 더 만들어 넣으면 사내 속성으로 걸리던 칸이 어디로 옮겨 가는지 회귀 테스트로 붙잡아 둡니다.
여기 적힌 숫자는 제가 지어낸 상품표와 규격표 위의 자가채점이라 그 두 파일 밖에서는 뜻이 없습니다. 코브라 에이전트에 실제로 몇 건이 올라갔는지는 달파가 들어간 고객사의 상품 마스터를 걸어야 나옵니다. 그래서 상품표와 규격표를 인자로 받는 모양으로 만들어, 고객사 파일이 생기는 날 같은 대조를 그대로 돌립니다.
상품표와 규격표를 제가 다 적어 둔 뒤에 속성 60건을 제가 채점했으니, 일치율은 규칙이 제 의도를 따라왔다는 확인이지 적재 성능이 아닙니다. 고객사 상품 마스터가 들어와야 비로소 성능이라 부를 숫자가 나옵니다.
더미가 깨끗하면 형식 검사기가 늘 맞으므로, 값이 비어 있는 필수 속성과 어림해 적은 수치 문구, 온톨로지에 자리가 없는 사내 속성을 일부러 섞어 두었습니다.
이 포트폴리오는 고객사 표와 규격표를 속성 이름으로 맞춰 값을 규격대로 읽는 기술을 보여주며, 화장품 성분 표기 규제나 소비재 상품 분류 체계 전문성은 주장하지 않습니다. 판정은 이름 대조와 값 읽기가 정하고 클로드는 거부된 속성을 고객사 담당이 손댈 요청 문장으로만 씁니다.
온톨로지 규격표 자체는 고객사와 달파가 협의해 정하는 것이라 이 도구가 만들지 않습니다. 규격이 바뀌면 판정도 바뀌므로 규격표는 판을 달아 받습니다.
못 올라간다는 판정이 고객사 데이터가 틀렸다는 뜻은 아닙니다. 사내 속성처럼 온톨로지 쪽에 자리를 더 만드는 편이 맞는 경우도 있어, 어느 쪽을 고칠지는 달파 FDE 와 고객사 담당이 정합니다.
실제 상품 마스터는 출시 전 정보가 섞여 고객사 밖으로 못 나가는 경우가 많으므로, 실제 도입에서는 값을 외부로 보내지 않는 구성을 먼저 맞추는 일이 앞섭니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
고객사가 상품관리 시스템에서 내려준 상품 속성표입니다. 줄 번호와 상품 번호, 브랜드, 고객사가 적은 카테고리 원문, 속성 이름, 속성 값, 갱신일을 한 줄에 둡니다. 용량은 '50ml내외'·'1,200g' 처럼 단위와 어림 표현이 붙은 문구로 적히고 가격도 천 단위 구분이 섞여 들어와, 규격의 number 자리와 그대로는 견줄 수 없습니다. 필수인데 값이 비어 있는 줄과 규격에 자리가 없는 사내 속성 줄을 일부러 섞어 사유가 갈리게 둡니다.
| attr_no | sku | brand | category_raw | attr_name | attr_value | updated_at |
|---|---|---|---|---|---|---|
| CP-001 | RA-113204 | 라온코스 | 스킨케어/크림 | 용량 | 50ml내외 | 2026-08-30 |
| CP-002 | RA-113204 | 라온코스 | 스킨케어/크림 | 제형 | 크림 | 2026-08-30 |
| CP-003 | RA-113204 | 라온코스 | 스킨케어/크림 | 전성분 | 정제수, 글리세린, 나이아신아마이드 외 38종 | 2026-08-30 |
| CP-004 | RA-113204 | 라온코스 | 스킨케어/크림 | 가격 | 38,000원 | 2026-08-30 |
| CP-005 | RA-113250 | 라온코스 | 스킨케어/토너 | 용량 | 150 ㎎ | 2026-08-30 |
아래 JSON Schema 를 그대로 만족하는 상품 속성 줄을 300개 더 만들어 주세요. 브랜드를 넷쯤 두고 상품 하나마다 4~8개 속성을 적게 씁니다. 용량은 'ml'·'㎖'·'g'·'L' 표기를 섞고 몇 줄은 '내외'·'약'·'이상' 을 붙여 어림해 적으며, 가격은 '38,000원'·'38000'·'38,000 KRW' 처럼 표기를 섞습니다. 제형·피부타입·향처럼 값이 정해진 속성에는 목록 밖 값을 몇 줄 넣고, 스무 줄에 한 번꼴로 속성 값을 비웁니다. 규격에 없는 사내 속성 이름도 몇 줄 넣으세요. 판정 결과나 사유는 넣지 마세요.
{"type": "object", "properties": {"attr_no": {"type": "string"}, "sku": {"type": "string"}, "brand": {"type": "string"}, "category_raw": {"type": "string"}, "attr_name": {"type": "string"}, "attr_value": {"type": ["string", "null"]}, "updated_at": {"type": "string"}}, "required": ["attr_no", "sku", "brand", "category_raw", "attr_name", "attr_value", "updated_at"]}{"type": "object", "properties": {"attr_no": {"type": "string"}, "sku": {"type": "string"}, "brand": {"type": "string"}, "category_raw": {"type": "string"}, "attr_name": {"type": "string"}, "attr_value": {"type": ["string", "null"]}, "updated_at": {"type": "string"}}, "required": ["attr_no", "sku", "brand", "category_raw", "attr_name", "attr_value", "updated_at"]}코브라 에이전트가 읽는 Product 엔티티 온톨로지 규격표입니다. 규격 줄 번호와 엔티티, 속성 이름, 값 형식, 필수 여부, 허용 목록을 한 줄에 둡니다. 이 표는 고객사와 달파가 이미 합의해 파일로 받은 것이고 이 도구가 만들지 않습니다. 값 형식이 number·date 인 속성은 허용 목록이 비어 있고, enum 인 속성만 목록을 들고 있습니다.
| schema_no | entity | attr_name | value_type | is_required | allowed_values |
|---|---|---|---|---|---|
| OS-001 | Product | 용량 | number | true | — |
| OS-002 | Product | 제형 | enum | true | ["크림","로션","세럼","오일","젤","밤"] |
| OS-003 | Product | 전성분 | text | true | — |
| OS-004 | Product | 가격 | number | true | — |
| OS-005 | Product | 피부타입 | enum | false | ["건성","지성","복합성","민감성","모든피부"] |
아래 JSON Schema 를 그대로 만족하는 온톨로지 규격 줄을 60개 더 만들어 주세요. 엔티티는 Product·Ingredient·Package 셋으로 두고, 값 형식은 number·enum·text·date 중에서 고릅니다. enum 인 속성만 허용 목록을 3~8개 값으로 채우고 나머지는 비웁니다. 필수 여부는 다섯에 둘쯤만 참으로 둡니다. 속성 이름은 소비재 브랜드 상품 마스터에서 실제로 쓰는 한국어 이름으로 씁니다. 판정 결과는 넣지 마세요.
{"type": "object", "properties": {"schema_no": {"type": "string"}, "entity": {"type": "string"}, "attr_name": {"type": "string"}, "value_type": {"type": "string", "enum": ["number", "enum", "text", "date"]}, "is_required": {"type": "boolean"}, "allowed_values": {"type": ["array", "null"], "items": {"type": "string"}}}, "required": ["schema_no", "entity", "attr_name", "value_type", "is_required", "allowed_values"]}{"type": "object", "properties": {"schema_no": {"type": "string"}, "entity": {"type": "string"}, "attr_name": {"type": "string"}, "value_type": {"type": "string", "enum": ["number", "enum", "text", "date"]}, "is_required": {"type": "boolean"}, "allowed_values": {"type": ["array", "null"], "items": {"type": "string"}}}, "required": ["schema_no", "entity", "attr_name", "value_type", "is_required", "allowed_values"]}| Python | 속성 값을 규격대로 읽어 다섯 사유로 정하는 규칙 엔진과 CLI 를 맡습니다. |
| FastAPI | 고객사 적재 배치가 판정 결과를 가져가도록 거부 목록을 내주는 작은 HTTP 창구를 올립니다. |
| PostgreSQL | 온톨로지 규격표와 실행마다의 판정 결과를 담아 두어 주차별로 견줍니다. |
| Airflow | 고객사 상품표가 매일 들어오는 현장에서 판정을 하루 한 번 도는 작업으로 걸어 둡니다. |
| AWS | 2주차부터 판정 작업과 거부 목록 보관을 AWS 로 배포해 운영합니다. |
| TypeScript | 거부 목록을 고객사 담당이 열어 보는 확인 화면의 타입을 판정 결과 규격과 한 벌로 맞춥니다. |
| Next.js | 3주차 수정 요청 문서를 고객사 담당이 브라우저로 여는 페이지로 냅니다. |
| React | 사유별 건수와 상품별 상세를 접었다 펴는 확인 화면을 그립니다. |
| Tailwind | 그 확인 화면의 사유별 색 구분과 간격을 클래스로 맞춥니다. |
| Node.js | 고객사 사내 도구에서 CLI 를 부르도록 실행 결과를 표준출력과 종료 코드로 감싸는 실행기를 둡니다. |
| NestJS | 고객사 사내 시스템이 판정 결과를 받아 가는 연동 창구를 모듈 단위로 나눠 둡니다. |
| Kotlin | 고객사 백엔드가 Kotlin 으로 도는 현장에서 결과를 그대로 읽도록 출력 규격을 JSON 한 벌로 고정합니다. |
| LLM | 거부된 속성을 고객사 데이터 담당이 어느 칸에 어떤 모양으로 적어야 하는지 아는 요청 한 문장으로 씁니다. |
✗ fail → 스키마 밖 속성이 절반을 넘으면 판정을 더 돌리기 전에 규격표부터 고객사와 다시 맞춥니다.
✓ pass → 절반 넘게 덮이면 브랜드별 집계 단계를 시작합니다.
✗ fail → 브랜드마다 따로 걸린 속성이라면 서식을 고치자고 하지 않고 그 브랜드 안에서 처리합니다.
✓ pass → 되풀이되는 속성이 보이면 3주차 수정 요청 문서와 재실행 비교로 넘어갑니다.
상품 하나의 속성 하나가 Product 온톨로지에 그대로 올라가는지 정합니다. 다섯 사유 중 하나를 싣고 규격이 요구하는 형식과 읽어낸 수치, 대조한 규격 줄 번호를 함께 담아 거부 목록과 수정 요청 문서가 그대로 읽습니다.
{"type":"object","properties":{"verdict_no":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"attr_name":{"type":"string"},"attr_no":{"type":["string","null"]},"schema_no":{"type":["string","null"]},"verdict":{"type":"string","enum":["그대로 올라감","필수 속성이 빔","값 형식이 다름","허용 목록에 없는 값","스키마에 없는 속성"]},"expected_type":{"type":["string","null"]},"parsed_number":{"type":["number","null"],"description":"value_type 이 number 인 속성에서 attr_value 의 단위 표기와 천 단위 구분을 떼고 읽은 수치입니다. 수치 하나로 안 읽히거나 number 속성이 아니면 null 입니다"},"evidence":{"type":"array","items":{"type":"object","properties":{"table":{"type":"string","enum":["client_products","ontology_schema"]},"field":{"type":"string"},"agg":{"type":["string","null"]},"value":{}},"required":["table","field","value"]}},"summary":{"type":"string"},"hedge":{"type":["string","null"]}},"required":["verdict_no","sku","brand","attr_name","verdict","evidence","summary"]}[
{
"verdict_no": "OV-001",
"sku": "RA-113204",
"brand": "라온코스",
"attr_name": "용량",
"attr_no": "CP-001",
"schema_no": "OS-001",
"verdict": "값 형식이 다름",
"expected_type": "number",
"parsed_number": null,
"evidence": [
{
"table": "client_products",
"field": "attr_value",
"agg": null,
"value": "50ml내외"
},
{
"table": "ontology_schema",
"field": "value_type",
"agg": null,
"value": "number"
}
],
"summary": "용량을 '50ml내외' 로 적어 단위를 떼어도 수치 하나로 읽히지 않습니다.",
"hedge": null
},
{
"verdict_no": "OV-002",
"sku": "RA-113250",
"brand": "라온코스",
"attr_name": "제형",
"attr_no": null,
"schema_no": "OS-002",
"verdict": "필수 속성이 빔",
"expected_type": "enum",
"parsed_number": null,
"evidence": [
{
"table": "ontology_schema",
"field": "is_required",
"agg": null,
"value": true
},
{
"table": "client_products",
"field": "attr_name",
"agg": "count",
"value": 3
}
],
"summary": "제형은 필수인데 이 상품이 보내온 속성 세 줄 어디에도 없습니다.",
"hedge": null
},
{
"verdict_no": "OV-003",
"sku": "RA-113311",
"brand": "라온코스",
"attr_name": "피부타입",
"attr_no": "CP-008",
"schema_no": "OS-005",
"verdict": "허용 목록에 없는 값",
"expected_type": "enum",
"parsed_number": null,
"evidence": [
{
"table": "client_products",
"field": "attr_value",
"agg": null,
"value": "복합성/민감"
},
{
"table": "ontology_schema",
"field": "allowed_values",
"agg": null,
"value": [
"건성",
"지성",
"복합성",
"민감성",
"모든피부"
]
}
],
"summary": "피부타입을 '복합성/민감' 한 칸에 둘로 적어 다섯 값 중 어느 것도 아닙니다.",
"hedge": "두 값을 함께 쓰는 상품이라면 온톨로지 쪽에서 복수 선택을 열어 주는 편이 맞아, 어느 쪽을 고칠지는 고객사 데이터 담당과 정합니다."
},
{
"verdict_no": "OV-004",
"sku": "RA-113408",
"brand": "라온코스",
"attr_name": "사내코드",
"attr_no": "CP-013",
"schema_no": null,
"verdict": "스키마에 없는 속성",
"expected_type": null,
"parsed_number": null,
"evidence": [
{
"table": "client_products",
"field": "attr_name",
"agg": null,
"value": "사내코드"
},
{
"table": "client_products",
"field": "attr_value",
"agg": null,
"value": "LC-OLD-7741"
},
{
"table": "ontology_schema",
"field": "attr_name",
"agg": "count",
"value": 10
}
],
"summary": "사내코드는 Product 규격 열 속성 어디에도 자리가 없어 에이전트가 읽을 칸이 없습니다.",
"hedge": "옛 상품관리 시스템의 코드로 보이므로, 버릴지 온톨로지에 자리를 만들지는 달파 FDE 와 고객사가 정합니다."
},
{
"verdict_no": "OV-005",
"sku": "RA-113408",
"brand": "라온코스",
"attr_name": "전성분",
"attr_no": "CP-014",
"schema_no": "OS-003",
"verdict": "필수 속성이 빔",
"expected_type": "text",
"parsed_number": null,
"evidence": [
{
"table": "client_products",
"field": "attr_value",
"agg": null,
"value": null
},
{
"table": "ontology_schema",
"field": "is_required",
"agg": null,
"value": true
}
],
"summary": "전성분 줄은 있으나 값이 비어 있어 필수 속성을 채우지 못합니다.",
"hedge": null
},
{
"verdict_no": "OV-006",
"sku": "RA-113455",
"brand": "라온코스",
"attr_name": "출시일",
"attr_no": "CP-018",
"schema_no": "OS-006",
"verdict": "값 형식이 다름",
"expected_type": "date",
"parsed_number": null,
"evidence": [
{
"table": "client_products",
"field": "attr_value",
"agg": null,
"value": "2025년 봄"
},
{
"table": "ontology_schema",
"field": "value_type",
"agg": null,
"value": "date"
}
],
"summary": "출시일을 '2025년 봄' 으로 적어 날짜 하나로 읽히지 않습니다.",
"hedge": null
},
{
"verdict_no": "OV-007",
"sku": "RA-113455",
"brand": "라온코스",
"attr_name": "향",
"attr_no": "CP-023",
"schema_no": "OS-007",
"verdict": "그대로 올라감",
"expected_type": "enum",
"parsed_number": null,
"evidence": [
{
"table": "client_products",
"field": "attr_value",
"agg": null,
"value": "시트러스"
},
{
"table": "ontology_schema",
"field": "allowed_values",
"agg": null,
"value": [
"무향",
"플로럴",
"시트러스",
"우디"
]
}
],
"summary": "향에 적힌 시트러스가 허용 목록 네 값 안에 있습니다.",
"hedge": null
},
{
"verdict_no": "OV-008",
"sku": "RA-113408",
"brand": "라온코스",
"attr_name": "용량",
"attr_no": "CP-015",
"schema_no": "OS-001",
"verdict": "그대로 올라감",
"expected_type": "number",
"parsed_number": 1200,
"evidence": [
{
"table": "client_products",
"field": "attr_value",
"agg": null,
"value": "1,200g"
},
{
"table": "ontology_schema",
"field": "value_type",
"agg": null,
"value": "number"
}
],
"summary": "용량 '1,200g' 에서 단위와 천 단위 구분을 떼면 1200 으로 읽혀 number 자리에 들어갑니다.",
"hedge": null
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 그대로 올라감·필수 속성이 빔·값 형식이 다름·허용 목록에 없는 값·스키마에 없는 속성 다섯 값 중 하나인지 확인합니다. 2. verdict_no 와 sku, brand, attr_name, verdict, evidence, summary 일곱 칸이 빈 곳 없이 채워졌는지 봅니다. 3. expected_type 이 있으면 그 schema_no 행의 value_type 과 같은지 대조합니다. 4. expected_type 이 number 이면 parsed_number 가 attr_value 에서 단위 표기와 천 단위 구분 기호를 떼고 읽은 수치와 같은지 다시 계산합니다. 단위 표기는 ml·㎖·g·kg·원처럼 숫자 뒤에 붙는 글자를 뜻하고, '내외'·'약'·'이상' 같은 어림 표현이 남으면 수치 하나로 읽지 않고 null 로 둡니다. 5. expected_type 이 number 가 아니면 parsed_number 가 null 인지 봅니다. 6. parsed_number 가 0 이상 1000000 이하인지 범위를 봅니다. 7. attr_name 이 그 entity 의 ontology_schema.attr_name 목록에 없으면 verdict 가 스키마에 없는 속성인지 확인합니다. 8. ontology_schema.is_required 가 참인 attr_name 에 대해 그 sku 의 client_products 줄이 없거나 attr_value 가 비어 있으면 verdict 가 필수 속성이 빔인지 확인합니다. 9. value_type 이 number 나 date 인데 parsed_number 가 null 이거나 날짜로 안 읽히면 verdict 가 값 형식이 다름인지 확인합니다. 10. allowed_values 가 채워진 속성에서 attr_value 가 그 목록에 없으면 verdict 가 허용 목록에 없는 값인지 확인합니다. 11. verdict 가 그대로 올라감이면 스키마 대조·필수 확인·형식 읽기·허용 목록 검사 어느 쪽에도 안 걸렸는지 다시 봅니다. 12. 판정 순서는 스키마에 없는 속성, 필수 속성이 빔, 값 형식이 다름, 허용 목록에 없는 값 순으로 먼저 걸리는 갈래를 씁니다. 다만 값이 비어 있는 속성은 형식을 읽어 볼 값 자체가 없어 형식 검사를 돌리지 않습니다. 13. attr_no 가 있으면 client_products 에 실재하는 줄 번호이고 그 줄의 sku·attr_name 이 판정과 같은지 대조합니다. 14. schema_no 가 있으면 ontology_schema 에 실재하는 줄 번호이고 그 줄의 attr_name 이 판정과 같은지 대조합니다. 15. evidence 의 field 가 client_products·ontology_schema 에 있는 컬럼 이름인지 확인합니다. 16. agg 를 적지 않은 evidence 는 value 가 그 줄에 적힌 원문 값과 그대로 같은지 봅니다. 17. summary 가 존댓말로 닫히는지 확인합니다. 고객사 데이터 담당에게 나가는 문장입니다. [평가 러너 · 2주차] 1. 속성 60건에 제가 먼저 적어 둔 사유와 도구 판정을 견줘 일치율을 냅니다. 2. 속성 이름별 빈도를 브랜드로 나눠 세고, 여러 브랜드에 함께 나타나는 속성을 추립니다. [수동 검증 · 사람이 봅니다] 1. 값이 비어 있던 필수 속성을 고객사 상품 담당이 채워 다시 넣습니다. 2. 온톨로지에 자리가 없는 사내 속성을 버릴지 자리를 만들지 달파 FDE 와 고객사가 정합니다.