자바스크립트/개념

자바스크립트에서 머신 코드 대신 바이트 코드를 사용하는 이유

Jake Seo 2024. 1. 4. 21:48

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 의 동적 특성, 디버깅 및 툴링의 이유가 있음
반응형