๐ŸŽพ ๊ธฐ์ˆ ์ฑ… ์Šคํ„ฐ๋””

23๋…„ 1์›”๋ถ€ํ„ฐ ํ™œ๋™ ์ค‘์ธ ๊ต์œก์—์„œ, ๋œป์ด ๋งž๋Š” ๋™๋ฃŒ๋“ค๊ณผ ํ•จ๊ป˜ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ ์Šคํ„ฐ๋””
์•ž์œผ๋กœ๋„ ๊พธ์ค€ํžˆ ๊ธฐ์ˆ  ์„œ์ ์„ ์ฝ๊ณ  ํ•จ๊ป˜ ๋ฐœ์ „ํ•˜๋Š” ์‹œ๊ฐ„์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค!

๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ

์ด ๋‚ด์šฉ์€ ๊ฐœ๋ฐœ์ž ํ™ฉ์ค€์ผ - Vanilla Javascript๋กœ ๊ฐ€์ƒ๋” ๋งŒ๋“ค๊ธฐ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋‚ด์šฉ์„ ํ™ฉ์ค€์ผ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๊ณ  ๋ช‡๊ฐœ์˜ ๊ฐœ๋… ๋‚ด์šฉ ์ •๋„๋งŒ ์ถ”๊ฐ€ ํ˜น์€ ๋‚ด์šฉ ์š”์•ฝ์ด ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์‚ฌํ•ญ์€ ํ™ฉ์ค€์ผ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!(์ •๋ง ๋„ˆ๋ฌด ์ข‹์€ ๊ธ€์ด์—์š”~!)

Vanilla Javascript๋กœ ๊ฐ€์ƒ๋”(VirtualDOM) ๋งŒ๋“ค๊ธฐ

1. ๋ธŒ๋ผ์šฐ์ € ๋กœ๋”ฉ ๊ณผ์ •

  • ํŒŒ์‹ฑ -> ์Šคํƒ€์ผ -> ๋ ˆ์ด์•„์›ƒ -> ํŽ˜์ธํŠธ -> ํ•ฉ์„ฑ -> ๋ Œ๋”๋ง
  • ์œ„ ๊ณผ์ •์ด ์ง„ํ–‰ ํ›„, CSS๋‚˜ JS๋ฅผ ํ†ตํ•ด ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธธ ๊ฒฝ์šฐ re-ํ”Œ๋กœ์šฐ(re-๋ ˆ์ด์•„์›ƒ) ๋˜๋Š” re-ํŽ˜์ธํŠธ ๊ณผ์ •์ด ์ง„ํ–‰๋œ๋‹ค.

1. ํŒŒ์‹ฑ

DOM Tree

  • HTML์„ ํ† ๋Œ€๋กœ DOM Tree๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • Bytes: HTML์„ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ฝ๋Š”๋‹ค. ex) 3C 62 6F 64 ...
    • Characters: ๋ฐ”์ดํŠธ๋ฅผ ๋ฌธ์ž ๋‹จ์œ„๋กœ ์ฝ๋Š”๋‹ค. ex) <html><head>...<body>...</html>
    • Tokens: ๋ฌธ์ž๋ฅผ ํ† ํฐ ๋‹จ์œ„๋กœ ์ฝ๋Š”๋‹ค. ex) StartTag: html, StartTag: head, โ€ฆ , EndTag: html
    • Nodes: ํ† ํฐ์„ ๋…ธ๋“œ ๋‹จ์œ„๋กœ ์ฝ๋Š”๋‹ค. ex) Element: html, Element: head, โ€ฆ , Element: html
    • DOM: ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด DOM Tree๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ex) Element: html -> Element: head -> โ€ฆ -> Element: html

CSSOM Tree

  • CSS๋ฅผ ํ† ๋Œ€๋กœ CSSOM Tree๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • Bytes: CSS๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ฝ๋Š”๋‹ค. ex) 62 6F 64 79 ...
    • Characters: ๋ฐ”์ดํŠธ๋ฅผ ๋ฌธ์ž ๋‹จ์œ„๋กœ ์ฝ๋Š”๋‹ค. ex) body { ... }
    • Tokens: ๋ฌธ์ž๋ฅผ ํ† ํฐ ๋‹จ์œ„๋กœ ์ฝ๋Š”๋‹ค. ex) Selector: body, Property: background-color, โ€ฆ , Value: #fff
    • Nodes: ํ† ํฐ์„ ๋…ธ๋“œ ๋‹จ์œ„๋กœ ์ฝ๋Š”๋‹ค. ex) Rule: body { โ€ฆ }, Declaration: background-color: #fff
    • CSSOM: ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด CSSOM Tree๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ex) Rule: body { โ€ฆ } -> Declaration: background-color: #fff

