Organizer 정리 산출물(From_RawData) + 이사 체크리스트 + 인덱스 갱신
- Raw_Data 자동 정리 산출물이 각 도메인 From_RawData/ 로 편입, 00_INDEX 연결 갱신 - 컴퓨터_이사_체크리스트.md 추가 (두뇌-상대 경로 규약 v2.2.304 — 새 컴퓨터에서 바꿀 절대 경로는 localBrainPath 1개) - Astra 세션 산출물(에피소드 기억·기능 인벤토리) 갱신 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
---
|
||||
id: javascript-engine
|
||||
title: "JavaScript Engine"
|
||||
category: "Architecture"
|
||||
status: "draft"
|
||||
verification_status: "conceptual"
|
||||
canonical_id: ""
|
||||
aliases: ["자바스크립트 엔진", "JS Engine", "V8", "SpiderMonkey", "JS 엔진"]
|
||||
duplicate_of: ""
|
||||
source_trust_level: "A"
|
||||
confidence_score: 0.95
|
||||
created_at: 2026-07-11
|
||||
updated_at: 2026-07-11
|
||||
review_reason: ""
|
||||
merge_history: []
|
||||
tags: ["research", "context 이해 규칙"]
|
||||
raw_sources: ["Execution Context 실행 컨텍스트를 알아야하는 이유? - 넥스트리", "JavaScript Execution Context – How JS Works Behind the Scenes - freeCodeCamp"]
|
||||
applied_in: []
|
||||
github_commit: ""
|
||||
---
|
||||
|
||||
# [[JavaScript Engine]]
|
||||
|
||||
## 🎯 한 줄 통찰 (One-line insight)
|
||||
자바스크립트 엔진은 소스 코드를 스캔 및 해석하여 실행 컨텍스트(Execution Context)를 생성하고, 싱글 스레드 기반의 콜 스택을 통해 메모리 할당과 코드 실행을 관장하는 핵심 시스템이다.
|
||||
|
||||
## 🧠 핵심 개념 (Core concepts)
|
||||
- **실행 컨텍스트 (Execution Context):** 코드의 변환과 실행을 관장하는 환경으로, 실행할 코드에 필요한 모든 정보를 담고 있는 객체.
|
||||
- **콜 스택 (Call Stack):** 글로벌 및 함수 실행 컨텍스트를 추적하고 실행 순서를 보장하기 위해 사용하는 LIFO(후입선출) 구조의 스택.
|
||||
- **생성 및 실행 단계 (Creation & Execution Phase):** 메모리를 할당하여 환경을 설정하는 단계와 코드를 순차적으로 실행하며 값을 연산하는 2단계 프로세스.
|
||||
- **변수 및 렉시컬 환경 (Variable & Lexical Environment):** 식별자 정보(호이스팅)를 저장하는 `environmentRecord`와 상위 스코프를 참조하는 `outerEnvironmentReference`의 구성체.
|
||||
|
||||
## 🧩 추출된 패턴 (Extracted patterns)
|
||||
- **LIFO (Last-In-First-Out) 스택 패턴:** 스크립트 실행 시 전역 컨텍스트가 가장 먼저 푸시되고, 함수가 호출될 때마다 새로운 함수 컨텍스트가 최상단에 쌓이며, 실행 완료 후 팝(Pop)되어 제거되는 구조.
|
||||
- **2-Phase 실행 패턴:** 코드 실행 전에 변수와 함수 선언의 메모리를 먼저 할당(초기값 `undefined` 등)하는 생성 단계를 거친 뒤, 실제 소스코드를 위에서 아래로 순차 실행하는 분리된 단계 접근법.
|
||||
- **스코프 연쇄 탐색(Scope Chaining) 패턴:** 현재 컨텍스트의 `LexicalEnvironment`에서 식별자를 찾지 못하면 `outerEnvironmentReference`를 통해 상위(부모) 스코프로 이동하여 탐색을 지속하는 패턴.
|
||||
|
||||
## 📖 세부 내용 (Details)
|
||||
- 자바스크립트는 싱글 스레드 인터프리터 언어이며, 브라우저가 자바스크립트 코드를 직접 이해할 수 없으므로 각 브라우저는 고유한 자바스크립트 엔진(예: Google Chrome의 V8, Mozilla Firefox의 SpiderMonkey 등)을 사용하여 코드를 스캔하고 해석한다 [S1], [S2].
|
||||
- 자바스크립트 엔진이 스크립트 파일을 스캔하면 가장 먼저 '실행 컨텍스트(Execution Context)'라는 환경을 생성한다. 실행 컨텍스트는 글로벌(Global) 컨텍스트와 함수(Function) 컨텍스트로 나뉜다 [S1], [S2].
|
||||
- 엔진의 동작은 크게 두 가지 단계로 나뉜다 [S2].
|
||||
- **생성 단계(Creation Phase):** 전역 객체(브라우저의 `window`, Node.js의 `global`)를 생성하고 변수와 함수를 저장할 메모리를 할당한다. 이때 변수는 `undefined`로 초기화되고, 함수는 참조 값으로 저장되며, 이러한 사전 식별자 인지 과정이 바로 '호이스팅(Hoisting)'이다 [S1], [S2].
|
||||
- **실행 단계(Execution Phase):** 코드를 위에서 아래로 한 줄씩 실행한다. 변수에 실제 값을 할당하고, 함수 호출부를 만나면 해당 함수를 위한 새로운 실행 컨텍스트를 생성하여 실행을 처리한다 [S2].
|
||||
- 엔진은 컨텍스트의 실행 순서와 상태를 관리하기 위해 **콜 스택(Call Stack)**을 활용한다. 콜 스택은 후입선출(LIFO) 원리를 따르며, 전역 컨텍스트를 시작으로 호출되는 함수 컨텍스트를 스택에 푸시(Push)하고, 처리가 끝난 컨텍스트를 팝(Pop)하여 제거한다. 만약 재귀 함수 등에 기저 조건(base condition)이 없어 스택 크기 한도를 초과하면 스택 오버플로우(Stack overflow) 오류가 발생한다 [S2].
|
||||
- 실행 컨텍스트의 내부 구조는 변수 환경(Variable Environment)과 렉시컬 환경(Lexical Environment)으로 구성된다. 내부의 `environmentRecord`는 동적인 식별자 정보를 관리하고, `outerEnvironmentReference`는 코드가 선언된 위치를 기준으로 상위 스코프에 대한 참조를 제공하여 스코프 체인(Scope Chain) 검색을 가능하게 한다 [S1].
|
||||
|
||||
## ⚖️ 모순 및 업데이트 (Contradictions & updates)
|
||||
소스에서 확인되지 않음.
|
||||
|
||||
## 🛠️ 적용 사례 (Applied in summary)
|
||||
현재 발견된 실제 적용 사례가 없습니다.
|
||||
|
||||
## 💻 코드 패턴 (Code patterns)
|
||||
자바스크립트 엔진이 소스 코드를 읽어 실행 컨텍스트(생성 및 실행 단계)와 콜 스택을 운용하는 논리를 보여주는 기본 코드 구조 [S2].
|
||||
```javascript
|
||||
// 자바스크립트 엔진은 먼저 전역 실행 컨텍스트를 생성(Creation Phase)하여
|
||||
// n, square, square1, square2를 메모리에 할당한다.
|
||||
var n = 5;
|
||||
|
||||
// 메모리에 참조가 할당된 함수 정의
|
||||
function square(num) {
|
||||
var ans = num * num;
|
||||
return ans;
|
||||
}
|
||||
|
||||
// Execution Phase: 위에서부터 값을 할당하며 내려옴 (n = 5)
|
||||
// square(n) 호출 시 새로운 함수 실행 컨텍스트가 콜 스택에 푸시됨
|
||||
var square1 = square(n);
|
||||
|
||||
// square1의 연산 및 반환 후 컨텍스트 팝, 이어 square(8) 함수 컨텍스트 푸시
|
||||
var square2 = square(8);
|
||||
```
|
||||
|
||||
## ✅ 검증 상태 및 신뢰도
|
||||
- **상태:** draft
|
||||
- **검증 단계:** conceptual
|
||||
- **출처 신뢰도:** A
|
||||
- **신뢰 점수:** 0.95
|
||||
- **중복 검사 결과:** 신규 생성 (New discovery)
|
||||
|
||||
## 🔗 관련 문서 링크 (Related document links)
|
||||
|
||||
### 상위/유사 개념
|
||||
- [[실행 컨텍스트]] — 연결 이유: 자바스크립트 엔진이 코드를 해석하고 실행을 관리하는 핵심 런타임 환경
|
||||
- [[콜 스택]] — 연결 이유: 엔진 내부에서 여러 실행 컨텍스트들의 순서와 제어 흐름을 추적하는 자료구조
|
||||
- [[호이스팅]] — 연결 이유: 컨텍스트 생성 단계에서 엔진이 식별자와 메모리를 맵핑하여 끌어올려지는 현상
|
||||
|
||||
### 심층 후속 질문 (Deeper Research Questions)
|
||||
- 자바스크립트 엔진 종류(V8, SpiderMonkey)에 따라 콜 스택의 크기 한도나 최적화 처리 기법에 어떤 차이가 있는가?
|
||||
- 비동기 작업(콜백, 프로미스) 발생 시 자바스크립트 엔진의 콜 스택과 이벤트 루프는 어떻게 상호작용하는가?
|
||||
- 자바스크립트의 'Strict Mode'는 엔진의 생성 및 실행 단계에서 `this` 바인딩을 구체적으로 어떻게 제어하는가?
|
||||
|
||||
### 실무 적용 맥락 (Practical Application Contexts)
|
||||
- **Implementation:** 클로저 및 비동기 처리 코드를 작성할 때 변수의 생명주기와 참조를 파악.
|
||||
- **System Design:** 싱글 스레드 환경의 제약을 피하기 위해 콜 스택이 블로킹되지 않도록 이벤트 기반 비동기 아키텍처 설계.
|
||||
- **Operation / Maintenance:** 콜 스택 오버플로우나 메모리 누수(Memory Leak)를 추적하고 수정.
|
||||
- **Learning Path:** 자바스크립트 코어 동작 원리 학습 -> 스코프와 클로저의 이해 -> 비동기 프로그래밍 및 최적화 마스터.
|
||||
|
||||
### 인접 주변 주제 (Adjacent Topics)
|
||||
- [[이벤트 루프]] — 확장 방향: 싱글 스레드의 한계를 극복하고 비동기 작업을 처리하는 엔진 외곽의 타이밍 메커니즘.
|
||||
- [[클로저(Closure)]] — 확장 방향: 렉시컬 환경과 상위 스코프 참조(`outerEnvironmentReference`)를 통해 생명주기가 끝난 외부 변수에 접근하는 원리.
|
||||
|
||||
## 🔗 지식 그래프 (Knowledge Graph)
|
||||
- **상위/루트:** [[context 이해 규칙]]
|
||||
- **관련 개념:** [[실행 컨텍스트]], [[콜 스택]]
|
||||
- **참조 맥락:** 자바스크립트 환경에서 컴퓨터(엔진)가 코드의 변수, 함수, 그리고 실행 흐름이라는 '맥락(Context)'을 어떻게 이해하고 추적하는지 파악할 때 참조.
|
||||
|
||||
## 📚 출처 (Sources)
|
||||
- [1] Execution Context 실행 컨텍스트를 알아야하는 이유? - 넥스트리
|
||||
- [2] JavaScript Execution Context – How JS Works Behind the Scenes - freeCodeCamp
|
||||
|
||||
## 📝 변경 이력 (Change history)
|
||||
- 2026-07-11: Initial draft generated via Datacollector_MAC P-Reinforce engine.
|
||||
Reference in New Issue
Block a user