How JavaScript Works

μΊ‘ν‹΄νŒκ΅λ‹˜μ˜ ν¬μŠ€νŒ…μ„ 읽고 μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ™μž‘μ›λ¦¬: μ—”μ§„, λŸ°νƒ€μž„, 호좜 μŠ€νƒ

μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„

λŒ€ν‘œμ μΈ μ˜ˆλŠ” Google V8 μ—”μ§„. V8은 Chromeκ³Ό Node.jsμ—μ„œ μ‚¬μš©

μ—”μ§„μ˜ μ£Όμš” κ΅¬μ„±μš”μ†Œ

  • Memory Heap : λ©”λͺ¨λ¦¬ 할당이 μΌμ–΄λ‚˜λŠ” κ³³

  • Call Stack : μ½”λ“œ 싀행에 따라 호좜 μŠ€νƒμ΄ μŒ“μ΄λŠ” κ³³

λŸ°νƒ€μž„

거의 λͺ¨λ“  κ°œλ°œμžλ“€μ΄ setTimeoutκ³Ό 같은 λΈŒλΌμš°μ € λ‚΄μž₯ APIλ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ 이 APIλ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ—μ„œ μ œκ³΅ν•˜μ§€λŠ” μ•ŠμŒ

μžλ°”μŠ€ν¬λ¦½νŠΈμ— κ΄€μ—¬ν•˜λŠ” μš”μ†Œλ“€

  • μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„

  • Web APIs (DOM, AJAX, Timeout)

  • Event Loop, Callback Queue

호좜 μŠ€νƒ(Call Stack)

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 기본적으둜 μ‹±κΈ€ μ“°λ ˆλ“œ κΈ°λ²ˆμ–Έμ–΄λ‘œ 호좜 μŠ€νƒμ΄ ν•˜λ‚˜. λ”°λΌμ„œ ν•œ λ²ˆμ— ν•œ μž‘μ—…λ§Œ μ²˜λ¦¬ν•  수 있음

  • 호좜 μŠ€νƒμ€ μš°λ¦¬κ°€ ν”„λ‘œκ·Έλž¨ μƒμ—μ„œ 어디에 μžˆλŠ”μ§€λ₯Ό κΈ°λ‘ν•˜λŠ” 자료ꡬ쑰

  • ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ©΄ ν•΄λ‹Ή ν•¨μˆ˜λŠ” 호좜 μŠ€νƒμ˜ κ°€μž₯ 상단에 μœ„μΉ˜ν•˜κ³  ν•¨μˆ˜ 싀행이 λλ‚˜λ©΄ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό 호좜 μŠ€νƒμ—μ„œ 제거

  • ν•˜λŠ” 것이 μŠ€νƒμ˜ μ—­ν• 

  • 호좜 μŠ€νƒμ΄ μ΅œλŒ€ 크기가 되면 μŠ€νƒ λ‚ λ € 버리기가 일어남(Overflowing)

-> μ‹±κΈ€ μŠ€λ ˆλ“œ 기반 코딩은 λ©€ν‹° μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ μ œκΈ°λ˜λŠ” λ³΅μž‘ν•œ λ¬Έμ œλ‚˜ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό κ³ λ―Όν•˜μ§€ μ•Šμ•„λ„ 되기 λ•Œλ¬Έμ— 쉬움(ex, λ°λ“œλ½) -> κ·ΈλŸ¬λ‚˜ μ‹±κΈ€ μŠ€λ ˆλ“œμ—μ„œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 건 μƒλ‹Ήνžˆ μ œμ•½μ΄ 많음 -> ν•œ 개의 호좜 μŠ€νƒμ„ κ°–κ³  μžˆλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 싀행이 λŠλ €μ§„λ‹€λ©΄?

λ™μ‹œμ„±(concurrency) & 이벀트 루프(Event Loop)

  • 호좜 μŠ€νƒμ— 처리 μ‹œκ°„μ΄ 맀우 였래 κ±Έλ¦¬λŠ” ν•¨μˆ˜κ°€ μžˆλ‹€λ©΄,

  • ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ λΈŒλΌμš°μ €λŠ” 아무 μž‘μ—…λ„ λͺ»ν•˜κ³  λŒ€κΈ° μƒνƒœκ°€ 됨

  • νŽ˜μ΄μ§€ λ Œλ”λ§ λ™μž‘μ„ λ°©ν•΄ν•˜μ§€ μ•Šκ³  λΈŒλΌμš°μ €μ˜ 응닡도 λŠμ§€ μ•ŠμœΌλ©΄μ„œ μ—°μ‚°λŸ‰μ΄ λ§Žμ€ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ €λ©΄,

  • 비동기 콜백

210913

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 비동기 μ²˜λ¦¬κ°€ μ™œ μ€‘μš”ν•œμ§€ μ•Œ 수 μžˆμ—ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μž‘λ™ 방식에 λŒ€ν•΄ μ’€ 더 μ•Œμ•„λ³΄λ©΄ 쒋을 것 κ°™λ‹€.

Last updated