주요기능 해시태그 분류 — alpha 마이그레이션 기획
backhorock/oosooproduct 패턴 분석 → eval-system-premium(alpha) 적용
jodal-eval-ai · 2026-05-22 · 5/22 데모 준비
요약: oosooproduct 에는 9개 정적 CommonFeatureGroup이 정의되어 있고,
각 author 가 어느 그룹에 속하는지 authorIds 배열로 사전 매핑됩니다.
AuthorComparePanel "주요기능" row 가 author 별 매칭된 그룹을 #해시태그 chip 으로 노출하며,
클릭 시 URL ?group=... 으로 필터 전환됩니다.
alpha 의 같은 인프라 (CommonFeatureGroup 타입, findCommonFeatureGroup, GroupSummary) 는 이미 있으므로
데이터·UI 두 영역만 이식하면 됩니다 .
현황 비교
영역 oosooproduct alpha (현재)
CommonFeatureGroup 타입
id / label / description / background / keywords[] / evaluationPoints[] / authorIds[]
id / label / authorIds[] / description / background — keywords·evaluationPoints 누락
COMMON_FEATURE_GROUPS 데이터
9개 (해시태그 분류 + author 매핑)
"전체" 1개만 — 의미 분류 없음
UI: 해시태그 chip
AuthorComparePanel "주요기능" row 에 #{g.label} 칩
"인증정보" row 만 있음 — 주요기능 row 부재
chip 클릭 → 필터
ctx.selectGroup → URL ?group=... 전환
selectedGroupId 인프라는 있음 — selectGroup ctx 미연결
BidItemSelector 공통기능 dropdown
활성화 + 선택 시 필터링
비활성 (데이터 0)
9개 표준 그룹 (oosooproduct → alpha 이식 대상)
id label 핵심 keywords authors
partial-discharge부분방전·아크 검출 (UHF/HFCT)
UHF 안테나 HFCT TEV 아크 플래시
4
ai-diagnosisAI·머신러닝 진단
딥러닝 결함 분류 위험도 예측
2
seismic내진·면진·방진
면진장치 이중슬립 방진패드 KDS 내진
—
thermal열관리·방열
방열 분체도료 열화상 핫스팟 온도센서
3
live-line-detect활선부 접근 감지·감전 예방
접근 감지 정전용량 전계 센서 인터록
4
remote-iot원격 모니터링·IoT
IoT 게이트웨이 LTE/Wi-Fi 예지보전
4
fire-detect초기 화재 감지·소화
감지기 자동소화 소화액
3
mimic-ledLED 모의모선·시각화
LED 미믹 계통 시각화 활선 표시
2
lpvt저전력 전압 변성기 (LPVT)
LPVT 용량성 분압 IEC 61869
1
분류 매핑 — 3가지 방안
A. 키워드 기반 정적 mock (권장 — 데모 5/22)
BFF endpoint POST /api/admin/recompute-groups — proposal 의 raw.feature_summary 본문 + features 텍스트에서 그룹별 keywords regex 매칭
매칭 score ≥ 1 → 해당 그룹 authorIds 에 추가
frontend 의 COMMON_FEATURE_GROUPS 는 BFF 응답으로 채움 (또는 매 페이지 fetch)
구현: 1~2시간 / 정확도 70~85% (keyword 정확하면 high)
B. LLM 동적 클러스터링
업로드 시 hwpx-intelligence 의 feature_summary.bullets 를 OpenRouter/내부 vLLM 에 보내 9개 카테고리 중 매칭
결과를 proposal.extraction 의 새 필드 feature_groups[] 에 저장
frontend 가 그 필드 read → 칩 렌더
구현: 4~6시간 / 정확도 90%+ / 추가 LLM 비용
C. 수동 admin UI
운영자가 admin 페이지에서 proposal 별 그룹 직접 체크
BFF: PATCH /api/admin/proposals/{id}/groups
구현: 2~3시간 / 정확도 100% / 운영 부담
UI 구조 (oosooproduct 패턴 이식)
"주요기능" row 가 "지정번호" 다음에 위치하며 각 author cell 안에 매칭된 그룹들이 #태그 chip 으로 표시됩니다.
BASIC_INFO_ROWS 변경
{
key: "features",
label: "주요기능",
render: (f, ctx) => {
const matchedGroups = COMMON_FEATURE_GROUPS.filter((g) =>
g.authorIds.includes(ctx.author.id),
);
return (
<div className="space-y-2">
{matchedGroups.length > 0 ? (
<div className="flex flex-wrap gap-1">
{matchedGroups.map((g) => (
<button
key={g.id}
onClick={() => ctx.selectGroup(g.id)}
className="rounded-full bg-indigo-50 px-2 py-0.5 text-[11px] font-semibold text-indigo-700"
>
#{g.label}
</button>
))}
</div>
) : null}
{f.featuresSummary ? (
<p className="text-[12.5px] leading-relaxed">{f.featuresSummary}</p>
) : null}
</div>
);
},
},
chip 클릭 → 필터 (이미 인프라 있음)
HomeClient 가 selectedGroupId 를 URL ?group=... 으로 동기화. AuthorComparePanel 의 ctx.selectGroup 만 wiring.
마이그레이션 단계 (PR 분해)
PR 1 CommonFeatureGroup 타입 확장 + 9개 정적 그룹 시드 (keywords / evaluationPoints / authorIds=[] 초기). 1시간.
PR 2 "주요기능" row 추가 + 해시태그 chip render + ctx.selectGroup. 1시간.
PR 3 방안 A 키워드 매칭 BFF endpoint + 자동 authorIds 계산 + frontend fetch. 2시간.
PR 4 BidItemSelector 공통기능 dropdown 활성화 + 선택 시 author 필터. 1시간.
PR 5 Playwright e2e : 해시태그 chip 1개 이상 / 클릭 시 URL ?group=… / 필터링 검증. 30분.
+선택 운영용 admin UI (수동 그룹 편집) 또는 LLM 클러스터링 endpoint.
변경 파일 인벤토리
파일 변경 출처 참고
frontend/src/app/data/common-features-mock.ts 9개 그룹 정적 시드 + 타입 확장 (keywords / evaluationPoints) oosooproduct 동일 파일 그대로
frontend/src/app/components/AuthorComparePanel.tsx BASIC_INFO_ROWS 에 features row 추가 + ctx.selectGroup oosooproduct 58~110 line
frontend/src/app/components/HomeClient.tsx selectGroup 핸들러 ctx 전달 + URL ?group sync 이미 존재 — wiring 만
frontend/src/app/components/BidItemSelector.tsx dropdown 활성화 — disabled 분기 제거 oosooproduct 동일 패턴
backend/app/api/admin.py POST /api/admin/recompute-groups — 키워드 매칭 (방안 A) 방안 A 신규
backend/app/domains/proposals/use_cases/classify_groups.py 도메인 use case — feature_summary 텍스트 → group ids 추출 방안 A 신규
backend/app/api/proposals.py GET /api/proposals/groups — 그룹별 authorIds 응답 방안 A 신규
frontend/e2e/feature-groups.spec.ts 해시태그 chip + 필터 e2e 신규
예상 효과
지표 현재 alpha 마이그레이션 후
주요기능 row 없음 각 author cell 에 1~5 chip
그룹 필터링 "전체"만 9개 카테고리 dropdown
이름·기능 cross-reference 수동 본문 읽기 chip 1클릭 → 동일 그룹 author 비교
심사 가독성 긴 features 텍스트 해시태그 인덱싱 → 빠른 인사이트
평가 포인트 안내 없음 그룹별 evaluationPoints 자동 노출
generated 2026-05-22 · ai-real-estate-service workspace · jodal-eval-ai