Files
document-haness/docs/TechLog/final/.techviz/value-boundaries/spec.json
T

240 lines
6.9 KiB
JSON

{
"version": "1.1",
"id": "value-boundaries",
"title": "공개 화면 한 줄까지 값이 지나는 열한 개의 경계 — 다섯 묶음",
"question": "공개 화면 한 줄의 값은 어느 경계를 순서대로 지나며, 그중 어디까지가 백엔드이고 어디부터가 프론트엔드인가?",
"type": "data-flow",
"direction": "LR",
"audience": [
"백엔드 개발자",
"프론트엔드 개발자",
"아키텍처 검토자"
],
"summary": "열한 개의 경계를 지나는 자리별로 묶으면 저장 둘, 백엔드 조립 넷, 전선 하나, 프론트엔드 조립 셋, 화면 하나다.",
"alt": "저장·백엔드 조립·HTTP envelope·프론트엔드 조립·화면 다섯 묶음을 tech-log-backend·전선·tech-log-frontend 세 구역으로 나눠 이은 흐름도. 묶음마다 그 안에 든 경계 수가 2·4·1·3·1 로 적혀 있다.",
"long_description": "왼쪽에서 오른쪽으로 읽는다. tech-log-backend 구역에 저장 묶음과 백엔드 조립 묶음이 있고 각각 경계 둘과 넷을 담는다. 전선 구역에는 HTTP envelope 하나가 있다. tech-log-frontend 구역에는 프론트엔드 조립 묶음과 화면 컴포넌트가 있고 각각 경계 셋과 하나다. 다 더하면 열한 개이고, 각 경계의 이름은 그림 위 목록에 있다.",
"source_context": {
"document": "document.md",
"document_sha256": "93b9fec4884efa0e6231de07dc27e2b0ac36c9052d3720e28d102d9747ac4f8f",
"anchor": {
"kind": "marker",
"value": "value-boundaries",
"line": 82
}
},
"composition": {
"profile": "component-flow",
"diagram_only": true,
"reference_ids": [
"payment-event-flow"
],
"rationale": "본문 1.2 절은 값이 PostgreSQL 테이블에서 화면 컴포넌트까지 한 방향으로 지나는 사슬을 나열한다. directed data path 이므로 component-flow 다. 자동 선택이 고른 세 후보(ports-adapters, comparison, two-zone-pipeline)는 사슬 안에 있는 어댑터·포트·계약이라는 낱말에 반응한 것이고, 본문이 묻는 것은 코어를 둘러싼 의존 방향도 선택지 비교도 아니다. two-zone-pipeline 은 구역마다 2열 격자로 놓아 열한 단계 사슬이 되돌아 꺾이고 lint 가 edge-through-node 로 막았다. 소유 경계는 group 으로 남긴다."
},
"groups": [
{
"id": "backend",
"label": "tech-log-backend",
"kind": "system",
"role": "zone",
"evidence": [
{
"start_line": 50,
"end_line": 52
}
],
"assumption": false
},
{
"id": "wire",
"label": "전선 (HTTP)",
"kind": "network",
"role": "zone",
"evidence": [
{
"start_line": 75,
"end_line": 75
}
],
"assumption": false
},
{
"id": "frontend",
"label": "tech-log-frontend",
"kind": "system",
"role": "zone",
"evidence": [
{
"start_line": 54,
"end_line": 56
}
],
"assumption": false
}
],
"nodes": [
{
"id": "store",
"label": "저장",
"kind": "database",
"shape": "box",
"role": "store",
"group": "backend",
"details": [
"경계 2"
],
"description": "값이 출발하는 두 자리.",
"evidence": [
{
"start_line": 69,
"end_line": 70
}
],
"assumption": false
},
{
"id": "backend-assembly",
"label": "백엔드 조립",
"kind": "service",
"role": "service",
"group": "backend",
"details": [
"경계 4"
],
"emphasis": "warning",
"description": "조회 결과가 응답 모양이 되기까지의 네 자리.",
"evidence": [
{
"start_line": 71,
"end_line": 74
}
],
"assumption": false
},
{
"id": "http-envelope",
"label": "HTTP envelope",
"kind": "message",
"role": "transfer",
"group": "wire",
"description": "두 저장소를 잇는 전선.",
"evidence": [
{
"start_line": 75,
"end_line": 75
}
],
"assumption": false,
"details": [
"경계 1"
]
},
{
"id": "frontend-assembly",
"label": "프론트엔드 조립",
"kind": "service",
"role": "service",
"group": "frontend",
"details": [
"경계 3"
],
"description": "응답이 화면이 쓰는 모양이 되기까지의 세 자리.",
"evidence": [
{
"start_line": 76,
"end_line": 78
}
],
"assumption": false
},
{
"id": "screen",
"label": "화면 컴포넌트",
"kind": "component",
"role": "sink",
"group": "frontend",
"description": "값이 도착해 한 줄로 그려지는 자리.",
"evidence": [
{
"start_line": 79,
"end_line": 79
},
{
"start_line": 66,
"end_line": 66
}
],
"assumption": false,
"details": [
"경계 1"
]
}
],
"edges": [
{
"id": "g1",
"from": "store",
"to": "backend-assembly",
"label": "SQL 조회",
"kind": "data",
"style": "solid",
"evidence": [
{
"start_line": 70,
"end_line": 71
}
],
"assumption": false
},
{
"id": "g2",
"from": "backend-assembly",
"to": "http-envelope",
"label": "HTTP 응답",
"kind": "data",
"style": "solid",
"evidence": [
{
"start_line": 74,
"end_line": 75
}
],
"assumption": false
},
{
"id": "g3",
"from": "http-envelope",
"to": "frontend-assembly",
"label": "HTTP 수신",
"kind": "data",
"style": "solid",
"evidence": [
{
"start_line": 75,
"end_line": 76
}
],
"assumption": false
},
{
"id": "g4",
"from": "frontend-assembly",
"to": "screen",
"label": "화면 한 줄",
"kind": "data",
"style": "solid",
"evidence": [
{
"start_line": 78,
"end_line": 79
}
],
"assumption": false
}
],
"legend": [],
"metadata": {
"rationale": "각 경계의 이름은 바로 위 목록이 이미 순서대로 적는다. 그림은 그 열한 개가 어느 소유 구역에 몇 개씩 놓이는지만 담는다.",
"profile_deviation": "techviz references 가 고른 후보 밖의 프로필이다. 후보 셋으로는 사슬을 그릴 수 없어 component-flow 로 갔고 lint 는 0 error 로 통과했다.",
"layout_note": "LR 로 둔다. TB 는 aspect-ratio 경고를 없애지만 그룹 이름이 잘리고(tech-log-fro) 오른쪽이 비어, 읽기에는 LR 이 낫다. 남는 경고는 advisory 다."
}
}