# [[DOM แ„†แ…ตแ†พ CSSOM|DOM ๋ฐ CSSOM]] ## ๐Ÿ“Œ Brief Summary DOM(๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ)๊ณผ [[CSSOM|CSSOM]](CSS ๊ฐ์ฒด ๋ชจ๋ธ)์€ ๋ธŒ๋ผ์šฐ์ €์˜ ํ•ต์‹ฌ ๋ Œ๋”๋ง ๊ฒฝ๋กœ(Critical Rendering Path)์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๋…๋ฆฝ์ ์ธ ํŠธ๋ฆฌ ๊ตฌ์กฐ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค [1, 2]. DOM์€ HTML ๋งˆํฌ์—…์„ ์ ์ง„์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜์—ฌ ๋ฌธ์„œ์˜ ๊ตฌ์กฐ์™€ ๋‚ด์šฉ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค [3, 4]. ๋ฐ˜๋ฉด, CSSOM์€ ๋ฌธ์„œ์— ์ ์šฉ๋  ์Šคํƒ€์ผ ๊ทœ์น™์„ ์ •์˜ํ•˜๋ฉฐ, ๋ Œ๋”๋ง ์‹œ ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ์ฝ˜ํ…์ธ ๊ฐ€ ๊นœ๋นก์ด๋Š” ํ˜„์ƒ(FOUC)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ Œ๋”๋ง ์ฐจ๋‹จ(render-Blocking) ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค [5, 6]. ์ด ๋‘ ํŠธ๋ฆฌ๊ฐ€ ๊ฒฐํ•ฉํ•˜์—ฌ ํ™”๋ฉด์— ํ‘œ์‹œ๋  ์‹œ๊ฐ์  ์š”์†Œ๋“ค๋งŒ ํฌํ•จํ•˜๋Š” ๋ Œ๋” ํŠธ๋ฆฌ([[Render Tree|Render Tree]])๋ฅผ ์ตœ์ข…์ ์œผ๋กœ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค [7, 8]. ## ๐Ÿ“– Core Content **[[DOM (Document Object Model)|DOM(Document Object Model]] ๊ตฌ์ถ•** - ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž, ํ† ํฐ(token)์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์ด๋ฅผ ๋‹ค์‹œ ๋…ธ๋“œ(node)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ณ„์ธต์ ์ธ DOM ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [3, 4, 9]. - DOM ํŠธ๋ฆฌ๋Š” ๋ฌธ์„œ์˜ ์ฝ˜ํ…์ธ ์™€ ๊ฐ ์š”์†Œ ๊ฐ„์˜ ๊ด€๊ณ„ ๋ฐ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค [4, 8, 9]. - DOM ๊ตฌ์ถ•์€ ์ ์ง„์ (incremental)์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ, ๋ธŒ๋ผ์šฐ์ €๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ์ง„ํ–‰ ์ค‘์ธ ์ƒํƒœ์—์„œ๋„ ํŒŒ์‹ฑ์„ ์‹œ์ž‘ํ•˜์—ฌ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 5, 6]. - ๋‹จ, DOM ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋ ˆ์ด์•„์›ƒ ๋ฐ ํŽ˜์ธํŠธ ๋“ฑ ์ดํ›„์˜ ๋ Œ๋”๋ง ๋‹จ๊ณ„์—์„œ ๋ธŒ๋ผ์šฐ์ €์˜ ์—ฐ์‚ฐ ๋ถ€๋‹ด์ด ์ปค์ง€๊ณ  ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง‘๋‹ˆ๋‹ค [5, 6, 9]. **[[CSSOM(CSS Object Model)|CSSOM(CSS Object Model]] ๊ตฌ์ถ•** - CSSOM์€ DOM์ด ์–ด๋–ป๊ฒŒ ์Šคํƒ€์ผ๋ง๋ ์ง€์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ CSS ๊ทœ์น™์„ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์Šคํƒ€์ผ ๋งต์ž…๋‹ˆ๋‹ค [2, 6, 8]. - DOM๊ณผ ๋‹ฌ๋ฆฌ CSSOM ๊ตฌ์ถ•์€ ์ ์ง„์ ์ด์ง€ ์•Š์œผ๋ฉฐ, ๋ฌธ์„œ์˜ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จ(render-blocking)ํ•ฉ๋‹ˆ๋‹ค [5, 6]. - ๋ธŒ๋ผ์šฐ์ €๋Š” ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ์›์‹œ HTML์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜๋Š” ํ˜„์ƒ(FOUC)์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๋งํฌ๋œ ๋ชจ๋“  ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ํŒŒ์‹ฑํ•  ๋•Œ๊นŒ์ง€ ๋ Œ๋”๋ง์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค [5]. - CSS ๊ทœ์น™์€ ํ•˜ํ–ฅ์‹์œผ๋กœ ์ข…์†(Cascade)๋˜๋Š” ํŠน์„ฑ์ด ์žˆ์–ด ํŒŒ์‹ฑ ๋„์ค‘ ์ด์ „ ๊ทœ์น™์ด ๋ฎ์–ด์จ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์™„์ „ํžˆ ํŒŒ์‹ฑ์ด ๋๋‚˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค [10, 11]. - ๋ธŒ๋ผ์šฐ์ €๋Š” CSS ์„ ํƒ์ž๋ฅผ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค [12]. ๋”ฐ๋ผ์„œ `.container.navigation.item`๊ณผ ๊ฐ™์ด ๊ตฌ์ฒด์ ์ธ ์„ ํƒ์ž๋Š” ๋‹จ์ˆœํžˆ `.item`์„ ์ฐพ๋Š” ๊ฒƒ๋ณด๋‹ค DOM ํŠธ๋ฆฌ๋ฅผ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ์กฐ์ƒ ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋” ๋“ญ๋‹ˆ๋‹ค [12, 13]. **๋ Œ๋” ํŠธ๋ฆฌ(Render Tree) ํ•ฉ์„ฑ** - DOM๊ณผ CSSOM ๊ตฌ์กฐ๊ฐ€ ๋ชจ๋‘ ์ค€๋น„๋˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด ๋‘˜์„ ๊ฒฐํ•ฉํ•˜์—ฌ ํ™”๋ฉด์— ๊ทธ๋ฆด ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [7, 14]. - ๋ Œ๋” ํŠธ๋ฆฌ๋Š” ์‹œ๊ฐ์ ์œผ๋กœ ๋ Œ๋”๋ง๋˜๋Š” ์š”์†Œ๋“ค๋งŒ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค [7]. ๋”ฐ๋ผ์„œ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” `