156 lines
4.3 KiB
JSON
156 lines
4.3 KiB
JSON
{
|
|
"version": "1.1",
|
|
"id": "record-kind-fanout",
|
|
"title": "새 CONCEPT 종류가 세 영역의 손 목록으로 퍼진 구조",
|
|
"question": "CONCEPT 하나를 추가했는데 왜 계약·백엔드·프론트엔드 여러 위치를 동시에 고쳐야 했는가?",
|
|
"type": "dependency",
|
|
"direction": "LR",
|
|
"audience": [
|
|
"프론트엔드 개발자",
|
|
"백엔드 개발자",
|
|
"계약 설계자"
|
|
],
|
|
"summary": "종류를 손으로 나열한 코드가 여러 영역에 흩어져 있어 CONCEPT 하나가 프론트엔드 9곳, 백엔드 1곳, 계약 3곳에서 따로 빠졌다.",
|
|
"alt": "새 CONCEPT 노드에서 프론트엔드 손 목록, 백엔드 손 목록, 계약 enum 세 갈래로 퍼지는 팬아웃 그림. 각 갈래에는 실제 누락 건수 9, 1, 3이 적혀 있다.",
|
|
"long_description": "왼쪽의 새 CONCEPT가 세 갈래로 퍼진다. 프론트엔드에는 게이트웨이 분기, 매퍼, 필터 같은 손 목록이 아홉 곳 있었고, 백엔드에는 PublicSql.pathOf 한 곳이 빠졌다. 계약에는 CatalogEntry.kind, ResolvedRelation.targetKind, RelatedEntry.type 세 enum 누락이 있었다. 아래 본문 표가 열세 위치를 정확히 나열하고, 그림은 왜 한 종류 변경이 세 영역으로 퍼졌는지만 보여 준다.",
|
|
"source_context": {
|
|
"document": "docs/TechLog/final/document.md",
|
|
"document_sha256": "c3a7de37b778fff7b6ea555a3ad7338c91c6fb15d685e7734f89472b4924d955",
|
|
"anchor": {
|
|
"kind": "heading",
|
|
"value": "3. 손으로 나열한 목록이 새 종류를 삼킨다",
|
|
"line": 311
|
|
}
|
|
},
|
|
"composition": {
|
|
"profile": "component-flow",
|
|
"diagram_only": true,
|
|
"reference_ids": [
|
|
"payment-event-flow"
|
|
],
|
|
"rationale": "정확한 열세 위치는 이미 표가 있으므로, 그림은 새 종류 하나에서 계약·백엔드·프론트엔드로 퍼지는 의존 방향만 보여 준다.",
|
|
"focus_node": "concept"
|
|
},
|
|
"groups": [],
|
|
"nodes": [
|
|
{
|
|
"id": "concept",
|
|
"label": "CONCEPT",
|
|
"kind": "message",
|
|
"role": "source",
|
|
"details": [
|
|
"새 Record Kind"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"start_line": 316,
|
|
"end_line": 331
|
|
}
|
|
],
|
|
"assumption": false,
|
|
"emphasis": "primary"
|
|
},
|
|
{
|
|
"id": "frontend",
|
|
"label": "Frontend 손 목록",
|
|
"kind": "component",
|
|
"role": "service",
|
|
"details": [
|
|
"9곳",
|
|
"gateway · mapper · filter"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"start_line": 335,
|
|
"end_line": 345
|
|
}
|
|
],
|
|
"assumption": false
|
|
},
|
|
{
|
|
"id": "backend",
|
|
"label": "Backend 손 목록",
|
|
"kind": "component",
|
|
"role": "service",
|
|
"details": [
|
|
"1곳",
|
|
"PublicSql.pathOf"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"start_line": 345,
|
|
"end_line": 349
|
|
}
|
|
],
|
|
"assumption": false
|
|
},
|
|
{
|
|
"id": "contract",
|
|
"label": "Contract enums",
|
|
"kind": "component",
|
|
"role": "sink",
|
|
"details": [
|
|
"3곳",
|
|
"CatalogEntry.kind",
|
|
"ResolvedRelation.targetKind",
|
|
"RelatedEntry.type"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"start_line": 346,
|
|
"end_line": 352
|
|
}
|
|
],
|
|
"assumption": false
|
|
}
|
|
],
|
|
"edges": [
|
|
{
|
|
"id": "to-frontend",
|
|
"from": "concept",
|
|
"to": "frontend",
|
|
"label": "kind 추가",
|
|
"kind": "data",
|
|
"evidence": [
|
|
{
|
|
"start_line": 330,
|
|
"end_line": 345
|
|
}
|
|
],
|
|
"assumption": false
|
|
},
|
|
{
|
|
"id": "to-backend",
|
|
"from": "concept",
|
|
"to": "backend",
|
|
"label": "kind 추가",
|
|
"kind": "data",
|
|
"evidence": [
|
|
{
|
|
"start_line": 345,
|
|
"end_line": 349
|
|
}
|
|
],
|
|
"assumption": false
|
|
},
|
|
{
|
|
"id": "to-contract",
|
|
"from": "concept",
|
|
"to": "contract",
|
|
"label": "enum 추가",
|
|
"kind": "data",
|
|
"evidence": [
|
|
{
|
|
"start_line": 346,
|
|
"end_line": 352
|
|
}
|
|
],
|
|
"assumption": false
|
|
}
|
|
],
|
|
"legend": [],
|
|
"metadata": {
|
|
"rationale": "13개의 동일한 카드 대신 세 영역으로만 묶는다. 정확한 누락 위치와 증상은 본문 표가 유지한다."
|
|
}
|
|
}
|