실행 컨텍스트

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2026.01.18
조회수
63
버전
v2

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.

실행 컨텍스트

개요

실행 컨텍스트(Execution Context)는 프로그래밍 언어, 특히 자바스크립트와 같은 동적 언어에서 코드가 평가되고 실행되는 환경을 의미합니다. 이는 코드가 어떻게 해석되고, 변수와 함수가 어떻게 스코프를 가지며, 호출 스택에서 어떻게 관리되는지를 이해하는 데 핵심적인 개념입니다. 실행 컨텍스트는 단순히 함수가 호출될 때 생성되는 것이 아니라, 전체 프로그램의 실행 흐름을 추적하고 관리하는 데 필수적인 추상화 단위입니다.

이 문서에서는 실행 컨텍스트의 개념, 종류, 생성 과정, 내부 구조, 그리고 실제 프로그래밍에서의 활용 사례를 중심으로 설명합니다. 특히 자바스크립트를 기준으로 설명하되, 다른 언어와의 비교를 통해 보다 포괄적인 이해를 돕습니다.


실행 컨텍스트의 종류

실행 컨텍스트는 일반적으로 다음 세 가지로 분류됩니다:

1. 전역 실행 컨텍스트 (Global Execution Context)

  • 프로그램이 시작될 때 자동으로 생성되는 컨텍스트입니다.
  • 전역 객체(window in browsers, global in Node.js)를 생성하고, this가 전역 객체를 가리킵니다.
  • 모든 코드가 최소 하나의 전역 컨텍스트를 가집니다.

2. 함수 실행 컨텍스트 (Function Execution Context)

  • 함수가 호출될 때마다 새로운 컨텍스트가 생성됩니다.
  • 각 함수는 독립적인 스코프를 가지며, 지역 변수와 매개변수를 포함합니다.
  • 중첩된 함수 호출 시, 여러 개의 함수 컨텍스트가 호출 스택에 쌓입니다.

3. Eval 실행 컨텍스트 (Eval Execution Context)

  • eval() 함수 내에서 코드가 실행될 때 생성됩니다.
  • 보안상의 이유로 권장되지 않으며, 실무에서 거의 사용되지 않습니다.

실행 컨텍스트의 생성 과정

실행 컨텍스트는 두 단계로 생성됩니다: 생성 단계(Creation Phase)와 실행 단계(Execution Phase).

1. 생성 단계 (Creation Phase)

이 단계에서는 다음 작업이 수행됩니다:

  • 렉시컬 환경(Lexical Environment) 생성:
  • 변수, 함수 선언, 매개변수 등을 저장하는 환경입니다.
  • 블록 스코프(let, const)를 지원합니다.

  • 변수 환경(Variable Environment):

  • var 선언된 변수와 함수 선언문(function declaration)을 저장합니다.
  • ES6 이전에는 렉시컬 환경과 동일했지만, 이후로는 분리되었습니다.

  • this 바인딩 설정:

  • 전역 컨텍스트에서는 this가 전역 객체를 가리킵니다.
  • 함수 컨텍스트에서는 호출 방식에 따라 this가 결정됩니다 (예: 일반 호출, 메서드 호출, new, call/apply/bind).

이 과정에서 호이스팅(Hoisting)이 발생합니다. 변수는 undefined로, 함수는 전체 정의로 미리 할당됩니다.

2. 실행 단계 (Execution Phase)

코드가 한 줄씩 실행되며, 변수에 값이 할당되고 함수가 호출됩니다. 이 단계에서 let, const는 TDZ(Temporal Dead Zone)를 경험할 수 있으며, 선언 전에 접근 시 오류가 발생합니다.


호출 스택과 실행 컨텍스트

실행 컨텍스트는 호출 스택(Call Stack)이라는 LIFO(Last In, First Out) 구조를 통해 관리됩니다.

function first() {
  second();
  console.log("첫 번째");
}
function second() {
  third();
  console.log("두 번째");
}
function third() {
  console.log("세 번째");
}
first();

위 코드의 실행 흐름: 1. 전역 컨텍스트 생성 → 스택에 푸시 2. first() 호출 → 함수 컨텍스트 생성 후 푸시 3. second() 호출 → 푸시 4. third() 호출 → 푸시 5. third() 종료 → 팝 6. second() 종료 → 팝 7. first() 종료 → 팝 8. 전역 컨텍스트 유지

이러한 스택 구조는 디버깅과 오류 추적에 매우 유용합니다.


다른 언어에서의 실행 컨텍스트

  • 파이썬: 스택 프레임(Stack Frame)이라는 유사한 개념을 사용하며, 함수 호출 시 로컬 스코프가 생성됩니다.
  • 자바: 메서드 호출 시 스택 프레임이 생성되며, JVM의 스택 메모리에서 관리됩니다.
  • C/C++: 함수 호출 시 스택에 프레임이 할당되며, 지역 변수와 반환 주소를 저장합니다.

자바스크립트는 동적 바인딩과 클로저 등의 특성으로 인해 실행 컨텍스트의 관리가 더욱 복잡합니다.


관련 개념

클로저 (Closure)

  • 내부 함수가 외부 함수의 변수에 접근할 수 있는 현상.
  • 외부 함수의 실행 컨텍스트가 종료된 후에도 변수가 유지됩니다.

스코프 체인 (Scope Chain)

  • 변수를 찾을 때 현재 컨텍스트부터 외부 컨텍스트로 이동하는 경로.
  • 각 컨텍스트는 자신의 외부 렉시컬 환경을 참조합니다.

참고 자료


이 문서는 프로그래밍 언어의 실행 모델을 깊이 이해하는 데 필요한 핵심 개념인 실행 컨텍스트를 체계적으로 설명합니다. 이를 통해 코드의 동작 원리를 보다 정확히 파악하고, 버그를 예방하며, 효율적인 프로그래밍을 실현할 수 있습니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?