V8 Engine 이 Machine Code 대신 Byte Code 를 사용한 이유
이식성 (Portability)
- 바이트 코드는 머신 코드보다 이식성이 뛰어남
- 머신 코드는 프로세스 아키텍처에 따라 다르므로 CPU 마다 다를 수 있음
- 바이트 코드는 호환되는 모든 머신이 있는 모든 머신에서 실행 가능
- JS 를 다양한 기기와 운영체제에서 실행할 수 있게 해줌
보안
- 머신 코드보다 바이트 코드로 먼저 컴파일하면 추상화 계층이 늘어나 보안이 강화될 수 있음
- 머신별 취약점을 악용하기 어려워짐
최적화 기회 (Optimization Opportunities)
- 바이트 코드로 컴파일한 다음 실행하며 핫 경로(자주 실행되는 코드)를 최적화하여 머신 코드로 컴파일하는 JIT 이라는 기술을 사용함
- JIT 을 통해 V8 은 정적으로 예측하기 어려운 런타임 동작을 기반으로 코드를 최적화 할 수 있음
리소스 효율성 (Resource Efficiency)
- 머신 코드로 직접 컴파일하는 것은 CPU 와 메모리 집약적임
- 바이트 코드를 사용하면 초기 오버헤드를 줄이며 JS 를 빠르게 컴파일하고 실행할 수 있어 모바일 기기와 같이 리소스가 제한된 환경에서 성능이 향상됨
반복적 개발 (Iterative Development)
- JS 가 사용되는 웹 환경에선 코드가 자주 수정되고 자주 다시 실행되는 특성이 있음
- 바이트 코드는 컴파일 속도가 머신 코드보다 빨라 이점이 있음
자바스크립트의 동적 특성 (Dynamic Nature of Javascript)
- JS 는 런타임에 변경될 수 있는 평가, 동적 타이핑, 객체 형태 같은 기능을 갖춘 매우 동적인 언어임
- 동적인 언어를 효율적인 머신 코드로 직접 컴파일하긴 쉽지 않음
- 바이트 코드가 이러한 동적 측면을 유리하게 처리 가능
디버깅 및 툴링 (Debugging and Tooling)
- 바이트 코드는 디버깅 및 툴링과 관련해 작업하기가 더 쉬움
- 바이트코드는 일반적으로 머신 코드보다 가독성과 이해도가 더 높기 때문에 개발자가 디버깅할 때 필수적
정리
- 이식성, 보안, 최적화 기회, 리소스 효율성, 반복적 개발, JS 의 동적 특성, 디버깅 및 툴링의 이유가 있음
반응형
'자바스크립트 > 개념' 카테고리의 다른 글
이벤트 루프는 어떻게 non-blocking 연산을 막힘없이 처리하는가? (0) | 2024.01.04 |
---|---|
자바스크립트의 싱글 스레드 모델과 이벤트 루프 (0) | 2024.01.04 |
innerHTML vs innerAdajcentHTML() 비교 (0) | 2023.07.15 |
자바스크립트 이벤트(Event) 객체와 커스텀 이벤트 (Custom Event) 란? (0) | 2023.07.07 |
자바스크립트가 문자열을 표현하는 방식 (feat.UTF-16) (0) | 2023.03.06 |