๐ŸŒ†
Sunset Archive
GitHubLinkedInBlog
  • litsynp
  • Archives
    • Projects
      • Let's Parking!
      • ๋ง›์ง‘๋ชฌ์Šคํ„ฐ (JMT Monster)
      • spring-x-demo Projects
    • Articles
      • My Thoughts on GitBook
      • Wake-on-LAN & RDP Setup
    • Learning
      • Languages
        • Rust
          • Useful Links
          • Syntax
          • Pointers
          • Dependencies
          • Logging
          • Phantom Types
          • Iterable
            • Optional Skip
        • Go
          • Useful Links
          • Structures
          • Zero Values
          • Error Handling
          • Dependency Injection
          • Project Layout
        • JavaScript/TypeScript
          • Basics
            • Types
              • [JS] Falsy Values
              • [TS] Types - unknown, any, never
            • Rest Parameters (...)
            • Spread Syntax (...)
            • Destructuing Assignment
            • CJS, AMD, UMD, ESM
          • Advanced
            • Conditional Destructuring Assignment
            • Type Guards
          • Miscellaneous
            • Dependency Injection in JS?
            • ESLint, Prettier, TypeScript
          • Node
            • Useful Links
            • General
              • V8 Engine
              • Version Management: NVM
              • Environment Variables
            • Database
              • Knex
        • C
          • Dynamic Multi-dimensional Arrays
        • Spring
          • General
            • @Import v.s. @ContextConfiguration
            • MessageSource
          • Kotlin+Spring
            • Kotlin Annotations (Use-Site Targets)
            • Handling Null in Request DTO
            • Handling Null in URL
          • Reactive Stack
            • Reactive API with Spring WebFlux
          • Spring Security
            • Google OAuth Setup
          • Spring Batch
            • Bulk Insert
        • Kotlin
          • val/var in Constructor
          • Initializer Blocks
          • Inheritance Modifiers (final, open, abstract)
          • Delegate Pattern
        • Java
          • Serialization
          • Random Number Generation
            • (1) Math.random() v.s. Random
            • (2) Random v.s. ThreadLocalRandom
        • Python
          • Version Management
        • Ruby
          • Installation
          • Getters & Setters
        • Elixir
        • Erlang
        • Flutter
        • AWS
          • AWS CLI
        • Terraform
          • Installation
          • Basics
      • Code
        • OOP
          • The 4 Basic Concepts of OOP
          • The SOLID Principles
          • GRASP
          • Spring POJO
          • Others
        • Functional Programming
          • Currying
          • Higher-Order Function
          • Closure
          • Monad
        • ๊ณต๋ณ€์„ฑ, ๋ฐ˜๊ณต๋ณ€์„ฑ, ๋ฌด๊ณต๋ณ€์„ฑ
        • Others
          • UUID
          • GraphQL
          • Multimedia
            • Streaming
          • Geography
            • ์œ„๋„ (Latitude), ๊ฒฝ๋„ (Longitude)
      • Tools
        • Nix
        • Mermaid
          • Flowchart
          • Sequence Diagram
          • Class Diagram
          • Entity Relationship Diagrams
        • VSCode
          • VSCode CLI
          • VSCode Extensions
        • JetBrains
          • IntelliJ - Open Projects in Tabs
          • Delete Leftover IDE Directories
        • vim
          • Commands
      • Books
        • ๋‹ค์žฌ๋‹ค๋Šฅ ์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Programming Kotlin)
          • Pt 01. ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ์Šคํฌ๋ฆฝํŒ… ํ•˜๊ธฐ
            • Ch 01. ์ฝ”ํ‹€๋ฆฐ ์‹œ์ž‘ํ•˜๊ธฐ
            • Ch 02. Java ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ฝ”ํ‹€๋ฆฐ ํ•„์ˆ˜ ์‚ฌํ•ญ
            • Ch 03. ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ž
            • Ch 05. ์ฝœ๋ ‰์…˜ ์‚ฌ์šฉํ•˜๊ธฐ
        • ์˜ค๋ธŒ์ ํŠธ (Object)
          • Ch.0 ๋“ค์–ด๊ฐ€๋ฉฐ - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„
          • Ch.1 ๊ฐ์ฒด, ์„ค๊ณ„
          • Ch.2 ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
          • Ch.3 ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ
          • Ch.4 ์„ค๊ณ„ ํ’ˆ์งˆ๊ณผ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„
          • Ch.5 ์ฑ…์ž„ ํ• ๋‹นํ•˜๊ธฐ
          • Ch.6 ๋ฉ”์‹œ์ง€์™€ ์ธํ„ฐํŽ˜์ด์Šค
          • Ch.7 ์œ ์—ฐํ•œ ์„ค๊ณ„
          • Ch.8 ์˜์กด์„ฑ ๊ด€๋ฆฌํ•˜๊ธฐ
          • Ch.9 ์œ ์—ฐํ•œ ์„ค๊ณ„
          • Ch.10 ์ƒ์†๊ณผ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ
          • Ch.11 ํ•ฉ์„ฑ๊ณผ ์œ ์—ฐํ•œ ์„ค๊ณ„
          • Ch.12 ๋‹คํ˜•์„ฑ
          • Ch.13 ์„œ๋ธŒํด๋ž˜์‹ฑ๊ณผ ์„œ๋ธŒํƒ€์ดํ•‘
          • Ch.14 ์ผ๊ด€์„ฑ ์žˆ๋Š” ํ˜‘๋ ฅ
          • Ch.15 ๋””์ž์ธ ํŒจํ„ด๊ณผ ํ”„๋ ˆ์ž„์›Œํฌ
          • End. ๋งˆ์น˜๋ฉฐ - ๋‚˜์•„๊ฐ€๊ธฐ
          • ํ›„๊ธฐ
        • ํ—ค๋“œ ํผ์ŠคํŠธ ๋””์ž์ธ ํŒจํ„ด (Head First Design Patterns)
          • Ch.1 ๋””์ž์ธ ํŒจํ„ด ์†Œ๊ฐœ์™€ ์ „๋žต ํŒจํ„ด
          • Ch.2 ์˜ต์ €๋ฒ„ ํŒจํ„ด
          • Ch.3 ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด
          • Ch.4 ํŒฉํ† ๋ฆฌ ํŒจํ„ด
          • Ch.5 ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด
          • Ch.6 ์ปค๋งจ๋“œ ํŒจํ„ด
          • Ch.7 ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด๊ณผ ํผ์‚ฌ๋“œ ํŒจํ„ด
          • Ch.8 ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด
          • Ch.9 ๋ฐ˜๋ณต์ž ํŒจํ„ด๊ณผ ์ปดํฌ์ง€ํŠธ ํŒจํ„ด
          • Ch.10 ์ƒํƒœ ํŒจํ„ด
          • Ch.11 ํ”„๋ก์‹œ ํŒจํ„ด
          • Ch.12 ๋ณตํ•ฉ ํŒจํ„ด
        • ์ดํŽ™ํ‹ฐ๋ธŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ (Effective TypeScript)
          • Ch.1 ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์•Œ์•„๋ณด๊ธฐ
            • Item 1 ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ด€๊ณ„ ์ดํ•ดํ•˜๊ธฐ
            • Item 2 ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ์ดํ•ดํ•˜๊ธฐ
            • Item 3 ์ฝ”๋“œ ์ƒ์„ฑ๊ณผ ํƒ€์ž…์ด ๊ด€๊ณ„์—†์Œ์„ ์ดํ•ดํ•˜๊ธฐ
            • Item 4 ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์— ์ต์ˆ™ํ•ด์ง€๊ธฐ
            • Item 5 any ํƒ€์ž… ์ง€์–‘ํ•˜๊ธฐ
          • Ch.2 ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž… ์‹œ์Šคํ…œ
            • Item 6 ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž… ์‹œ์Šคํ…œ ํƒ์ƒ‰ํ•˜๊ธฐ
            • Item 7 ํƒ€์ž…์ด ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ
            • Item 1-7 Study Summary
            • Item 8 ํƒ€์ž… ๊ณต๊ฐ„๊ณผ ๊ฐ’ ๊ณต๊ฐ„์˜ ์‹ฌ๋ฒŒ ๊ตฌ๋ถ„ํ•˜๊ธฐ
            • Item 9 ํƒ€์ž… ๋‹จ์–ธ๋ณด๋‹ค๋Š” ํƒ€์ž… ์„ ์–ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 10 ๊ฐ์ฒด ๋ž˜ํผ ํƒ€์ž… ํ”ผํ•˜๊ธฐ
            • Item 11 ์ž‰์—ฌ ์†์„ฑ ์ฒดํฌ์˜ ํ•œ๊ณ„ ์ธ์ง€ํ•˜๊ธฐ
            • Item 12 ํ•จ์ˆ˜ ํ‘œํ˜„์‹์— ํƒ€์ž… ์ ์šฉํ•˜๊ธฐ
            • Item 13 ํƒ€์ž…๊ณผ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฐจ์ด์  ์•Œ๊ธฐ
            • Item 14 ํƒ€์ž… ์—ฐ์‚ฐ๊ณผ ์ œ๋„ˆ๋ฆญ ์‚ฌ์šฉ์œผ๋กœ ๋ฐ˜๋ณต ์ค„์ด๊ธฐ
            • Item 15 ๋™์  ๋ฐ์ดํ„ฐ์— ์ธ๋ฑ์Šค ์‹œ๊ทธ๋‹ˆ์ฒ˜ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 16 number ์ธ๋ฑ์Šค ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ณด๋‹ค๋Š” Array, ํŠœํ”Œ, ArrayLike๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 17 ๋ณ€๊ฒฝ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด readonly ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 18 ๋งคํ•‘๋œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ๋™๊ธฐํ™”ํ•˜๊ธฐ
          • Ch.3 ํƒ€์ž… ์ถ”๋ก 
            • Item 19 ์ถ”๋ก  ๊ฐ€๋Šฅํ•œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด ์žฅํ™ฉํ•œ ์ฝ”๋“œ ๋ฐฉ์ง€ํ•˜๊ธฐ
            • Item 20 ๋‹ค๋ฅธ ํƒ€์ž…์—๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 21 ํƒ€์ž… ๋„“ํžˆ๊ธฐ
            • Item 22 ํƒ€์ž… ์ขํžˆ๊ธฐ
            • Item 23 ํ•œ๊บผ๋ฒˆ์— ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐ
            • Item 24 ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ณ„์นญ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 25 ๋น„๋™๊ธฐ ์ฝ”๋“œ์—๋Š” ์ฝœ๋ฐฑ ๋Œ€์‹  async ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 26 ํƒ€์ž… ์ถ”๋ก ์— ๋ฌธ๋งฅ์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ
            • Item 27 ํ•จ์ˆ˜ํ˜• ๊ธฐ๋ฒ•๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํƒ€์ž… ํ๋ฆ„ ์œ ์ง€ํ•˜๊ธฐ
          • Ch.4 ํƒ€์ž… ์„ค๊ณ„
            • Item 28 ์œ ํšจํ•œ ์ƒํƒœ๋งŒ ํ‘œํ˜„ํ•˜๋Š” ํƒ€์ž…์„ ์ง€ํ–ฅํ•˜๊ธฐ
            • Item 29 ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋„ˆ๊ทธ๋Ÿฝ๊ฒŒ, ์ƒ์„ฑํ•  ๋•Œ๋Š” ์—„๊ฒฉํ•˜๊ฒŒ
            • Item 30 ๋ฌธ์„œ์— ํƒ€์ž… ์ •๋ณด๋ฅผ ์“ฐ์ง€ ์•Š๊ธฐ
            • Item 31 ํƒ€์ž… ์ฃผ๋ณ€์— null ๊ฐ’ ๋ฐฐ์น˜ํ•˜๊ธฐ
            • Item 32 ์œ ๋‹ˆ์˜จ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ์œ ๋‹ˆ์˜จ์„ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 33 string ํƒ€์ž…๋ณด๋‹ค ๋” ๊ตฌ์ฒด์ ์ธ ํƒ€์ž… ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 34 ๋ถ€์ •ํ™•ํ•œ ํƒ€์ž…๋ณด๋‹ค๋Š” ๋ฏธ์™„์„ฑ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 35 ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ, API์™€ ๋ช…์„ธ๋ฅผ ๋ณด๊ณ  ํƒ€์ž… ๋งŒ๋“ค๊ธฐ
            • Item 36 ํ•ด๋‹น ๋ถ„์•ผ์˜ ์šฉ์–ด๋กœ ํƒ€์ž… ์ด๋ฆ„ ์ง“๊ธฐ
            • Item 37 ๊ณต์‹ ๋ช…์นญ์—๋Š” ์ƒํ‘œ๋ฅผ ๋ถ™์ด๊ธฐ
          • Ch.5 any ๋‹ค๋ฃจ๊ธฐ
            • Item 38 any ํƒ€์ž…์€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ข์€ ๋ฒ”์œ„์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 39 any๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ณ€ํ˜•ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 40 ํ•จ์ˆ˜ ์•ˆ์œผ๋กœ ํƒ€์ž… ๋‹จ์–ธ๋ฌธ ๊ฐ์ถ”๊ธฐ
            • Item 41 any์˜ ์ง„ํ™”๋ฅผ ์ดํ•ดํ•˜๊ธฐ
            • Item 42 ๋ชจ๋ฅด๋Š” ํƒ€์ž…์˜ ๊ฐ’์—๋Š” any ๋Œ€์‹  unknown์„ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 43 ๋ชฝํ‚ค ํŒจ์น˜๋ณด๋‹ค๋Š” ์•ˆ์ „ํ•œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 44 ํƒ€์ž… ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์ถ”์ ํ•˜์—ฌ ํƒ€์ž… ์•ˆ์ „์„ฑ ์œ ์ง€ํ•˜๊ธฐ
          • Ch.6 ํƒ€์ž… ์„ ์–ธ๊ณผ @types
            • Item 45 devDependencies์— typescript์™€ @types ์ถ”๊ฐ€ํ•˜๊ธฐ
            • Item 46 ํƒ€์ž… ์„ ์–ธ๊ณผ ๊ด€๋ จ๋œ ์„ธ ๊ฐ€์ง€ ๋ฒ„์ „ ์ดํ•ดํ•˜๊ธฐ
            • Item 47 ๊ณต๊ฐœ API์— ๋“ฑ์žฅํ•˜๋Š” ๋ชจ๋“  ํƒ€์ž…์„ ์ต์ŠคํฌํŠธํ•˜๊ธฐ
            • Item 48 API ์ฃผ์„์— TSDoc ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 49 ์ฝœ๋ฐฑ์—์„œ this์— ๋Œ€ํ•œ ํƒ€์ž… ์ œ๊ณตํ•˜๊ธฐ
            • Item 50 ์˜ค๋ฒ„๋กœ๋”ฉ ํƒ€์ž…๋ณด๋‹ค๋Š” ์กฐ๊ฑด๋ถ€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 51 ์˜์กด์„ฑ ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ฏธ๋Ÿฌ ํƒ€์ž… ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 52 ํ…Œ์ŠคํŒ… ํƒ€์ž…์˜ ํ•จ์ •์— ์ฃผ์˜ํ•˜๊ธฐ
          • Ch.7 ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ
            • Item 53 ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ๋ณด๋‹ค๋Š” ECMAScript ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 54 ๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋…ธํ•˜์šฐ
            • Item 55 DOM ๊ณ„์ธต ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ
            • Item 56 ์ •๋ณด๋ฅผ ๊ฐ์ถ”๋Š” ๋ชฉ์ ์œผ๋กœ private ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ
            • Item 57 ์†Œ์Šค๋งต์„ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋””๋ฒ„๊น…ํ•˜๊ธฐ
          • Ch.8 ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ
            • Item 58 ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑํ•˜๊ธฐ
            • Item 59 ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋„์ž… ์ „์— @ts-check์™€ JSDoc์œผ๋กœ ์‹œํ—˜ํ•ด ๋ณด๊ธฐ
            • Item 60 allowJS๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ธฐ
            • Item 61 ์˜์กด์„ฑ ๊ด€๊ณ„์— ๋”ฐ๋ผ ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ์ „ํ™˜ํ•˜๊ธฐ
            • Item 62 ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์˜ ์™„์„ฑ์„ ์œ„ํ•ด noImplicitAny ์„ค์ •ํ•˜๊ธฐ
        • Dive Into Design Patterns
          • ๋””์ž์ธ ํŒจํ„ด ์†Œ๊ฐœ
          • ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ์›์น™๋“ค
          • ๋””์ž์ธ ํŒจํ„ด ๋ชฉ๋ก
          • ์œ ์šฉํ•œ ๋งํฌ
        • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (System Design Interview)
          • Key Points
          • Real Life Systems
          • Engineering Blogs
        • Node.js ๋””์ž์ธ ํŒจํ„ด ๋ฐ”์ด๋ธ” (Node.js Design Patterns 3rd Edition)
        • ๋ฆฌํŒฉํ„ฐ๋ง 2ํŒ (Refactoring: 2nd Ed.)
          • 1์žฅ ๋ฆฌํŒฉํ„ฐ๋ง: ์ฒซ ๋ฒˆ์งธ ์˜ˆ์‹œ
          • 2์žฅ ๋ฆฌํŒฉํ„ฐ๋ง ์›์น™
          • 3์žฅ ์ฝ”๋“œ์—์„œ ๋‚˜๋Š” ์•…์ทจ
          • 4์žฅ ํ…Œ์ŠคํŠธ ๊ตฌ์ถ•ํ•˜๊ธฐ
