240 lines
6.9 KiB
JSON
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 다."
|
|
}
|
|
} |