์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ๋™์ž‘๊ตฌ์กฐ

  • js๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” js ์—”์ง„์ด ํ•„์š”ํ•จ
  • V8, Rhino, SpiderMonkey ๋“ฑ ๋‹ค์–‘ํ•œ ์—”์ง„์ด ์กด์žฌํ•จ
  • ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ๊ฑด, google์—์„œ ๋งŒ๋“  V8(๊ตฌ๊ธ€ ์‚ฌ๋ž‘ํ•ด์š”)

js ์—”์ง„์€ 2๊ฐ€์ง€ ๊ตฌ์„ฑ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋จ

  1. ๋ฉ”๋ชจ๋ฆฌ ํž™(Memory Heap) -> ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ๋ฐœ์ƒ
  2. Call Stack(ํ˜ธ์ถœ ์Šคํƒ) -> ์ฝ”๋“œ ์‹คํ–‰์— ๋”ฐ๋ผ ์Šคํƒ์ด ํ•˜๋‚˜์”ฉ ์Œ“์ด๋Š” ๊ณณ

ํ•˜์ง€๋งŒ ์ด์™ธ์—๋„ ์ˆ˜๋งŽ์€ API๋“ค์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ,
3. Web API๋ผ๊ณ  ํ•ด์„œ ์›น ๋ธŒ๋ผ์šฐ์ € ํ˜น์€ node.js ๊ฐ™์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„์—์„œ ์ง€์›ํ•ด์ฃผ๋Š” API ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ธŒ๋ผ์šฐ์ €์— ๋”ฐ๋ผ ์ง€์›ํ•ด์ค„ ์ˆ˜ ๋„ ์žˆ๊ณ  ์•ˆํ•ด์ค„ ์ˆ˜ ๋„ ์žˆ์Œ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž์ฒด์—๋Š” ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋…์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Œ
๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํ•จ? -> ์ด๋ฒคํŠธ๋ฃจํ”„์™€ ์ฝœ๋ฐฑ ํ์˜ ํ™˜์žฅ์˜ ์ฝœ๋ผ๋ณด๋กœ ๊ฐ€๋Šฅํ•จ


์ด๊ฒŒ ๋ญ”๋ฐ?

์‚ฌ์‹ค ๋น„๋ฐ€์ด์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €๋‚˜ ๋Ÿฐํƒ€์ž„์—์„œ๋Š” Web API๋ฅผ ํฌํ•จํ•ด์„œ Event Loop์™€ Callback Queue๋ผ๋Š”๊ฒƒ๋„ ์ง€์›ํ•ด์คŒ

๋Ÿฐํƒ€์ž„์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๊ตฌ๋™๋˜๋Š” ํ™˜๊ฒฝ์„ ๋งํ•˜๋Š”๊ฑฐ์ž„ (๋‹ค๋“ค ์•Œ๊ฒ ์ง€๋งŒ)

์•”ํŠผ ์ •๋ฆฌํ–ˆ๋˜ ๋‚ด์šฉ์ด๋‹ˆ๊นŒโ€ฆ

์™œ Call Back Queue๊ฐ€ ๋น„์›Œ์ ธ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฑธ๊นŒ?

V8 ์—”์ง„ ๊ฐœ๋ฐœ์ž๋ถ„์ด ๋ง์”€ํ•˜์‹œ๊ธธโ€ฆ.

  • ์˜ˆ๋ฅผ ๋“ค์–ด Call Stack์— ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ•ด๋ด„
  • ๊ทธ๋Ÿฐ๋ฐ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ์ž˜ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋˜ ์™€์ค‘์— ๊ฐ‘์ž๊ธฐ Event Loop์—์„œ Callback Queue์˜ ๋‚ด์šฉ์„ Call Stack์œผ๋กœ Push ํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•จ
  • ๊ทธ๋ž˜์„œ ์–ด์ฉ” ์ˆ˜ ์—†์ด ์ž˜ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋˜ ํ•จ์ˆ˜๋ฅผ ์ค‘๋‹จํ•˜๊ณ  Event Loop๊ฐ€ ๋ณด๋‚ธ ํ•จ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ–ˆ์Œ
  • ๊ทธ๋Ÿฐ๋ฐ ๋˜ ๊ฐ‘์ž๊ธฐ Event Loop์—์„œ Callback Queue์˜ ๋‚ด์šฉ์„ Call Stack์œผ๋กœ Push ํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•จ
  • ๊ณผ์—ฐ ์ด ๊ฒฝ์šฐ ์‹คํ–‰์˜ ๊ฒฐ๊ด๊ฐ’์„ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?
  • ๊ณผ์—ฐ ๋‚ด๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ํ•จ์ˆ˜๋Š” ๋‚ด๊ฐ€ ์˜ˆ์ƒํ–ˆ๋˜ ์‹œ๊ฐ„์— ๋๋‚˜๊ณ  ๊ฐ’์„ ์ œ๋Œ€๋กœ ๋„์ถœํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๊ฐ„๋‹จํžˆ ๋งํ•˜์ž๋ฉด ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ๋ฐ˜๋“œ์‹œ Call Stack์ด ๋น„์–ด์ ธ์žˆ๋Š” ์ƒํƒœ์—์„œ๋งŒ Call Stack์œผ๋กœ Push ํ•˜๋Š” ์ด์œ ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ผ๋Š” ์–ธ์–ด๊ฐ€ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ์•ˆ๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์–ธ์–ด๋ผ๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•ด์ฃผ๊ธฐ ์œ„ํ•จ

