--- id: wiki-2026-0508-old-space-구-세대-공간 title: Old Space (구 세대 공간) category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [P-Reinforce-AUTO-9214B8] duplicate_of: none source_trust_level: A confidence_score: 0.9 tags: [auto-reinforced] raw_sources: [] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - [[Old Space]] (구 세대 공간)" inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[Old Space (구 세대 공간)]] ## 📌 한 줄 통찰 (The Karpathy Summary) > Old Space(구 세대 공간)는 V8 자바스크립트 엔진의 힙(Heap) 메모리 영역 중, New Space(신규 공간)에서 발생하는 가비지 컬렉션(GC)을 두 번 이상 생존한 객체들이 승격(Promotion)되어 이동하는 공간입니다 [1-3]. 주로 사용자 세션이나 캐시 데이터 등 수명이 길고 지속적인 상태를 유지하는 객체들을 장기간 저장하는 데 사용됩니다 [4, 5]. 이 공간의 메모리 회수는 빈도가 낮지만 리소스 소모가 큰 [[Major GC]]([[Mark-Sweep]] 및 Mark-Compact 알고리즘)에 의해 관리됩니다 [1, 3, 5]. ## 📖 구조화된 지식 (Synthesized Content) - **공간의 세분화 및 역할:** Old Space는 효율적인 가비지 컬렉션을 위해 두 개의 하위 영역으로 나뉩니다. 첫째는 다른 객체를 가리키는 포인터를 포함하는 객체들이 저장되는 **Old-pointer-space**입니다 [3, 6, 7]. 둘째는 문자열, 박싱된 숫자 등 포인터가 없는 원시 데이터만 포함하는 객체들이 저장되는 **Old-data-space**입니다 [3, 6, 7]. GC가 Old-data-space를 처리할 때는 내부 포인터 추적 단계를 건너뛸 수 있어 마킹(Marking) 단계에 소요되는 시간을 단축할 수 있습니다 [4]. - **가비지 컬렉션 (Major GC):** 크기가 작고 수집이 빠른 New Space(Minor GC)와 달리, Old Space는 수백 메가바이트의 데이터를 포함할 수 있으므로 **마크-스윕(Mark-Sweep)** 및 **마크-컴팩트(Mark-Compact)** 알고리즘을 통해 관리됩니다 [8]. Major GC는 객체의 참조를 따라가며 살아있는 객체(Black)와 죽은 객체(White)를 식별(Mark)하고, 죽은 객체가 차지한 메모리를 회수(Sweep)합니다 [9, 10]. - **메모리 단편화 및 압축(Compaction):** Old Space에서는 죽은 메모리가 페이지에 남기는 "구멍(holes)"으로 인해 메모리 단편화(Fragmentation) 문제가 크게 발생합니다 [11]. 큰 공간에서 객체를 이동시키는 것은 계산 비용이 매우 높고 모든 참조 포인터를 업데이트해야 하므로, V8은 매 주기마다 객체를 압축하지 않고 필요할 때만 단편화된 페이지에서 라이브 객체를 다른 페이지의 빈 공간으로 마이그레이션(Compaction)하는 방식을 사용합니다 [12, 13]. - **메모리 튜닝 및 누수 탐지:** Node.js 애플리케이션에서 대규모 데이터를 처리할 때 `--max-old-space-size` 커맨드라인 플래그를 사용하면 Old Space의 최대 크기(예: 4096MB)를 명시적으로 늘릴 수 있어 잦은 가비지 컬렉션으로 인한 성능 저하를 방지할 수 있습니다 [14, 15]. 또한 `--trace-gc-verbose` 로깅 분석 시, Major GC가 발생한 이후에도 "Old space, used" 크기가 지속적으로 증가한다면 강력한 메모리 누수([[memory]] Leak)의 징후로 판단할 수 있습니다 [16]. ## ⚠️ 모순 및 업데이트 (Contradictions & Updates) - **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요. - **정책 변화:** Programming & Language 분야의 자동 자산화 수행. ## 🔗 지식 연결 (Graph) - **Related Topics:** New Space (신규 공간), Major GC (주요 가비지 컬렉션), Mark-Sweep-Compact, Memory Leak (메모리 누수) - **Projects/Contexts:** [[V8 [[JavaScript]] Engine]], Node.js Memory [[Management]] - **Contradictions/Notes:** 소스에 따르면 Old Space 내의 객체를 옮기는 압축(Compaction) 작업은 비용이 매우 많이 들기 때문에, Minor GC처럼 모든 라이브 객체를 복사하는 방식([[Scavenge]]r)을 쓰지 않고 단편화가 심한 특정 페이지에 대해서만 제한적으로 압축을 수행합니다 [12, 13]. --- *Last updated: 2026-04-19* --- ## 🤖 LLM 활용 힌트 (How to Use This Knowledge) **언제 이 지식을 쓰는가:** - *(TODO)* **언제 쓰면 안 되는가:** - *(TODO)* ## 🧪 검증 상태 (Validation) - **정보 상태:** needs_review - **출처 신뢰도:** A - **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)* ## 🧬 중복 검사 (Duplicate Check) - **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)* - **처리 방식:** UPDATE (자동 정규화) - **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강. ## 🕓 변경 이력 (Changelog) | 날짜 | 변경 내용 | 처리 방식 | 신뢰도 | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A | ## 💻 코드 패턴 (Code Patterns) **패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)* ```text # TODO ``` ## 🤔 의사결정 기준 (Decision Criteria) **선택 A를 써야 할 때:** - *(TODO)* **선택 B를 써야 할 때:** - *(TODO)* **기본값:** > *(TODO)* ## ❌ 안티패턴 (Anti-Patterns) - **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*