Powered by GitBook
On this page
  • About
  • Flow
  • Parsing (AST Generation)
  • Ignition (Byte Code Generation)
  • TurboFan
  • REF

Was this helpful?

Edit on GitHub
  1. Archives
  2. Learning
  3. Languages
  4. JavaScript/TypeScript
  5. Node
  6. General

V8 Engine

PreviousGeneralNextVersion Management: NVM

Last updated 2 years ago

Was this helpful?

About

V8 ์—”์ง„์€ ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœํ•œ ๊ณ ์„ฑ๋Šฅ ์˜คํ”ˆ์†Œ์Šค C++๋กœ ์ž‘์„ฑ๋œ JavaScript ๋ฐ WebAssembly ์—”์ง„์ด๋‹ค.

  • Chrome ๋ฐ Node.js์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

  • ECMAScript์™€ WebAssembly๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

์žฌ๋ฐŒ๋Š” ์ ์€ V8์€ ์›๋ž˜ ์˜ ์ข…๋ฅ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋‹จ์–ด์ด๊ธฐ๋„ ํ•˜๋‹ค. ๋˜ํ•œ, ๋‚ด๋ถ€์ ์œผ๋กœ ์—”์ง„ ๊ด€๋ จ ์šฉ์–ด๋“ค(Ignition ๋“ฑ)์ด ์‚ฌ์šฉ๋œ๋‹ค.

