한국신용데이터
경력근거: 데이터 프로덕트를 구성하는 백엔드·프론트엔드 전 영역을 직접 설계·구현
※ 실제 산출물이 아닌 AI 예측 시안입니다.
KCD는 여러 서비스에서 모은 대규모 데이터를 외부 기업·기관(B2B/B2G) 대상의 데이터 상품으로 end-to-end 설계하고, 트래픽·SLA·보안과 거버넌스를 함께 책임집니다. 카탈로그 질의 도구는 KCD의 상품·필드 카탈로그와 접근 등급·민감도 메타가 있어야 의미가 생기고, 단순 검색엔진이 아니라 거버넌스 플래그까지 붙는 형태가 됩니다.
공고가 KCD 데이터를 B2B/B2G 데이터 상품으로 끝까지 만드는 역할을 직접 꼽는다. 카탈로그 질의 도구는 그 상품화의 진입점이다.
트래픽·SLA·보안 요건을 충족하는 아키텍처를 요구해, 데이터 접근 권한과 민감도를 제안 단계에서 같이 따져야 한다.
데이터 모델링·서빙·API·대시보드까지 한 사람이 설계하는 자리라, 질의 결과를 API 스펙과 화면으로 잇는 구조가 그대로 들어맞는다.
데이터 상품 카탈로그에 붙이는 자연어 질의 도구입니다. B2B/B2G 고객의 요청을 받아 맞는 데이터 상품·필드를 찾고 샘플 API 스펙과 접근 권한 플래그를 근거 배열과 함께 냅니다.
KCD 데이터사업팀의 데이터 상품 담당자와 외부 기업·기관(B2B/B2G) 고객 응대 담당입니다.
데이터 상품 카탈로그 메타(상품·필드·민감도·접근 등급)만으로도 고객 요청에 맞는 상품·필드 후보와 샘플 쿼리 초안을 만들 수 있고, 담당자는 그 초안을 검토만 하면 됩니다.
데이터 상품 카탈로그 메타(상품·필드·민감도·접근 등급)를 넣고, 고객의 자연어 요청에 맞는 상품·필드 후보와 샘플 API 스펙, 접근 권한 플래그를 근거 배열과 함께 내는 웹 도구입니다. 실데이터 서빙은 빼고 카탈로그 메타와 내부 API 가정으로만 시작한다(실 쿼리 실행은 빠진 20% 인프라라 W3로 분리).
1주차 제안을 카탈로그·접근 규칙과 대조해 필드 존재율과 권한 위반율을 재고, 사람 검토자 한 명이 같은 요청을 처리했다는 가정의 일치도 표를 붙인 v2.
제안한 필드로 실제 서빙 SQL 초안과 대시보드 위젯 스펙을 함께 생성해, 데이터 상품 한 건의 골격을 더 채우는 확장판입니다.
고객 자연어 요청 한 건을 넣으면 맞는 데이터 상품·필드 후보와 샘플 API 스펙, 접근 권한 플래그가 한 화면에 나오는 걸 시연합니다.
제안한 필드가 모두 카탈로그에 실제로 존재하고, 근거 배열이 요청 문장을 인용했는지 judge 로 검사해 필드 존재율 100%를 보여줍니다. 단, 정답·데이터를 작성자가 만든 합성 기준이라 성능 검증이 아니라 데모 조건 동작입니다.
결측·미등록 필드 요청·민감도 경계·표기 흔들림을 일부러 섞은 요청 30종을 넣어도 출력 JSON 형식이 안 깨지고 '미매핑·권한없음'으로 알리는 걸 시연합니다.
제안 처리와 합성 정답 처리의 일치도를 Cohen's κ(두 채점자가 우연 이상으로 얼마나 일치하는지 -1~1 점수, 높을수록 일치)로 2주차에 보고합니다. 합성 기준 추정이라 실제 일치도와 다를 수 있습니다.
위 수치는 더미데이터 자가채점이며, 실제 매핑 정확도와 권한 정합성은 KCD 실제 카탈로그와 실 데이터 상품 담당자가 있어야 측정 가능합니다. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태까지 만듭니다.
수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서 데모 동작과 실검증 준비 상태로 솔직히 설명합니다.
정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. 결측·미등록 필드·민감도 경계·표기 흔들림을 더미에 일부러 섞어 쉬운 문제만 푸는 함정을 피합니다.
카탈로그 필드명이 요청 표현과 다르게 적혀 표면 유사도가 곧 의미 일치는 아닙니다. 실데이터 도입 단계에서 필드 용어 사전을 맞추는 과제로 분리합니다.
실제 도입 시 합성 정답이 실제 담당자 판단으로 바뀌고 카탈로그 규모·권한 규칙도 달라집니다. 매핑 기준과 권한 가드를 실 카탈로그로 다시 맞추는 일을 도입 과제로 둡니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
B2B/B2G 데이터 상품과 그 필드의 메타. 자연어 요청 매핑의 검색 대상.
| field_id | product_raw | product_id | field_name | data_type | sensitivity | access_tier | unit | description |
|---|---|---|---|---|---|---|---|---|
| F001 | 소상공인 매출지수 | sales_index | monthly_sales_amount | float | high | B2B | KRW | 월 매출 합계 |
| F002 | 소상공인매출지수 | sales_index | region_code | string | public | public | — | 행정구역 코드 |
| F003 | 상권분석 | trade_area | footfall_count | int | low | B2B | 명 | 추정 유동인구 |
| F004 | 상권분석 | — | card_owner_age | int | pii | internal | 세 | 카드 소유자 연령(개인 식별 위험) |
| F005 | 사업자생존지표 | survival | closure_rate | float | high | B2G | % | 분기 폐업률 |
다음 Zod 스키마를 따르는 카탈로그 행을 더 생성하라: {"type":"object","properties":{"field_id":{"type":"string"},"product_raw":{"type":"string"},"product_id":{"type":["string","null"]},"field_name":{"type":"string"},"data_type":{"type":"string","enum":["int","float","string","date","bool"]},"sensitivity":{"type":"string","enum":["public","low","high","pii"]},"access_tier":{"type":"string","enum":["public","B2B","B2G","internal"]},"unit":{"type":["string","null"]},"description":{"type":"string"}},"required":["field_id","product_raw","product_id","field_name","data_type","sensitivity","access_tier","unit","description"]}. 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: unit 이 null 인 미입력 건, product_id 가 null 인 미등록 신규 상품(orphan), 같은 상품의 띄어쓰기·표기 흔들림(product_raw 다름·product_id 동일), sensitivity 'pii' 와 access_tier 'internal' 인 외부 제공 불가 경계 필드. 추가로 형식 깨뜨리기 시도 3건(타입이 어긋난 행)을 별도 표시해 파서 가드 테스트에 쓴다.{"type":"object","properties":{"field_id":{"type":"string"},"product_raw":{"type":"string"},"product_id":{"type":["string","null"]},"field_name":{"type":"string"},"data_type":{"type":"string","enum":["int","float","string","date","bool"]},"sensitivity":{"type":"string","enum":["public","low","high","pii"]},"access_tier":{"type":"string","enum":["public","B2B","B2G","internal"]},"unit":{"type":["string","null"]},"description":{"type":"string"}},"required":["field_id","product_raw","product_id","field_name","data_type","sensitivity","access_tier","unit","description"]}| Kotlin | 질의 엔진 서버의 런타임. 카탈로그 조회·LLM 호출·스키마 검증·권한 규칙을 묶는 백엔드 로직을 돌린다. |
| Spring | 질의 API 를 계층(요청 검증·카탈로그 조회·LLM 어댑터·권한 가드)으로 나눠 데이터 프로덕트에 붙이기 쉽게 구성한다. |
| React | 담당자가 요청과 제안 상품·필드·근거·권한 플래그를 보고 고르는 검토 화면을 만든다. |
| PostgreSQL | 데이터 상품 카탈로그(상품·필드·민감도·접근 등급)와 제안·검토 이력을 저장하고 조회한다. |
| MySQL | 레거시 데이터 상품 메타가 MySQL 에 있는 경우를 가정해 카탈로그를 두 소스에서 통합 조회한다. |
| Claude | 고객 자연어 요청을 카탈로그 필드로 매핑하고, 어떤 필드를 왜 골랐는지 근거 배열을 생성한다. |
| LLM-as-judge | 제안한 필드가 실제 카탈로그에 있는지, 근거가 요청을 인용했는지 검사하는 보조 모델. |
✓ pass → 여기서 멈춰도 담당자 초안 도구로 완결입니다. 더 키우려면 2주차에서 제안 필드가 카탈로그에 실제 있고 권한을 안 어기는지 대조해 보정합니다.
✓ pass → 담당자 신뢰가 붙으면 3주차에서 실 서빙 SQL과 대시보드 위젯 스펙까지 확장합니다.
고객 자연어 요청 한 건에 대한 데이터 상품·필드 매핑과 샘플 API 스펙, 접근 권한 판정.
{"type":"object","properties":{"request_id":{"type":"string"},"matched_fields":{"type":"array","items":{"type":"object","properties":{"field_id":{"type":"string"},"product_id":{"type":["string","null"]},"confidence":{"type":"number"}},"required":["field_id","product_id","confidence"]},"minItems":0},"sample_api":{"type":"object","properties":{"endpoint":{"type":"string"},"params":{"type":"array","items":{"type":"string"}}},"required":["endpoint","params"]},"access_flag":{"type":"string","enum":["ok","needs_review","denied"]},"evidence":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","enum":["request_text","field_name","description","access_tier"]},"note":{"type":"string"}},"required":["field","note"]},"minItems":1},"hedge":{"type":"string"}},"required":["request_id","matched_fields","sample_api","access_flag","evidence","hedge"]}[
{
"request_id": "Q001",
"matched_fields": [
{
"field_id": "F001",
"product_id": "sales_index",
"confidence": 0.82
},
{
"field_id": "F010",
"product_id": "sales_index",
"confidence": 0.6
}
],
"sample_api": {
"endpoint": "/v1/sales_index",
"params": [
"region_code",
"month"
]
},
"access_flag": "ok",
"evidence": [
{
"field": "description",
"note": "'지역별 월매출' 요청에 매출지수 매핑"
},
{
"field": "access_tier",
"note": "B2B 등급이라 제공 가능"
}
],
"hedge": "confidence 는 합성 카탈로그 기준 추정이라 실제 매핑 정확도와 다를 수 있다."
},
{
"request_id": "Q002",
"matched_fields": [
{
"field_id": "F004",
"product_id": null,
"confidence": 0.55
}
],
"sample_api": {
"endpoint": "/v1/trade_area",
"params": [
"card_owner_age"
]
},
"access_flag": "denied",
"evidence": [
{
"field": "access_tier",
"note": "pii·internal 필드라 외부 제공 불가"
},
{
"field": "field_name",
"note": "card_owner_age 는 개인 식별 위험"
}
],
"hedge": "권한 판정은 합성 규칙 기준이라 실 거버넌스 정책과 다를 수 있다."
},
{
"request_id": "Q003",
"matched_fields": [],
"sample_api": {
"endpoint": "",
"params": []
},
"access_flag": "needs_review",
"evidence": [
{
"field": "description",
"note": "요청에 맞는 필드를 카탈로그에서 못 찾아 미매핑으로 알림"
}
],
"hedge": "미등록 요청이라 사람 검토 필요. 합성 기준."
}
]matched_fields 의 field_id·product_id 가 카탈로그에 있는지, access_flag enum, evidence min(1)은 Zod 와 카탈로그 조인으로 자동 검증한다. evidence note 가 요청·필드와 의미상 맞는지, hedge 가 합성 기준임을 밝혔는지는 judge 모델과 수동 spot-check 로 검증한다. confidence 는 합성 카탈로그 기준 추정값이라 metrics 의 정직 경계선과 일관되게 검증된 수치로 제시하지 않는다.
근거: 데이터 프로덕트를 구성하는 백엔드·프론트엔드 전 영역을 직접 설계·구현