자바스크립트(JS)는 원래 가벼운 작업을 위해 만들어진 언어로, 인터프리터 방식을 사용해 코드를 실행했습니다. 인터프리터는 코드를 한 줄씩 읽고 바로 실행하는 방식이라 시작은 빠르지만, 반복 작업에선 속도가 느립니다.
하지만 웹이 발전하며 복잡한 작업(게임, SPA 등)이 늘자, 인터프리터만으론 성능이 부족해졌습니다. 그래서 컴파일 방식의 빠른 실행 속도가 필요해졌고, 이를 인터프리터와 결합한 JIT(Just-In-Time) 컴파일이 등장했습니다. (예: Chrome의 V8 엔진)
인터프리터: 코드를 한 줄씩 실행. 시작은 빠르지만 반복 속도가 느림.
컴파일러: 코드를 기계어로 미리 변환. 시작은 느리지만 실행이 빠름.
JIT는 인터프리터와 컴파일러의 장점을 합친 방식입니다:
즉, 기본은 인터프리터지만, 반복 작업에선 컴파일러를 활용합니다.
function add(a, b) { return a + b; }
for (let i = 0; i < 1000; i++) { add(i, i); }
// 처음 몇 번은 느리게(인터프리터), 반복되면 기계어로 변환
장점
성능 향상: 반복 실행되는 코드는 기계어로 변환되어 네이티브 속도로 실행됩니다.
적응성: 실행 중에 동적으로 최적화하므로, 코드의 실제 사용 패턴에 맞춰 효율적으로 동작합니다.
단점
메모리 사용량 증가: 컴파일된 코드와 인터프리터 상태를 유지해야 하므로 메모리가 더 필요합니다.
초기 지연: 최적화 전 인터프리터 단계가 느릴 수 있습니다.
복잡성: 디옵티마이제이션 등으로 엔진 설계가 복잡해집니다
JS는 간단하 동작을 위해 인터프리터 방식으로 코드를 읽었지만, 복잡한 기능들을 처리하기위해 인터프리터 + 컴파일 인 JIT 컴파일 방식을 사용합니다.