# [[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`์ผ๋ก ์คํ์ผ๋ง๋ ์จ๊น ์์๋ `
`, `