Flow

  1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์ธ Ignition์— AST๋ฅผ ๋„˜๊ธฐ๊ฒŒ ๋œ๋‹ค.

    ์ปดํ“จํ„ฐ๊ฐ€ ํ•ด์„ํ•˜๊ธฐ ์‰ฌ์šด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•จ์œผ๋กœ์จ ์›๋ณธ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํŒŒ์‹ฑ(Parsing)ํ•ด์•ผ๋˜๋Š” ์ˆ˜๊ณ ๋ฅผ ๋œ๊ณ , ์ฝ”๋“œ์˜ ์–‘๋„ ์ค„์ด๋ฉด์„œ ์ฝ”๋“œ ์‹คํ–‰ ๋•Œ ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์•„๋‚„ ์ˆ˜ ์žˆ๋‹ค.

  2. ์ดํ›„ ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ V8 ์—”์ง„์ด ์‹คํ–‰ํ•˜๋ฉด์„œ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋œ๋‹ค. ๊ทธ ์ค‘์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋Š” TurboFan์œผ๋กœ ๋ณด๋‚ด์ ธ์„œ ์ตœ์ ํ™”๋œ ์ฝ”๋“œ(Optimized Machine Code)๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ์‚ฌ์šฉ์ด ๋œ ๋œ๋‹ค ์‹ถ์œผ๋ฉด ๋‹ค์‹œ Deoptimizingํ•˜๊ฒŒ ๋œ๋‹ค.