๋งŒ์•ฝ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์œ„์—์„œ ์˜ˆ๋ฅผ ๋“ค์—ˆ๋˜ ๊ฒƒ ๊ฐ™์€ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ๊ทธ๊ฒƒ์€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ์ƒํ™ฉ์„ ๊ทธ๋Œ€๋กœ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์–ธ์–ด๊ฐ€ ์•ˆ๊ฒŒ ๋˜์–ด๋ฆผ

๋”ฐ๋ผ์„œ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์–ธ์–ด์—์„œ โ€œํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์ค‘๋‹จํ•˜์ง€ ๋ง๊ณ  ์‹คํ–‰์ด ๋๋‚œ ๋’ค์— Event Loop๊ฐ€ ๋ณด๋‚ด์ค€ ํ•จ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ด!โ€๊ฐ™์€ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•ด์ง

๊ฒฐ๊ตญ์—๋Š” Event Loop๊ฐ€ Call Stack์ด ๋น„์–ด์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋™๊ธฐํ™” ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ณจ๋จธ๋ฆฌ๋ฅผ ์•“์„ ํ•„์š”๊ฐ€ ์—†์–ด์ง€๋Š” ๊ฒƒ์ž„

์ •๋ฆฌ(์ตœ์ข…๋ณธ?)

JS๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ์— ๋™๊ธฐ ์–ธ์–ด์ง€๋งŒ(๋™๊ธฐ์‚ฌ๋ž‘..ใ…Ž, ๋…ผ-๋ธ”๋กœํ‚น์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ์›€), ์›น ๋ธŒ๋ผ์šฐ์ ธ or ๋Ÿฐํƒ€์ž„์˜ ๋„์›€์„ ๋ฐ›์•„์„œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๊ณ 
๋งˆ์น˜ ์œ ์‚ฌ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์ธ๊ฒƒ ๋งˆ๋ƒฅ ๋™์ž‘ํ•˜๋Š” ์ด์ƒํ•œ ์นœ๊ตฌ

๊นœ๋ฐ•ํ–ˆ๋Š”๋ฐ ์‚ฌ์‹ค

Render Queue๋ผ๋Š”๊ฒƒ๋„ ์กด์žฌํ•จ
์ด๋ฒคํŠธ ํ๋ž‘ ๋น„์Šทํ•œ๋ฐโ€ฆ ๋ Œ๋”ํ๊ฐ€ ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ฐจ์ง€ํ•จ(์ด ์ฝœ๋ฐฑ์ด ๋จผ์ € ์ฝœ์Šคํƒ์— ์˜ฌ๋ผ๊ฐ)

์™œ์žˆ์Œ?

  • ๋ธŒ๋ผ์šฐ์ €๋Š” 1์ดˆ์— 60ํ”„๋ ˆ์ž„ ์†๋„๋กœ ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆผ(repaint)
  • ํ•˜์ง€๋งŒ js๊ฐ€ ํ•˜๋Š” ์ผ๋“ค๋กœ ์ธํ•ด ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ์ž‘์—…์— ์˜ํ–ฅ์„ ๋ฐ›์Œ
  • ๋ Œ๋”๋„ ํ์— ์Œ“์—ฌ์žˆ๋Š” ํ•˜๋‚˜์˜ ์ฝœ๋ฐฑ์ฒ˜๋Ÿผ ๋™์ž‘, ๋”ฐ๋ผ์„œ ์ฝœ์Šคํƒ์— ์ฝ”๋“œ๊ฐ€ ์žˆ์Œ? ๋™์ž‘ ๋ชปํ•˜์ œ
  • ๊ทธ๋ž˜์„œ ๋А๋ฆฐ ๋™๊ธฐ์‹ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ์ฝœ ์Šคํƒ์— ์ฝ”๋“œ๊ฐ€ ์Œ“์—ฌ ์žˆ์–ด์„œ ๋ Œ๋”๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ
  • ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ๋ง‰์ง€ ๋ง๋ผ๊ณ  ํ•˜๋Š”๊ฒƒ์ด ์ด๋Ÿฐ ํ˜„์ƒ์„ ๋œปํ•จ
  • ๋”ฐ๋ผ์„œ ์“ธ๋ฐ์—†๋Š” ๋А๋ฆฐ์ฝ”๋“œ ๊ทธ๋งŒ ์Œ“๊ณ  ์ ๋‹นํžˆ ํ•˜์žฅ ^^

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