2. ์Šคํƒ€์ผ

  • DOM Tree์™€ CSSOM Tree๋ฅผ ํ†ตํ•ด ์Šคํƒ€์ผ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ Render Tree๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.
  • Render Tree๋Š” ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๋…ธ๋“œ(ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋…ธ๋“œ)๋กœ๋งŒ ๊ตฌ์„ฑ๋œ๋‹ค.

visibility: hidden

  • ์š”์†Œ๋ฅผ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค.
  • ๋ ˆ์ด์•„์›ƒ์—์„œ ๊ณต๊ฐ„์€ ์ฐจ์ง€ํ•œ๋‹ค.
  • ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ์ œ์™ธ๋˜์ง€ ์•Š๋Š”๋‹ค.

display: none

  • ์š”์†Œ๋ฅผ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค.
  • ๋ ˆ์ด์•„์›ƒ์—์„œ ๊ณต๊ฐ„๋„ ์ฐจ์ง€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ์ œ์™ธ๋œ๋‹ค.

3. ๋ ˆ์ด์•„์›ƒ

  • ๊ธฐ๊ธฐ์˜ ๋ทฐํฌํŠธ ๋‚ด์—์„œ ๊ฐ ์š”์†Œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ๋ ˆ์ด์•„์›ƒ ๊ณผ์ •์ด ๋‹ค์‹œ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ๋ฆฌํ”Œ๋กœ์šฐ๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋…ธ๋“œ์˜ ์ •ํ™•ํ•œ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  • %๋กœ ์ง€์ •๋œ ๊ฐ’์€ px ๋‹จ์œ„๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

4. ํŽ˜์ธํŠธ

  • ๋ ˆ์ด์•„์›ƒ ๊ณผ์ •์„ ํ†ตํ•ด ๊ณ„์‚ฐ๋œ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ํ† ๋Œ€๋กœ ๊ฐ ์š”์†Œ๋ฅผ ๊ทธ๋ฆฐ๋‹ค.(px ๋‹จ์œ„)
  • ๋ ˆ์ด์•„์›ƒ์ด ์™„๋ฃŒ๋  ๋•Œ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ Paint Setup ๋ฐ Paint ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  • ์œ„์น˜์™€ ๊ด€๊ณ„ ์—†๋Š” ์Šคํƒ€์ผ(background-color, opacity, transform ๋“ฑ)์€ Paint Setup ์ด๋ฒคํŠธ์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • ์œ„์น˜์™€ ๊ด€๊ณ„ ์žˆ๋Š” ์Šคํƒ€์ผ์€ Paint ์ด๋ฒคํŠธ์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • ์œ„์˜ ๊ฒฐ๊ณผ๋Š” ๋ ˆ์ด์–ด ํ˜•ํƒœ๋กœ ์ƒ์„ฑ๋˜์–ด ๊ฐœ๋ณ„ ๋ ˆ์ด์–ด๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.

5. ํ•ฉ์„ฑ

  • ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ๋ ˆ์ด์–ด๋ฅผ ํ•ฉ์„ฑํ•œ๋‹ค.(๋ ˆ์ด์–ด๋ฅผ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ ํ™”๋ฉด์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด๋‹ค.)
  • transform, opacity, will-change ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ฉ์„ฑ ๊ณผ์ •์ด ์ผ์–ด๋‚œ๋‹ค.

2. ์„ฑ๋Šฅ

1. ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ ๊ณผ์ •์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ

  • ๋ฆฌํ”Œ๋กœ์šฐ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ
    • DOM ์ถ”๊ฐ€/์‚ญ์ œ
    • CSS ์†์„ฑ ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ๋ ˆ์ด์•„์›ƒ(๋„ˆ๋น„, ๋†’์ด, ๋„“์ด ๋“ฑ)์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ
    • ex) margin, padding, width, heightโ€ฆ
  • ๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ
    • CSS ์†์„ฑ ๋ณ€๊ฒฝ์ด ๊ธฐํ•˜ํ•™์ ์ธ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
    • ex) color, background-color, visibility, box-shadowโ€ฆ

2. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„ฑ๋Šฅ์„ ์ œ์ผ ๋งŽ์ด ์žก์•„ ๋จน๋Š” ๊ฒƒ

  • ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ์„ฑ๋Šฅ์„ ์ œ์ผ ๋งŽ์ด ์žก์•„ ๋จน๋Š”๋‹ค.
  • re-ํ”Œ๋กœ์šฐ๊ฐ€ ์ˆœ๊ฐ„์ ์œผ๋กœ ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค.

์ฐธ๊ณ