Parsing (AST Generation)

์œ„์—์„œ ๋งํ–ˆ๋‹ค์‹œํ”ผ ํŒŒ์‹ฑ(Parsing)์ด๋ž€ ์†Œ์Šค์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST; Abstract Syntax Tree)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

  • ํ‘œํ˜„์‹ ๋“ฑ์—์„œ ํ† ํฐ์„ ์ถ”์ถœํ•ด + ์—ฐ์‚ฐ์ž ๊ฐ™์€ ๊ฒƒ์„ ๋งŒ๋‚˜๋ฉด Token::ADD ๋“ฑ์œผ๋กœ ๊ฒ€์‚ฌํ•ด ์กฐ๊ฑด์— ๋งž๊ฒŒ ํŒŒ์‹ฑํ•œ๋‹ค.

  • ์ด ๊ณผ์ •์—์„œ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ์กฐ๊ฑด๋ฌธ ๋“ฑ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ์˜ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜๊ณ , ๋ฒ”์œ„(Scope)๋ฅผ ์„ค์ •ํ•œ๋‹ค.

  • ์ด ๊ณผ์ •์„ C++๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.

Ignition (Byte Code Generation)

๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„์–ด(0101010...)์ด ์•„๋‹ˆ๋ผ, ๊ณ ๊ธ‰ ์–ธ์–ด(JavaScript)๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊พธ๊ธฐ ์ „์— ์ค‘๊ฐ„ ์ฝ”๋“œ๋กœ ํ•œ๋ฒˆ ์ปดํŒŒ์ผํ•œ ๊ฒฐ๊ณผ๋ฌผ์ด๋‹ค.

