feat: 가상화 문서들 추가

This commit is contained in:
DongHyeonka
2026-09-10 08:54:05 +09:00
parent e9f6a93327
commit 43e1aadef0
695 changed files with 153404 additions and 12754 deletions
File diff suppressed because one or more lines are too long
@@ -11,14 +11,14 @@
],
"summary": "Hibernate는 feed_items를 먼저 조회하고 EAGER user·page를 2차 SELECT로 채운 뒤 반환하며, 매핑 중 getHighlights() 접근이 생긴 다음 LAZY highlights SELECT를 실행한다.",
"alt": "loadFeed 매핑, Hibernate, PostgreSQL 사이에서 루트 SELECT, EAGER user·page 2차 SELECT, getHighlights 접근, LAZY highlights SELECT가 차례로 일어나는 시퀀스.",
"long_description": "세 참가자를 왼쪽부터 loadFeed DTO 매핑, Hibernate, PostgreSQL 순으로 읽는다. loadFeed가 findAllBy 파생 쿼리를 호출하면 Hibernate가 PostgreSQL에서 feed_items를 먼저 조회한다. 이어 fetch join되지 않은 EAGER user와 page를 별도의 2차 SELECT로 채우고, 반환 시점까지 로딩된 FeedItem을 loadFeed에 돌려준다. 이후 DTO 매핑이 getHighlights()에 접근하면 Hibernate가 해당 아이템의 highlights 컬렉션 SELECT를 실행한다.",
"long_description": "세 참가자를 왼쪽부터 loadFeed DTO 매핑, Hibernate, PostgreSQL 순으로 읽는다. loadFeed가 findAllBy 파생 쿼리를 호출하면 Hibernate가 PostgreSQL에서 feed_items를 먼저 조회한다. 이어 fetch join되지 않은 EAGER user와 page를 별도의 2차 SELECT로 채우고, 반환 시점까지 로딩된 FeedItem을 loadFeed에 돌려준다. 이후 DTO 매핑이 getHighlights()에 접근하면 Hibernate가 해당 아이템의 highlights 컬렉션 SELECT를 실행한다. 이때 나가는 SQL 원문은 SELECT * FROM highlights WHERE feed_item_id = ? 이다.",
"source_context": {
"document": "/home/donghyeon/workspace/ai-tool/topic-arrange/n+1liner/n+1liner.md",
"document_sha256": "1bb38964ca2a849690f5355646c1aa988111b4cd4e1055c6cb05cf7e5fc35cde",
"document": "docs/n+1liner/final/document.md",
"document_sha256": "f9e048a68db0ab82078955bf611b06a71a0033539e0c87ff0aa0d620a3126e36",
"anchor": {
"kind": "marker",
"value": "eager-lazy-query-sequence",
"line": 324
"kind": "heading",
"value": "5.4 왜 추가 쿼리가 나가나 — EAGER는 \"로딩 시점\" 계약이지 JOIN 보장이 아니다",
"line": 347
}
},
"composition": {
@@ -40,12 +40,12 @@
"description": "FeedItem을 순회하며 응답 DTO를 조립하고 highlights 게터에 접근하는 호출자.",
"evidence": [
{
"start_line": 322,
"end_line": 322
"start_line": 356,
"end_line": 356
},
{
"start_line": 449,
"end_line": 451
"start_line": 519,
"end_line": 522
}
],
"assumption": false
@@ -59,8 +59,8 @@
"description": "파생 쿼리의 루트 조회와 EAGER 2차 SELECT, LAZY 컬렉션 초기화를 수행하는 JPA provider.",
"evidence": [
{
"start_line": 320,
"end_line": 322
"start_line": 354,
"end_line": 356
}
],
"assumption": false
@@ -74,12 +74,12 @@
"description": "Hibernate가 루트 및 연관 SELECT를 실행하는 데이터베이스.",
"evidence": [
{
"start_line": 417,
"end_line": 422
"start_line": 480,
"end_line": 487
},
{
"start_line": 447,
"end_line": 447
"start_line": 515,
"end_line": 515
}
],
"assumption": false
@@ -95,8 +95,8 @@
"order": 1,
"evidence": [
{
"start_line": 320,
"end_line": 320
"start_line": 354,
"end_line": 354
}
],
"assumption": false
@@ -111,8 +111,8 @@
"emphasis": "primary",
"evidence": [
{
"start_line": 320,
"end_line": 320
"start_line": 354,
"end_line": 354
}
],
"assumption": false
@@ -126,8 +126,8 @@
"order": 3,
"evidence": [
{
"start_line": 318,
"end_line": 321
"start_line": 352,
"end_line": 355
}
],
"assumption": false
@@ -142,8 +142,8 @@
"order": 4,
"evidence": [
{
"start_line": 318,
"end_line": 320
"start_line": 352,
"end_line": 354
}
],
"assumption": false
@@ -157,12 +157,12 @@
"order": 5,
"evidence": [
{
"start_line": 322,
"end_line": 322
"start_line": 356,
"end_line": 356
},
{
"start_line": 449,
"end_line": 451
"start_line": 519,
"end_line": 522
}
],
"assumption": false
@@ -171,18 +171,18 @@
"id": "m6-lazy-highlights-select",
"from": "hibernate",
"to": "postgresql",
"label": "SELECT highlights WHERE feed_item_id = ?",
"label": "SELECT highlights · LAZY 초기화",
"kind": "data",
"order": 6,
"emphasis": "primary",
"evidence": [
{
"start_line": 322,
"end_line": 322
"start_line": 356,
"end_line": 356
},
{
"start_line": 429,
"end_line": 430
"start_line": 493,
"end_line": 495
}
],
"assumption": false