레브잇
경력근거: 서로 다른 구조의 웹 문서를 정확하게 이해하고 구조화하는 파싱·해석 로직을 만듭니다
※ 실제 산출물이 아닌 AI 예측 시안입니다.
쇼포트가 겨냥하는 차세대 커머스 카탈로그는 여러 쇼핑몰 상품을 한 카탈로그로 모으는 일이라, 몰마다 다른 카테고리 체계를 표준 분류로 합치는 문제가 레브잇이 붙이려는 소스 구성에서 현실적으로 나옵니다. 이 포트폴리오가 보여주는 것은 파싱 가능한 몰을 스크래핑해 LLM으로 카테고리를 정규화하고 검수 관리자 페이지를 붙이는 풀스택 기술이며, 표준 분류의 절대 정답을 정하는 커머스 도메인 전문성이나 대규모 수집 인프라는 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
공개 카테고리 페이지가 파싱 가능한 쇼핑몰 두 곳에서 상품과 원본 카테고리 경로를 스크래핑해 한곳에 모읍니다.
'서로 다른 구조의 웹 문서를 정확하게 이해하고 구조화하는 파싱·해석 로직을 만듭니다'. 몰마다 다른 분류를 하나로 접는 일이 그 구조화입니다.
신뢰도가 낮거나 충돌하는 매핑만 관리자 페이지에 모아 사람이 확인·수정하고, 확정된 매핑은 규칙으로 굳혀 다음부터 자동 적용합니다.
레브잇 PMF팀이 만드는 쇼핑 AI 비서 쇼포트의 커머스 카탈로그를 채우기 위해, 파싱 가능한 쇼핑몰 두 곳을 직접 스크래핑해 몰마다 제각각인 상품 카테고리를 하나의 표준 분류로 정규화하는 관리자 페이지입니다. 스크래핑으로 실제 원본 카테고리를 직접 모은 뒤, 몰마다 이름과 깊이가 다른 그 원본 카테고리를 LLM이 표준 트리 노드로 매핑하고, 매핑에 원본 카테고리 경로를 근거로 달며, 신뢰도가 낮거나 충돌하는 것만 관리자 페이지에 모아 사람이 확인·수정합니다. 스크래핑 대상은 공개 카테고리 페이지가 파싱 가능하고 robots.txt 가 허용하는 몰 두 곳으로 한정합니다.
여러 쇼핑몰 상품을 한 카탈로그로 합칠 때마다 몰마다 다른 카테고리 체계를 손으로 맞추느라 지치던 카탈로그 운영자가, 원본 카테고리를 표준 분류로 자동 매핑받고 애매한 것만 관리자 페이지에서 확인·수정하고 싶은 사람입니다.
몰별 원본 카테고리를 표준 트리 노드로 매핑할 때 LLM이 근거가 될 원본 경로를 함께 내고 같은 원본은 규칙으로 같은 노드에 고정하면, 대부분은 자동으로 정규화되고 애매하거나 충돌하는 것만 사람이 확정해 여러 몰 상품을 한 카탈로그로 합칠 수 있다는 가정입니다.
파싱 가능한 쇼핑몰 두 곳에서 상품과 원본 카테고리 경로를 직접 스크래핑해 모으고, 각 원본 카테고리를 LLM이 표준 트리 노드로 매핑하되 매핑마다 근거 원본 경로를 달아, 관리자 페이지에서 두 몰의 매핑을 표준 노드 기준으로 나란히 보고 확인·수정할 수 있는 완결품입니다. 표준 트리에 없는 노드로 매핑되거나 근거가 원본에 없으면 자동으로 걸러 검수 대기로 올립니다. 스크래핑은 지원자가 직접 수행하고, 실제 원본 카테고리를 그 스크랩 결과에서 받습니다.
1주차 매핑에 신뢰도와 충돌 판정을 붙여, 같은 표준 노드에 두 몰의 서로 다른 원본이 몰리거나 신뢰도가 낮은 매핑을 관리자 페이지 상단으로 올리고, 사람이 확정한 매핑과 LLM 제안의 일치도를 함께 보여줍니다.
세 번째 몰을 붙여 표준 트리와 확정 매핑 규칙이 그대로 재사용되는지 확인하고, 표준 트리에 없는 새 카테고리는 관리자 페이지에서 신규 노드로 제안·승인하는 흐름을 붙입니다.
파싱 가능한 두 몰을 직접 스크래핑해 원본 카테고리를 모으고, 그 원본이 표준 노드로 매핑되어 관리자 페이지에서 몰별로 나란히 검수되는 과정을 시연합니다.
같은 원본 카테고리가 항상 같은 표준 노드로 가는 매핑 일관성과 매핑된 노드의 표준 트리 준수율을 보여주며, 단 표준 트리와 애매 케이스 판정을 작성자가 정한 기준이라 성능 검증이 아니라 데모 조건 동작입니다.
직접 스크래핑한 원본에서 나오는 애매한 상위 분류·몰 간 충돌·표기 흔들림 같은 경계 카테고리를 검수 대상에서 빼지 않아도, 관리자 페이지가 멈추지 않고 검수 대기·충돌로 표시하는 강건성을 보여줍니다.
위 수치는 작성자가 정한 표준 트리 기준 자가채점이며, 실제 표준 분류의 정답과 매핑 품질은 레브잇 실 카탈로그 기준과 실 운영자 검수가 있어야 정해집니다. 이 포트폴리오는 그 검수를 바로 돌릴 수 있는 관리자 페이지까지 만듭니다.
수치는 작성자가 정한 표준 트리 기준 자가채점이라 성능 증명이 아니므로, 면접에서는 데모 동작과 실검증 준비 상태로 솔직히 설명합니다.
정답 기준을 작성자가 만들었으니 쉬운 분류만 보여주면 잘 맞는 게 당연하므로, 애매한 상위 분류·몰 간 충돌·표기 흔들림 같은 경계 카테고리를 검수 대상에서 일부러 빼지 않고 그대로 포함해 쉬운 문제만 푸는 함정을 피합니다.
이 포트폴리오가 보여주는 것은 스크래핑·LLM 카테고리 정규화·검수 관리자 페이지 풀스택 기술이며, 어떤 표준 분류가 옳은지 정하는 커머스 도메인 전문성이나 대규모 수집 인프라는 주장하지 않습니다. 매핑 일관성과 표준 트리 존재는 규칙으로 채점하고 LLM은 신규·애매 매핑 제안만 맡아 사람이 관리자 페이지에서 확정합니다.
카테고리의 옳은 분류는 본래 주관이 섞이므로 절대 정답이 없고, 스크래핑도 파싱 가능·robots.txt 허용 몰 두 곳으로 한정했습니다. 실제 도입 때는 레브잇 표준 카탈로그 기준·실 운영자 검수와 소스 확대·법적 수집 검토가 필요하므로 도입 단계 과제로 둡니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
정규화의 대상이 되는 표준 카테고리 트리로, 각 노드에 몰마다 다르게 부르는 별칭을 모아 둡니다. 직접 스크래핑한 원본 카테고리는 먼저 별칭·정확 일치로 이 트리에 규칙으로 붙이고, 트리에 없거나 별칭이 겹쳐 애매한 원본만 LLM 이 표준 노드를 제안하므로, 이 트리가 정규화의 정답 기준이자 LLM 이 개입하는 경계를 정합니다.
| node_id | parent_id | name | level | aliases |
|---|---|---|---|---|
| STD.패션 | — | 패션 | 1 | ["패션","의류"] |
| STD.패션.아우터 | STD.패션 | 아우터 | 2 | ["아우터","outer","겉옷"] |
| STD.패션.아우터.코트 | STD.패션.아우터 | 코트 | 3 | ["코트","코트/자켓"] |
| STD.뷰티 | — | 뷰티 | 1 | ["뷰티","화장품/미용","화장품"] |
| STD.뷰티.스킨케어 | STD.뷰티 | 스킨케어 | 2 | ["스킨케어"] |
다음 JSON Schema 에 맞는 표준 카테고리 노드를 더 추가하세요: {"type":"object","properties":{"node_id":{"type":"string"},"parent_id":{"type":["string","null"]},"name":{"type":"string"},"level":{"type":"integer"},"aliases":{"type":"array","items":{"type":"string"}}},"required":["node_id","name","level"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: 같은 개념을 몰마다 다르게 부르는 별칭을 aliases 에 모으고(아우터/outer/겉옷 처럼), 상위 노드만 있고 하위가 아직 없는 얕은 노드, 형제인데 어떤 몰은 3단계 어떤 몰은 4단계로 깊이가 다른 노드, 별칭이 겹쳐 두 노드 중 어디로 붙일지 애매한 노드를 포함하세요. 별칭은 실제 몰에서 쓰는 표기를 기준으로 하고, 트리 구조(parent_id 연결)가 끊기지 않게 하세요. 형식 깨뜨리기 시도(스키마 타입 위반) 3건은 데이터가 아니라 별도 목록으로 표시하세요.{"type":"object","properties":{"node_id":{"type":"string"},"parent_id":{"type":["string","null"]},"name":{"type":"string"},"level":{"type":"integer"},"aliases":{"type":"array","items":{"type":"string"}}},"required":["node_id","name","level"]}| Python | 쇼핑몰 두 곳의 카테고리·상품 페이지를 파싱해 원본 카테고리 경로를 뽑는 스크래핑 워커를 구현합니다. |
| BeautifulSoup4 | 정적 카테고리 페이지 HTML에서 몰별 셀렉터로 카테고리 경로를 파싱합니다. |
| Puppeteer/Selenium | 자바스크립트로 그려지는 카테고리 메뉴를 렌더해 파싱 입력이 될 경로를 확보합니다. |
| TypeScript | 표준 트리·매핑 스키마와 관리자 페이지 백엔드 API를 타입으로 묶어, 표준 트리에 없는 노드나 필드 누락을 컴파일 단계에서 막습니다. |
| React | 두 몰의 매핑을 표준 노드 기준으로 나란히 보고 확인·수정하는 관리자 페이지를 구현합니다. |
| Claude Sonnet | 원본 카테고리 경로를 표준 트리 노드로 매핑하고 근거 원본 경로를 함께 내며, 표준 트리 존재 여부와 일관성은 규칙이 판정합니다. |
| 데이터 파이프라인 | 스크래핑·매핑·검증·검수 확정을 단계로 나눠, 확정된 매핑을 규칙으로 굳혀 다음 실행의 입력으로 흘려보냅니다. |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 2주차에서 신뢰도·충돌을 가려 검수를 우선순위로 정렬합니다.
✓ pass → 여기서 멈춰도 검증된 완결입니다. 더 키우려면 3주차에서 세 번째 몰로 재사용성과 신규 카테고리 제안을 다룹니다.
원본 카테고리 한 건을 받아 매핑된 표준 노드와 근거 원본 경로, 검수 상태를 함께 내보내, 표준 트리에 없거나 근거 없는 매핑을 규칙으로 걸러 관리자 페이지 검수로 올릴 수 있게 합니다.
{"type":"object","properties":{"raw_id":{"type":"string"},"mall":{"type":"string"},"standard_node_id":{"type":["string","null"]},"evidence_path":{"type":["string","null"]},"confidence":{"type":"number"},"status":{"type":"string","enum":["auto_confirmed","needs_review","conflict","new_suggestion"]},"hedge":{"type":["string","null"]}},"required":["raw_id","mall","standard_node_id","evidence_path","status"]}[
{
"raw_id": "C-1001",
"mall": "몰A",
"standard_node_id": "STD.패션.아우터.코트",
"evidence_path": "여성의류 > 아우터 > 코트",
"confidence": 0.95,
"status": "auto_confirmed",
"hedge": null
},
{
"raw_id": "C-1002",
"mall": "몰B",
"standard_node_id": "STD.패션.아우터.코트",
"evidence_path": "패션 > 여성 > 겉옷 > 코트/자켓",
"confidence": 0.86,
"status": "needs_review",
"hedge": "몰B 는 코트와 자켓을 한 노드로 묶어, 표준의 코트 노드로 볼지 자켓과 나눌지 사람 확인이 필요합니다."
},
{
"raw_id": "C-1005",
"mall": "몰A",
"standard_node_id": null,
"evidence_path": "기타 > 전체상품",
"confidence": 0.2,
"status": "needs_review",
"hedge": "기타·전체상품 은 표준 노드로 특정할 근거가 약해 검수 대기로 올렸습니다(합성 기준)."
},
{
"raw_id": "C-1010",
"mall": "몰A",
"standard_node_id": "STD.패션.아우터",
"evidence_path": "패션잡화 > outer",
"confidence": 0.7,
"status": "conflict",
"hedge": "outer 를 아우터로 정규화하면 몰A 의 다른 아우터 경로와 상위가 겹쳐 충돌로 표시했습니다."
}
][자동 검증] 1. standard_node_id 가 표준 분류 트리에 실제로 있는 노드인지 대조해, 트리에 없는 매핑은 new_suggestion 또는 needs_review 로 되돌립니다. 2. evidence_path 가 입력 raw_path 와 같은지 확인해, 근거 없는 매핑을 거릅니다. 3. 같은 mall·raw_path 가 이전 확정과 다른 노드로 매핑되면 규칙이 이전 확정으로 고정하고 conflict 로 표시합니다. [수동 검증] 1. 코트/자켓처럼 몰이 묶어 둔 분류를 표준에서 어떻게 나눌지 사람이 관리자 페이지에서 확정합니다. 2. 기타·행사 같은 애매 분류를 미매핑으로 둘지 신규 노드로 만들지 스팟체크합니다.