V8 ์—”์ง„์—์„œ๋Š” Ignition์„ ํ†ตํ•ด JavaScript ์ฝ”๋“œ๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

Ignition์ด๋ž€ ๊ธฐ์กด V8 ์—”์ง„์˜ Full-codegen์„ ๋Œ€์ฒดํ•˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์ด๋‹ค.

Full-codegen์€ ์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ์— ์ปดํŒŒ์ผํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์ ์œ ์œจ์ด ๋†’์•˜๋‹ค. ๋˜ํ•œ JavaScript๋Š” C++๊ณผ ๊ฐ™์€ ์ •์  ํƒ€์ดํ•‘ ์–ธ์–ด๊ฐ€ ์•„๋‹Œ ๋™์  ํƒ€์ดํ•‘ ์–ธ์–ด๋ผ์„œ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „๊นŒ์ง€ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฐ’๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ์ตœ์ ํ™”ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ๋‹ค๊ณ  ํ•œ๋‹ค.

Ignition์€ ์ฝ”๋“œ ํ•œ์ค„ ํ•œ์ค„์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ํ•ด์„ํ•˜๋Š” "์ธํ„ฐํ”„๋ฆฌํ„ฐ" ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์—ฌ ์„ธ ๊ฐ€์ง€ ์ด์ ์„ ๊ฐ€์ ธ๊ฐ€๊ณ ์ž ํ–ˆ๋‹ค.

  1. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ์†Œ - JS -> ๊ธฐ๊ณ„์–ด๋ณด๋‹ค ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์ด ๋” ํŽธํ•˜๋‹ค.

  2. Parsing ๊ฐ„ ์˜ค๋ฒ„ํ—ค๋“œ ๊ฐ์†Œ - ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ๊ฐ„๊ฒฐํ•˜๋ฏ€๋กœ ๋‹ค์‹œ ํŒŒ์‹ฑํ•˜๊ธฐ ํŽธํ•˜๋‹ค.

  3. ์ปดํŒŒ์ผ Pipeline ๋ณต์žก์„ฑ ๊ฐ์†Œ - Optimizing / Deoptimizing ๋‘˜ ๋‹ค ๋ฐ”์ดํŠธ์ฝ”๋“œ๋งŒ ์‹ ๊ฒฝ์“ฐ๋ฉด ๋˜๋ฏ€๋กœ ํŽธํ•˜๋‹ค.

node ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ --print-bytecode ์˜ต์…˜์„ ๋„˜๊ฒจ์ฃผ๋ฉด ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ธํ„ฐํ”„๋ฆฌํŒ… ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

$ node --print-bytecode some-file.js

V8 ์—”์ง„์€ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ JavaScript ์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ „๋ถ€ ๋ณ€ํ™˜ํ•ด ๋†“๊ธฐ ๋•Œ๋ฌธ์—, ์ฒ˜์Œ์—๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋”๋ผ๋„ ๊ทธ ์ดํ›„์—๋Š” ์ปดํŒŒ์ผ ์–ธ์–ด์™€ ๊ฐ€๊นŒ์šด ์„ฑ๋Šฅ์„ ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.

TurboFan

TurboFan์€ V8 ์—”์ง„ v5.9๋ถ€ํ„ฐ ๊ธฐ์กด์— ์‚ฌ์šฉ๋˜๋˜ CrankShaft ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ์ตœ์ ํ™” ๋‹ด๋‹น ์ปดํŒŒ์ผ๋Ÿฌ์ด๋‹ค.

์ฒ˜์Œ V8์ด ๋‚˜์˜จ ๋’ค๋กœ ์ƒˆ๋กœ์šด ์ปดํ“จํ„ฐ ์•„ํ‚คํ…์ฒ˜๋„ ๋“ฑ์žฅํ•˜๊ณ  JavaScript๋„ ์ง€์†์ ์œผ๋กœ ๋ฐœ์ „ํ•ด์„œ V8๋„ ์ง€์›์„ ๊ณ„์†ํ–ˆ๋‹ค. V8 ํŒ€์€ ์ƒˆ๋กœ์šด ์‚ฌ์–‘์— ๋งž์ถฐ V8์„ ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์ค˜์•ผ ํ–ˆ๋Š”๋ฐ, ๊ฒฐ๊ตญ Crankshaft์˜ ๊ตฌ์กฐ๋กœ๋Š” ์ง€์†์  ํ™•์žฅ์ด ์–ด๋ ต๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€๊ณ , ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋กœ ๊ณ„์ธตํ™”ํ•˜์—ฌ ์ข€ ๋” ํ™•์žฅ์— ์šฉ์ดํ•œ TurboFan์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

  • Crankshaft๋กœ๋Š” 13,000~16,000์ค„์˜ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ–ˆ๋˜ ๊ฑธ TurboFan์œผ๋กœ ์˜ฎ๊ฒผ๋”๋‹ˆ 3,000์ค„ ๋ฏธ๋งŒ์˜ ์ฝ”๋“œ๋กœ ์ปค๋ฒ„๊ฐ€ ๊ฐ€๋Šฅํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

V8 ์—”์ง„์€ ๋Ÿฐํƒ€์ž„์—์„œ Profiler์—๊ฒŒ ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜์˜ ํ˜ธ์ถœ ๋นˆ๋„ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์œผ๊ฒŒ ํ•˜๊ณ , ์ด๋ ‡๊ฒŒ ๋ชจ์ธ ๋ฐ์ดํ„ฐ๋ฅผ TurboFan์—๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋ฉด TurboFan์ด ์ตœ์ ํ™”ํ•˜๋„๋ก ํ•œ๋‹ค.

์ตœ์ ํ™” ๊ธฐ๋ฒ•์œผ๋กœ๋Š” ๋น„์Šทํ•œ ๊ฒƒ๋ผ๋ฆฌ ๋ถ„๋ฅ˜ํ•ด ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ํžˆ๋“  ํด๋ž˜์Šค(Hidden Class), ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์œผ๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ์ธ๋ผ์ธ ์บ์‹ฑ(IC; Inline Caching) ๋“ฑ์ด ์žˆ๋‹ค.

์ตœ์ ํ™” ๊ธฐ์ค€์€ ์ฝ”๋“œ๊ฐ€ ๋œจ๊ฒ๊ณ (์ž์ฃผ ํ˜ธ์ถœ๋˜๊ณ ) ์•ˆ์ •์ (์ฝ”๋“œ๊ฐ€ ์•ˆ ๋ณ€ํ•จ)์ด๊ฑฐ๋‚˜(kHotAndStable), ์ธํ„ฐํ”„๋ฆฌํŒ…๋œ ๋ฐ”์ดํฌ ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ํŠน์ • ์ž„๊ณ„์ ์„ ๋„˜์ง€ ์•Š์œผ๋ฉด ์ž‘์€ ํ•จ์ˆ˜(kSmallFunction)๋กœ ํŒ๋‹จํ•ด ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

