June 01, 2020
์ด๋ฒ ํฌ์คํ ์์๋ ๊ทธ๋ํฝ์ด ๋ฌด์์ธ์ง์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ , ๋ ๋๋ง ์ต์ ํ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ณ , ๊ทธ๋ํฝ์ค์ ๊ด๋ จ๋ ์ฉ์ด๋ค์ ๋ํด ์ ๋ฆฌํด๋ณด์๋ค.
๊ทธ๋ํฝ์ ๋ฌด์์ผ๊น? ์ํค๋ฐฑ๊ณผ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ค.
๋ค์๋งํด, ๊ทธ๋ํฝ์ด๋ ์ง๋, ์ฌ์ง, ๋์์ธ ๋ฐ ํจํด, ๊ฐ๊ณ๋, ๋ค์ด์ด๊ทธ๋จ, ๊ฑด์ถ ๋๋ ์์ง๋์ด๋ง ์ฒญ์ฌ์ง, ๋ง๋ ์ฐจํธ ๋ฐ ์ํ ์ฐจํธ, ํ์ดํฌ๊ทธ๋ํผ, ํ๋ก๋, ๋ผ์ธ ์ํธ, ํ๋ก์ฐจํธ ๋ฐ ๊ธฐํ ์ฌ๋ฌ ์ด๋ฏธ์ง ํ์ ๋ฑ ๋ชจ๋ ํ๋ฉด์ ํ์๋๋ ์๊ฐ์ ํํ๋ค์ ์๋ฏธํ๋ฉฐ, ์ฐ๋ฆฌ๊ฐ ์น์ ํตํด์ ๋ณด๋ ๊ฒ, ์คํฌ๋ฆฐ์ ํตํด์ ๋ณด๋ ๊ฒ ๋ชจ๋ ๋์งํธ๋ก ๋ง๋ค์ด์ง ๊ทธ๋ํฝ์ด๋ผ๊ณ ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์น์ ๊ฒฝ์ฐ์๋ ์น ํ์ด์ง ๋ด๋ถ์ ์๋ ํ
์คํธ, ๋ฒํผ, ์บ๋ฒ์ค ๋ฑ ๋ชจ๋ DOM ์๋ฆฌ๋จผํธ๋ค์ ์ ๋ณด๋ค์ ์ํด ์๊ฐ์ ์ผ๋ก ๋ ๋๋ง
๋ ๊ทธ๋ํฝ๋ค์ด๋ฉฐ, ์คํฌ๋ฆฝํธ ์ธ์ด์ ์์ง์ ๋ฐ๋ฌ, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ๊ธฐ์ , ์๋ฃจ์
์ ๋ฑ์ฅ์ผ๋ก ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๊ทธ๋ํฝ์ ์ ๋ณด๋ค ์ฝ๊ณ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๊ฒ ๋์๋ค.
๋ ๋๋ง : ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ ๋๋ ์ด๋ค์ ๋ชจ์๋์ ์ฅ๋ฉด์ธ ์ฌ ํ์ผ(scene file)๋ก๋ถํฐ
์์
์ ๋ง๋ค์ด๋ด๋ ๊ณผ์
์์์ ๋น์ ๊ตด์ ์ด๋ ๋ฐ์ฌ ๋ฑ์ ์ํ์ฌ ์ด๋ฃจ์ด์ง ๋ฌผ์ฒด์ ์(ๅ)์ ์๋ฏธํ๋ฉฐ, ๊ทผ๋์๋ ๋์์(video)๋ผ๋ ์๋ฏธ๋ก ์ฐ์ด๊ณ ์์ง๋ง picture, image๊ฐ ๋ง๋ ์๋ฏธ์ด๋ค.
๋ ๋๋ง์ ์ ์๋ ์์์ ์ธ๊ธํ๋ฏ์ด, ์์์ ๋ง๋ค์ด๋ด๋ ๊ณผ์ ์ ๋งํ๋ค. ์๋ฅผ๋ค์ด, ๋์์,์ฌ์ง ํธ์ง ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ, ์ฌ๊ฐ๊ณตํ ๊ทธ๋ํฝ์ ์ค์ ํ์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ ์๋ฏธํ๊ณ ์น์ ๊ฒฝ์ฐ DOM ์ฝํ ์ธ ๋ค์ HTML๊ณผ CSS๋ฅผ ํ์ฑํ์ฌ ํ๋ฉด์ ํ์๋ ๊ณผ์ ์ ์๋ฏธํ๋ค.
๊ทธ๋ผ ์น์์์ ๋ ๋๋ง์ ์ด๋ค ๊ณผ์ /์๋ฆฌ๋ก ์ผ์ด๋ ๊น?
๋ธ๋ผ์ฐ์ ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋๋ง์์ง์ด ๋ด์ฅ๋์ด ์์ด์, ์ ๋ฌ ๋ฐ์ HTML, XML ํ์ผ์ ํ์ฑํ๊ณ , DOMํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ณ CSS์ ํจ๊ป Renderํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ค์, ํ๋ฉด์ ๊ทธ๋ ค์ค๋ค.
๐ webkit ๋ ๋๋ง ์์ง์ ๊ตฌ์กฐ
๊ทธ๋ฆฌ๊ณ ๋ธ๋ผ์ฐ์ ํ๋ซํผ์ด ๋ค์ํ๋ฏ, ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ฌ์ฉํ๋ ๋ ๋๋ง ์์ง ๋ํ ๋ค์ํ๋ค.
ํฌ๋กฌ์ ๊ฒฝ์ฐ, โWebKit์ด ์ฌ๋ฌ ์ํคํ ์ฒ๋ฅผ ์ง์ํ๋ฉด์ WebKit๊ณผ ํฌ๋ก๋ฏธ์ ํ๋ก์ ํธ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๊ณ , ์ด์ ๋ฐ๋ผ ์ง๋จ ํ์ ์๋๊ฐ ์ ํ๋์๋คโ๋ผ๋ ์ด์ ๋ก 2015๋ ๋ถํฐ WebKit์ ๋์ฒดํ๋ Blink๋ผ๋ WebKit์์ ํ์๋ ์๋ก์ด ์ฌ ๋ ๋๋ง ์์ง์ ์ฌ์ฉํ๊ธฐ ์์ํ๋ค.
โ์ค๋๋ ์น ์ฌ์ฉ์๋ ๋ฐฉ๋ฌธํ๋ ํ์ด์ง๊ฐ ๋ํํ์ด๊ณ ์ํํ ์๋ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋ฏ๋ก ๊ฐ๋ฐ์๋ ์ฌ๊ธฐ์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ์ง์คํด์ผ ํฉ๋๋ค. ํ์ด์ง๋ ๋น ๋ฅด๊ฒ ๋ก๋๋ ๋ฟ๋ง ์๋๋ผ ์ํํ ์คํ๋์ด์ผ ํฉ๋๋ค. ๊ฐ๋ฒผ์ด ์๊ฐ๋ฝ ๋์๋ง์ผ๋ก ๋น ๋ฅด๊ฒ ์คํฌ๋กคํ ์ ์๊ณ ์ ๋๋ฉ์ด์ ๊ณผ ์ํธ์์ฉ์ด ๋งค๋๋ฌ์์ผ ํฉ๋๋ค. ์ฑ๋ฅ์ด ์ฐ์ํ ์ฌ์ดํธ์ ์ฑ์ ์์ฑํ๋ ค๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ HTML, ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ CSS๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๊ณ ์์ฑํ๋ ์ฝ๋์ ํฌํจ๋ ํ์ฌ ์ฝ๋๊ฐ ์ต๋ํ ํจ์จ์ ์ผ๋ก ์คํ๋๋๋ก ๋ณด์ฅํด์ผ ํฉ๋๋ค.โ - Paul Lewis
๋ธ๋ผ์ฐ์ ์์ง์ ์ฑ๋ฅ์ด ์ข์์ก๋ค๊ณ ํด๋ ์ฌ์ฉ์์๊ฒ ์ข๋ ๋งค๋๋ฌ์ด, ๋ง์กฑ์ค๋ฌ์ด ๊ฒฝํ์ ์ ๊ณตํ๋ ค๋ฉด ๋ ๋๋ง ์ต์ ํ ๊ณผ์ ์ด ํ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋๋ง ์ต์ ํ๋ฅผ ์ํด์๋ ๋ ๋๋ง ๊ณผ์ ์ ์ ํํ๊ฒ ์ดํดํ๋ ๊ฒ์ด ํ์ํ๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง๋ฅผ ๋ ๋๋งํ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
๐ ๋ฐ์ดํธ โ ๋ฌธ์ โ ํ ํฐ โ ๋ ธ๋ โ ๊ฐ์ฒด ๋ชจ๋ธ(DOM)
DOM TREE ์์ฑ๊ณผ ๋น์ทํ ๋ฐฉ์์ผ๋ก CSS ์คํ์ผ์ํธ๋ฅผ ์ฐธ์กฐํด์ CSSOM TREE๋ฅผ ์์ฑ
DOM TREE์ CSSOM TREE๋ ์๋ก ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด์ด๋ฉฐ, DOM TREE๋ ์ฝํ ์ธ ๋ฅผ ์ค๋ช ํ๊ณ , CSSOM TREE๋ ๋ฌธ์์ ์ ์ฉ๋์ด์ผ ํ๋ ์คํ์ผ ๊ท์น์ ์ค๋ช ํ๋ค.
๋ ๋๋ง ์ต์ ํ๋ ์ด๋ป๊ฒ ํ ์ ์์๊น? ๋ ๋๋ง ์ต์ ํ๋ฅผ ์ํด์๋ ๋ ์ด์์ (Reflow) ํ๋ก์ธ์ค์ ํ์ธํธ (Repaint) ํ๋ก์ธ์ค ๊ณผ์ ์ ์ต์ํํด์ฃผ๋ฉด ๋๋ค.
Reflow๋ฅผ ๋ฐ์์ํค๋ CSS ์์ฑ(left, top, margin, padding, border, width, height, ๋ฑ..)๋ณด๋ค transform๊ณผ ๊ฐ์ Repaint๋ง ๋ฐ์์ํค๋ ์์ฑ ์ฌ์ฉํ๊ธฐ
๋ํ visibilty: invisible
๋ ๋ ์ด์์ ๊ณต๊ฐ์ ์ฐจ์งํ์ง๋ง display: none
์ ๋ ์ด์์ ๊ณต๊ฐ์ ์ฐจ์งํ์ง ์์ rendering tree ํ์ฑ์ ์ ์ธ๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ํด ํ์๋ฅผ ์ฐ๋ ๊ฒ์ด ์ข๋ค.
์๋จ์ ์๋ฆฌ๋จผํธ ์์ฑ ๋ณ๊ฒฝ์ ํ์ ๋ชจ๋ ์๋ฆฌ๋จผํธ์๋ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ์ตํ์ ์๋ฆฌ๋จผํธ์ ์คํ์ผ ๋ณ๊ฒฝํ๊ธฐ
DOMT TREE์ ๊น์ด๋ฅผ ์ต์ํํ์ฌ ํ์์๊ฐ์ ์ค์ด๊ฑฐ๋ position: absolute
๋๋ position: fixed
๋ฅผ ์ฌ์ฉํ์ฌ ์ํฅ ๋ฐ๋ ์๋ฆฌ๋จผํธ ์ ํํ๊ธฐ
ํ ํ๋ ์ ์ฒ๋ฆฌ๊ฐ 16ms(60fps)
๋ด๋ก ์๋ฃ๋์ด์ผ ๋ ๋๋ง ์ ๋๊ธฐ๋ ํ์ ์์ด ์์ฐ์ค๋ฌ์ด ๋ ๋๋ง์ ๋ง๋ค์ด๋ผ ์ ์๊ณ , ์ ๋๋ฉ์ด์
์ JavaScript๋ณด๋ค CSS์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ง์ง๋ง์ผ๋ก ๊ทธ๋ํฝ๊ณผ ๊ด๋ จ๋ ์ฌ๋ฌ ์ฉ์ด๋ค์ด ์๋๋ฐ ์ด๋ฅผ ์ ๋ฆฌํ๊ณ ๋ง๋ฌด๋ฆฌํ๋ คํ๋ค.
์ฐธ๊ณ ์๋ฃ๋ โค๏ธWeb Graphics Archiveโค๏ธ ์ ์ ๋ก๋ ๋์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค.