๋ธ๋ผ์ฐ์ ๊ฐ ์น ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ฌ ๋๋ ๋ ๋๋ง ์์ง์ด๋ผ๋ ์ํํธ์จ์ด ๋ชจ๋์ด ์ฌ์ฉ๋๋ค. ๋ ๋๋ง ์์ง์ HTML, CSS, JavaScript์ ๊ฐ์ ์น ํ์ด์ง์ ์์๋ค์ ํ์ฑํ๊ณ , ์ด๋ฅผ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ์๊ฐ์ ์ผ๋ก ํ์ํ๋ ์ญํ ์ ํ๋ค.
์ฌ์ง๊ณผ ๊ฐ์ด ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ ๋ค์ํ๋ค.
User Interface(UI)๋ ์์ฒญํ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ๋ฉด ์ธ์ ๋ชจ๋ ๊ฒ์ด๋ค. ์ด์ /๋ค์ ๋ฒํผ, ์๋ก๊ณ ์นจ, ์ฃผ์์ฐฝ, ๋ถ๋งํฌ, ํ๊ฒฝ์ค์ ๊ณผ ๊ฐ์ UI๊ฐ ์๋ค.
Browser engine์ User Interface์ Rendering engine ์ฌ์ด์์ ํ๋ํฉ๋๋ค. ์๋ฅผ๋ค์ด, User Interface์ ์๋ ์๋ก๊ณ ์นจ์ ๋๋ ๋ค๋ฉด, Browser engine์ ์ด๋ฅผ ์ดํดํ๊ณ ์๋ก๊ณ ์นจ ๋ช ๋ น์ ์ํํ๋ค.
โจ Rendering engine์ HTML, CSS, JavaScript์ ๊ฐ์ ์น ํ์ด์ง์ ์์๋ค์ ํ์ฑํ๊ณ , ์ด๋ฅผ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ์๊ฐ์ ์ผ๋ก ํ์ํ๋ ์ญํ ์ ํ๋ค.
Networking์ HTTP/HTTPS ํ๋กํ ์ฝ์ ์ด์ฉํ์ฌ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋ ์ฌ์ฉํ๋ ๋ ์ด์ด๋ค.
JavaScript Interpreter์ JS๋ฅผ ํด์ํ๊ณ ์ฝ๋ ์ญํ ์ ํ๋ค. ๊ฐ์ฅ ์ ๋ช ํ JS ํด์ ์์ง์ผ๋ก๋ V8์ด ์๋ค.
UI Backend๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋์ํ๊ณ ์๋ ์ด์์ฒด์ ์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ฅด๋ UI๋ค์ ์ฒ๋ฆฌํ๋ค. alert๊ฐ ์ด์์ฒด์ ๋ณ๋ก ๋ค๋ฅด๊ฒ ๋์ํ๋ ๊ฒ์ด ๊ทธ ์๋ค.
Data Persistence๋ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ์ ์ ์ฅํ๊ธฐ ์ํ ๋ ์ด์ด๋ก, ์ฟ ํค, ๋ก์ปฌ ์คํ ๋ฆฌ์ง, SQL ๋ฑ์ ์ ๊ทผํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ฌ์ฉ๋๋ค.
์๋ฒ๋ก HTTP ์์ฒญ ํ, ์๋ต์ ๋ฐ์ผ๋ฉด ์ฐ๋ฆฌ๋ ๋น๋ก์ ์นํ์ด์ง์ ์ ์ํ์ฌ HTML ๋ฌธ์๋ฅผ ์ป์ด์ฌ ์ ์๋ค. ์ด๋ Rendering engine์ ์์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณ HTML ๋ฌธ์๋ฅผ ํด์ํ๋ค. (+ JS๋ JavaScript Interpreter์์ ํด์!)
๐ค ํ์ฑ์ด ๋ญ๋ฐ์?
ํ์ฑ์ ํ ํฐํ๋ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๋ ๊ฒ์ด๋ค. ํ ํฐํ๋ ์๋ฏธ๊ฐ ์๋ ์ต์ ๋จ์๋ก ์ฝ๋๋ฅผ ์ชผ๊ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์๋ฅผ๋ค์ด
<p></p>
ํ๊ทธ๋ฅผ ํ ํฐํ ํ๋ฉด,'<', 'p', '>','<', '/', 'p', '>',
๊ฐ ๋๋ค. ์ด๋ ๊ฒ ์ชผ๊ฐ์ด ๋ฌธ๋ฒ์ ๋ฐ๋ฅด๋์ง ํ์ธํ๋ ๊ฒ์ด ํ์ฑ์ด๋ค.
๋ธ๋ผ์ฐ์ ๋ HTML ๋ฌธ์๋ฅผ ํ์ฑํ์ฌ DOM ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค. ์ด ๊ณผ์ ์์ HTML ํ๊ทธ์ ์ข ๋ฅ์ ์์ฑ์ ๋ถ์ํ๋ค.
๋ธ๋ผ์ฐ์ ๋ CSS ๋ฌธ์๋ฅผ ํ์ฑํ๊ณ CSSOM ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค. ์ผ๋ฐ์ ์ผ๋ก CSS ์ฝ๋๊ฐ HTML ์ฝ๋ ๋ด์ ์ฝ์ ๋์ด ์๊ธฐ ๋๋ฌธ์, HTML์ ํ์ฑํ๋ ๋์ค์ CSS ํ์ฑ์ด ์์๋๋ค. ์ด ๊ณผ์ ์์ CSS ์คํ์ผ, ์ ํ์, ๊ท์น์ ๋ถ์ํ๊ณ ์ฐ์ ์์๋ฅผ ๊ณ์ฐํ๋ค.
๋ ๋ํธ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ฉด์ ๋ํ๋๋ ์์๋ค์ ๊ฒฐ์ ํ๋ ํธ๋ฆฌ์ด๋ค. ์ด๋ ํ ์์๋ค์ด ๋ณด์ฌ์ผ ํ๋์ง, ์ด๋ ํ ์คํ์ผ์ด ์ ์ฉ์ด ๋์ด์ผ ํ๋์ง, ์ด๋ค ์์๋ก ๋ํ๋ด์ผ ํ๋์ง๋ฅผ ๋ช ์ธํ๋ค.
๋ ๋ํธ๋ฆฌ๋ DOM ํธ๋ฆฌ์ CSSOM ํธ๋ฆฌ๋ฅผ ์กฐํฉํ์ฌ ๋ง๋ค์ด์ง๊ณ , ์ด๋ ํ๋ฉด์ ๊ทธ๋ ค์ง์ง ์๋ ์์๋ค์ ํธ๋ฆฌ์ ๋ํ๋์ง ์๋๋ค. <script> ๋๋ display: none
๊ฐ์ ์์๋ค์ ๋งํ๋ค.
๋ ๋ํธ๋ฆฌ ๊ตฌ์ฑ์ด ๋๋๋ฉด ๋ ์ด์์ ๋จ๊ณ๋ก ์ด์ด์ง๋ค.
๋ ์ด์์ ๋จ๊ณ์์๋ ๋ ๋ํธ๋ฆฌ์ ๊ณ์ฐ๋์ง ์์๋ ๋ ธ๋๋ค์ ํฌ๊ธฐ์ ์์น ๊ฐ์ ์ ๋ณด๋ฅผ ๊ณ์ฐํ์ฌ ์ขํ์ ๋ํ๋ธ๋ค. ์ด ๊ณผ์ ์์ ๋ธ๋ผ์ฐ์ ๋ ํ๋ฉด ์ ์ฒด์ ํฌ๊ธฐ๋ ์คํฌ๋กค ์์น ๋ฑ์ ์์๋ ๊ณ ๋ คํ๋ค.
๋ง์ง๋ง ๋จ๊ณ๋ ํ์ธํธ์ด๋ค. ๋ ์ด์์ ๋จ๊ณ๋ฅผ ํตํด ํ๋ฉด์ ๋ฐฐ์น๋ ์์๋ค์๊ฒ ์์ ์ ํ๊ณ ๋ ์ด์ด์ ์์น๋ฅผ ๊ฒฐ์ ํ๋ค.
๋ธ๋ผ์ฐ์ ์ ์คํ์ผ์ ํด๋ ์ถํ์ ์ด๋ค ์์์ ์คํ์ผ์ ์์ ํ๋ ๋ฑ ๋ฌ๋ผ์ง๋ ์ผ์ด ์๊ธธ ๊ฒ์ด๋ค. ์คํ์ผ์ด๋ DOM ๋ด๋ถ๋ฅผ ๋ณ๊ฒฝํ๋ DOM API๊ฐ ์ฌ์ฉ๋๋ค๋ฉด, DOM์ ์ด๋ ๊ฒ ํ๋ํ๋ค.
- ๋ฌด์ธ๊ฐ ๋ณ๊ฒฝ๋์์์ ๊ฐ์ง
- Rendering engine ๋์ ๊ณผ์ ๋ค์ ์ํ
- ๋ฆฌ๋ ๋๋ง ์งํ
์ด๋ฌํ ๊ณผ์ ์์ Reflow, Repaint ๋ฐ์ !!
=> Reflow์ Repaint๋ ์์ ์ฌ์ฉํ์ง ์์ ์๋ ์์ผ๋ฏ๋ก ์ต์ํ ํ๋ ๊ฒ์ด ์ข๋ค.
๋ธ๋ผ์ฐ์ ๋ ๋๋ง์ ๊ณผ์ ์ ํ๊ฒฝ์ ๋ฐ๋ผ ์๋๊ฐ ๋ค๋ฅด๊ฒ ๋ํ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์น ๊ฐ๋ฐ์๋ ๋ ๋๋ง ๊ณผ์ ์ ์ต์ ํ ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํด์ผ๊ฒ ๋ค.