์ด ๋ถ€๋ถ„์€ v8/src/execution/runtime-profiler.cc์— ์ •์˜๋˜์–ด ์žˆ์—ˆ๋Š”๋ฐ ์ง€๊ธˆ์€ ํฉ์–ด์ง„ ๋“ฏ ํ•˜๋‹ค.

node๋ฅผ ์‹คํ–‰ํ•  ๋•Œ --trace-opt ์˜ต์…˜์„ ์ฃผ๋ฉด TurboFan์ด ์ตœ์ ํ™” ์ž‘์—… ๋“ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

$ node --trace-opt some-file.js

REF

์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ JavaScript ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ํŒŒ์„œ(Parser)๋ฅผ ํ†ตํ•ด ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

- ๋ชจ๋“  ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—์„œ ๊ฐ€์ ธ์™”๋‹ค. ๋ณธ ๋‚ด์šฉ๋ณด๋‹ค ํ›จ์”ฌ ์ž์„ธํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋‹ˆ ์ฝ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ.

์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST; Abstract Syntax Tree)
V8 JavaScript Engine
Evans Library - V8 ์—”์ง„์€ ์–ด๋–ป๊ฒŒ ๋‚ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฑธ๊นŒ?
8๊ธฐํ†ต ์—”์ง„
GitHub - v8/v8: The official mirror of the V8 Git repositoryGitHub
V8 GitHub
Logo
์ถœ์ฒ˜:
https://medium.com/@duartekevin91/basics-of-understanding-chromes-v8-engine-c5c8ec61fa6b