# [[CSSOM|CSSOM]] ## ๐Ÿ“Œ Brief Summary [[CSSOM(CSS Object Model)|CSSOM(CSS Object Model]]์€ ์›น ํŽ˜์ด์ง€์˜ ์‹œ๊ฐ์  ์™ธ๊ด€์„ ์ •์˜ํ•˜๋Š” ์Šคํƒ€์ผ ์ •๋ณด์˜ ํŠธ๋ฆฌ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค [1-3]. DOM ์ƒ์„ฑ๊ณผ ๋‹ฌ๋ฆฌ ์ ์ง„์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์œผ๋ฉฐ, ํ™”๋ฉด ๋ Œ๋”๋ง์„ ์ฐจ๋‹จ(render-Blocking)ํ•˜๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค [1, 2]. ๊ตฌ์ถ•๋œ CSSOM์€ DOM๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์— ์š”์†Œ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ทธ๋ฆฌ๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ Œ๋” ํŠธ๋ฆฌ([[Render Tree|Render Tree]])๋ฅผ ํ•ฉ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [3-5]. ## ๐Ÿ“– Core Content * **์ƒ์„ฑ ๊ณผ์ • ๋ฐ ํŠน์ง•** ๋ธŒ๋ผ์šฐ์ €๋Š” CSS ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ CSSOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์—ฌ๊ธฐ์—๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ(user agent) ์Šคํƒ€์ผ์‹œํŠธ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค [6, 7]. ๋ธŒ๋ผ์šฐ์ €๋Š” CSS ๊ทœ์น™์„ ์ž์‹ ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํƒ€์ผ ๋งต์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , CSS ์„ ํƒ์ž๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ€๋ชจ, ์ž์‹, ํ˜•์ œ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค [6]. ์ด ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋” ๊ตฌ์ฒด์ ์ธ ๊ทœ์น™์„ ์žฌ๊ท€์ ์œผ๋กœ ์ ์šฉํ•˜๋ฉฐ ์†์„ฑ๊ฐ’์„ ์บ์Šค์ผ€์ด๋”ฉ(Cascading)ํ•ฉ๋‹ˆ๋‹ค [7, 8]. * **๋ Œ๋”๋ง ์ฐจ๋‹จ (Render-Blocking) ํŠน์„ฑ** HTML์˜ DOM ์ƒ์„ฑ์€ ์ ์ง„์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€๋งŒ CSSOM์€ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉฐ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค [1, 2]. CSS ๊ทœ์น™์€ ์ดํ›„์— ํŒŒ์‹ฑ๋˜๋Š” ๊ทœ์น™์— ์˜ํ•ด ๋ฎ์–ด์”Œ์›Œ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ธŒ๋ผ์šฐ์ €๋Š” ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ๋ชจ๋‘ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ํŒŒ์‹ฑํ•˜์—ฌ CSSOM์„ ์™„์„ฑํ•  ๋•Œ๊นŒ์ง€ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค [2, 8]. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ๋‚  ๊ฒƒ์˜ HTML์„ ๋ณด๊ฒŒ ๋˜๋Š” "์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ์ฝ˜ํ…์ธ ์˜ ๋ฒˆ์ฉ์ž„(FOUC, Flash of Unstyled Content)" ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์•ˆ์ „์žฅ์น˜์ž…๋‹ˆ๋‹ค [1]. * **์„ ํƒ์ž ๋ณต์žก๋„์™€ ์„ฑ๋Šฅ** CSS ์„ ํƒ์ž์˜ ๋ณต์žก๋„๋Š” CSSOM ๊ตฌ์„ฑ ์†๋„์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค [9]. ๋ธŒ๋ผ์šฐ์ €๋Š” ์„ ํƒ์ž๋ฅผ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ํŒŒ์‹ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ • ์š”์†Œ๋ฅผ ๊นŠ๊ฒŒ ์ง€์นญํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์„ ํƒ์ž์ผ์ˆ˜๋ก ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์ด ์กฐ์ƒ ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด DOM ํŠธ๋ฆฌ๋ฅผ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€์•ผ ํ•˜๋ฏ€๋กœ ๋” ๋งŽ์€ ์—ฐ์‚ฐ ์ž‘์—…์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค [9, 10]. ํ•˜์ง€๋งŒ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์˜ CSSOM ๊ตฌ์ถ• ๋ฐ ํŒŒ์‹ฑ ์†๋„๋Š” ๋งค์šฐ ๋น ๋ฅด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ DNS ์กฐํšŒ์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๋ณด๋‹ค๋„ ์ ๊ฒŒ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค [7, 10]. * **๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)์˜ ํ•ฉ์„ฑ** CSSOM๊ณผ DOM์˜ ๊ตฌ์ถ•์ด ๋ชจ๋‘ ์ค€๋น„๋˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด ๋‘ ํŠธ๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [4, 5, 11]. ๋ Œ๋” ํŠธ๋ฆฌ๋Š” ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ์ฝ˜ํ…์ธ ์™€ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ๊ณ„์‚ฐ๋œ ์Šคํƒ€์ผ(computed styles)๋งŒ์„ ํฌํ•จํ•˜๋ฉฐ, `display: none`์œผ๋กœ ์Šคํƒ€์ผ๋ง๋œ ์ˆจ๊น€ ์š”์†Œ๋‚˜ ``, `