반응형
Jake Seo
제이크서 위키 블로그
Jake Seo
전체 방문자
오늘
어제
  • 분류 전체보기 (715)
    • 일상, 일기 (0)
    • 백준 문제풀이 (1)
    • 릿코드 문제풀이 (2)
    • 알고리즘 이론 (10)
      • 기본 이론 (2)
      • 배열과 문자열 (8)
    • 데이터베이스 (15)
      • Planet Scale (1)
      • MSSQL (9)
      • 디비 기본 개념 (1)
      • SQLite 직접 만들어보기 (4)
    • 보안 (7)
    • 설계 (1)
    • 네트워크 (17)
      • HTTP (9)
      • OSI Layers (5)
    • 회고 (31)
      • 연간 회고 (2)
      • 주간 회고 (29)
    • 인프라 (52)
      • 도커 (12)
      • AWS (9)
      • 용어 (21)
      • 웹 성능 (1)
      • 대규모 서비스를 지탱하는 기술 (9)
    • 깃 (7)
    • 빌드 도구 (7)
      • 메이븐 (6)
      • 그레이들 (0)
    • Java (135)
      • 이펙티브 자바 (73)
      • 자바 API (4)
      • 자바 잡지식 (30)
      • 자바 디자인 패턴 (21)
      • 톰캣 (Tomcat) (7)
    • 프레임워크 (64)
      • next.js (14)
      • 스프링 프레임워크 (28)
      • 토비의 스프링 (6)
      • 스프링 부트 (3)
      • JPA (Java Persistence API) (5)
      • Nest.js (8)
    • 프론트엔드 (48)
      • 다크모드 (1)
      • 노드 패키지 관리 매니저 (3)
      • CSS (19)
      • Web API (11)
      • tailwind-css (1)
      • React (5)
      • React 새 공식문서 요약 (1)
      • HTML (Markup Language) (5)
    • 자바스크립트 (108)
      • 모던 자바스크립트 (31)
      • 개념 (31)
      • 정규표현식 (5)
      • 코드 스니펫 (1)
      • 라이브러리 (6)
      • 인터뷰 (24)
      • 웹개발자를 위한 자바스크립트의 모든 것 (6)
      • 팁 (2)
    • Typescript (49)
    • 리눅스와 유닉스 (10)
    • Computer Science (1)
      • Compiler (1)
    • IDE (3)
      • VSCODE (1)
      • IntelliJ (2)
    • 세미나 & 컨퍼런스 (1)
    • 용어 (개발용어) (16)
      • 함수형 프로그래밍 용어들 (1)
    • ORM (2)
      • Prisma (2)
    • NODEJS (2)
    • cypress (1)
    • 리액트 네이티브 (React Native) (31)
    • 러스트 (Rust) (15)
    • 코틀린 (Kotlin) (4)
      • 자바에서 코틀린으로 (4)
    • 정규표현식 (3)
    • 구글 애널리틱스 (GA) (1)
    • SEO (2)
    • UML (2)
    • 맛탐험 (2)
    • 리팩토링 (1)
    • 서평 (2)
    • 소프트웨어 공학 (18)
      • 테스팅 (16)
      • 개발 프로세스 (1)
    • 교육학 (1)
    • 삶의 지혜, 통찰 (1)
    • Chat GPT (2)
    • 쉘스크립트 (1)
    • 컴파일 (2)
    • Dart (12)
    • 코드팩토리의 플러터 프로그래밍 (4)
    • 플러터 (17)
    • 안드로이드 스튜디오 (1)
    • 윈도우즈 (1)
    • 잡다한 백엔드 지식 (1)
    • 디자인 패턴 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • prerendering
  • 이펙티브 자바
  • Pre-rendering
  • 메이븐 골
  • 느린 쿼리
  • serverless computing
  • 메이븐 페이즈
  • item9
  • 토비의 스프링
  • next js app
  • 싱글턴
  • rust
  • 서버리스 컴퓨팅
  • 자바 디자인패턴
  • 자바스크립트 인터뷰
  • 외래키 제약조건
  • 자바 검증
  • pnpm
  • Java
  • 싱글톤
  • Javadoc 자바독 자바주석 주석 Comment
  • 도커공식문서
  • 자바
  • 디자인패턴
  • 객체복사
  • 이펙티브자바
  • 참조 해제
  • 작업기억공간
  • 알고리즘
  • item7
  • 싱글톤 패턴
  • 메이븐 라이프사이클
  • MSSQL
  • 이펙티브 자바 item9
  • 팩터리 메서드 패턴
  • 플라이웨이트패턴
  • 러스트
  • 자료구조
  • try-with-resources
  • 추상 팩터리 패턴
  • 스프링 검증
  • bean Validation
  • NEXT JS
  • 자바스크립트
  • 프로그래머의 뇌
  • 빈 검증
  • Next.js
  • 슬로우 쿼리
  • item8
  • 자바스크립트 면접

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
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 의 동적 특성, 디버깅 및 툴링의 이유가 있음
반응형
저작자표시 비영리

'자바스크립트 > 개념' 카테고리의 다른 글

이벤트 루프는 어떻게 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
    '자바스크립트/개념' 카테고리의 다른 글
    • 이벤트 루프는 어떻게 non-blocking 연산을 막힘없이 처리하는가?
    • 자바스크립트의 싱글 스레드 모델과 이벤트 루프
    • innerHTML vs innerAdajcentHTML() 비교
    • 자바스크립트 이벤트(Event) 객체와 커스텀 이벤트 (Custom Event) 란?
    Jake Seo
    Jake Seo
    ✔ 잘 보셨다면 광고 한번 클릭해주시면 큰 힘이 됩니다. ✔ 댓글로 틀린 부분을 지적해주시면 기분 나빠하지 않고 수정합니다. ✔ 많은 퇴고를 거친 글이 좋은 글이 된다고 생각합니다. ✔ 간결하고 명료하게 사람들을 이해 시키는 것을 목표로 합니다.

    티스토리툴바