๋ธ๋ผ์ฐ์ ๋ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ? ์ ๋ํด์ ํ์คํ๊ฒ ์ง๊ณ ๋์ด๊ฐ๊ณ ์ํ๋ค.
์กฐ๊ธ ๋ ๊ตฌ์ฒด์ ์ผ๋ก WHY/WHAT ๊ถ๊ธํ ๊ฑด ์ ์ ํ์๐ฌ ์ด๋ ๊ฒ ํ์ํ๋ค.
๋ด๊ฐ ์ฌ์ฉํ๋ ์ธํฐ๋ท์์ ์น ์๋ฒ ์์ ๋ชจ๋ ๋ด์ฉ์ ๋ณผ ์ ์๊ณ , ๋ฌธ์ ๊ฒ์์ ๋์์ฃผ๋ ์์ฉ ํ๋ก๊ทธ๋จ
์ฐ๋ฆฌ๊ฐ ์ธํฐ๋ท์ผ๋ก ์ ๋ณด๋ฅผ ์ฐพ์ ๋, ๋ค์ด๋ฒ๋ ๋ค์ ๊ฐ์ ์ฌ์ดํธ์ ๋ค์ด๊ฐ๊ณค ํ๋ค.
๊ทธ๋ฐ ์ฌ์ดํธ๋ค์ ๋ค์ด๊ฐ ์ ์๊ฒ ๋์์ฃผ๋ ํ๋ก๊ทธ๋จ, ๊ทธ๊ฒ ๋ฐ๋ก '๋ธ๋ผ์ฐ์ ' ๋๋ '์น ๋ธ๋ผ์ฐ์ '์ด๋ค.
"์ ๋ ํ์ฌ ๊ตฌ๊ธ ํฌ๋กฌ(์น ๋ธ๋ผ์ฐ์ )์ ์ฌ์ฉํ์ฌ ์ด ๊ฒ์๋ฌผ์ ์์ฑํ๊ณ ์์ต๋๋ค!"
๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ๊ธฐ๋ฅ์ ์ฌ์ฉ์๊ฐ ์ ํํ ์์์ ์๋ฒ์ ์์ฒญํ๊ณ ๋ธ๋ผ์ฐ์ ์ ํ์ํ๋ ๊ฒ์ด๋ค.
์์์ ์ฃผ์๋ URL์ ์ํด ๊ฒฐ์ ๋๋ฉฐ, ์์์ ๋ณดํต HTML ๋ฌธ์์ง๋ง PDF๋ ์ด๋ฏธ์ง ๋๋ ๋ค๋ฅธ ํํ์ผ ์ ์๋ค.
์ฃผ์ ํ์์ค, ์ด์ /๋ค์ ๋ฒํผ, ๋ถ๋งํฌ ๋ฉ๋ด ๋ฑ. ์์ฒญํ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฐฝ์ ์ ์ธํ ๋๋จธ์ง ๋ชจ๋ ๋ถ๋ถ์ด๋ค.
๋ธ๋ผ์ฐ์ ์์ง(browser engine)์ ์น ๋ธ๋ผ์ฐ์ ์ ํต์ฌ ๋ถ๋ถ์ผ๋ก์ ์น ํ์ด์ง๋ฅผ ์๊ฐ์ ํํ๋ก ๋ณํํ๋ ์ญํ
โ Blink Engine (Chrome, Opera, Samsung Internet, MS Edge, Whale, Brave)
โก WebKit Engine (Safari)
โข Servo Engine (Firefox), Gecko Engine (Firefox)
์์ฒญํ ์ฝํ ์ธ ๋ฅผ ํ์. ์๋ฅผ ๋ค์ด HTML์ ์์ฒญํ๋ฉด HTML๊ณผ CSS๋ฅผ ํ์ฑํ์ฌ ํ๋ฉด์ ํ์ํจ.
๋ ๋๋ง ์์ง์ ์ ์ฒด HTML ํ์ฑ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ์ ๋ถ๋ถ๋ถํฐ ๋ฐฐ์น์ ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ์์ํด ์ฌ์ฉ์์๊ฒ ๋น ๋ฅธ ํ์ด์ง ํ์๋ฅผ ์ ๊ณตํ๋ค.
โ ํ์ฑ๐ฌ
๋ฌธ์ ํ์ฑ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋ ๊ตฌ์กฐ๋ก ๋ณํํ๋ ๊ฒ์ ์๋ฏธ
ํ์ฑ ๊ฒฐ๊ณผ๋ ๋ณดํต ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ๋ ธ๋ ํธ๋ฆฌ๐ฌ์ธ๋ฐ ํ์ค ํธ๋ฆฌ(parse tree) ๋๋ ๋ฌธ๋ฒ ํธ๋ฆฌ(syntax tree)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋ ๊ตฌ์กฐ ๋ณํ
: ์์ฑ๋ ํ
์คํธ ๋ฌธ์๋ฅผ ์ฝ์ด ๋ค์ฌ ์คํํ๊ธฐ ์ํด ํ
์คํธ ๋ฌธ์์ ๋ฌธ์์ด์ ํ ํฐ์ผ๋ก ๋ถํด(์ดํ ๋ถ์)ํ๊ณ , ํ ํฐ์ ๋ฌธ๋ฒ์ ์๋ฏธ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ์ฌ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์๋ฃ๊ตฌ์กฐ์ธ ํ์ค ํธ๋ฆฌparse tree/syntax tree๋ฅผ ์์ฑํ๋ ์ผ๋ จ์ ๊ณผ์
โก DOM ํธ๋ฆฌ๐ฌ
DOM ํธ๋ฆฌ๋ DOM์ ๊ตฌ์ฑ ์์๋ค, ์ฆ HTML ๋ฌธ์์ ๊ฐ ์์๋ค์ ๋ ธ๋(node)๐ฌ๋ก ํํํ ๊ฒ์ผ๋ก์, ์ด๋ค ๋ ธ๋๊ฐ ๋ถ์ ๊ด๊ณ๋ก ํธ๋ฆฌ ํํ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ์ ๋งํ๋ค. DOM ํธ๋ฆฌ Node ํธ๋ฆฌ์ ํ ํํ์ด๋ค.
โข ๋ ธ๋(node)๐ฌ
์น ๋ธ๋ผ์ฐ์ ๊ฐ HTML ๋ฌธ์๋ฅผ ์ฝ์ด ๋ค์ด๋ฉด ์์ ๊ทธ๋ฆผ์ฒ๋ผ Document ๊ฐ์ฒด๋ก ์์ํ๋ DOM ํธ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง๋ค. ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ์์๋ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ์๋ ๊ฐ์ฒด ํ๋๋ฅผ ๋ ธ๋(Node)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
โฃ ๋
ธ๋ ํธ๋ฆฌ๐ฌ
๋ ธ๋๋ค์ ์งํฉ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๋ชจ๋ ๋ ธ๋๋ ์๋ก ๊ณ์ธต์ ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๋ค.
โค ๋ ๋ ํธ๋ฆฌ๐ฌ
๋ ๋ ํธ๋ฆฌ๋ DOM๊ณผ CSSOM์ ํฉํ ํ ์ต์ข ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ํ๊ธฐ๋ ๊ฒ๋ค๋ง ๋ ๋ ํธ๋ฆฌ์ ์ ๋ณ ๋์ด ์์ฑ
โ ๋ธ๋ผ์ฐ์ ์์ฒญ์ ์ํด ์๋ฒ๊ฐ ์๋ตํ HTML ๋ฌธ์๋ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง ์์ํ ํ ์คํธ์ด๋ค.
๋ธ๋ผ์ฐ์ ๐ฅ๏ธ : ์๋ฒ์ผ HTML ๋ฌธ์ ์ข ์ค๋ด
์๋ฒ ๐: ๊ทผ๋ฐ ๊ทธ๊ฑฐ ์์ ๊ธ์ ๋์ด์ด์ผ. ๋ ๋๋งํ๋ ค๋ฉด ์ด๊ฑธ ์ข ์๋ฃ๊ตฌ์กฐ๋ก ๋ฐ๊ฟ์ ์จ์ผํด.
โก ์์ํ ํ ์คํธ์ธ HTML ๋ฌธ์๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์๊ฐ์ ์ธ ํฝ์ ๋ก ๋ ๋๋งํ๋ ค๋ฉด
HTML ๋ฌธ์๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ(DOM)๋ก ๋ณํํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด์ผํ๋ค.
๋ธ๋ผ์ฐ์ ๐ฅ๏ธ : ใ
ใ
, ์ด๊ฑธ DOM ํธ๋ฆฌ๋ก ๋ง๋ค์ด์ผ๊ฒ ๋ค. ๊ฐ ํ๊ทธ๋ฅผ ๋
ธ๋๋ก ์๊ฐํ๊ณ , ๊ทธ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ฐ๊ฒฐํ๋ฉด ๋ ๋ฏ
์๋ฒ ๐: ใ
ใ
, ๊ทธ๋ฆฌ๊ณ ๊ทธ DOM ํธ๋ฆฌ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค์ ํฝ์
๋ก ๋ง๋ค์ด๋ด๊ฒ ํด
[โ ๐๏ธ] : HTML์ ์ฒ์๋ถํฐ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ํ์ฑํ์ฌ DOM์ ์์ฑํด ๋๊ฐ๋ค.
[โก โธ๏ธ] : ์ด์ฒ๋ผ ๋ ๋๋ง ์์ง์ DOM์ ์์ฑํด ๋๊ฐ๋ค๊ฐ CSS๋ฅผ ๋ก๋ํ๋ linkํ๊ทธ๋ styleํ๊ทธ๋ฅผ ๋ง๋๋ฉด DOM ์์ฑ์ ์ผ์ ์ค๋จํ๋ค.
[โข ๐] : link ํ๊ทธ์ href ์ดํธ๋ฆฌ๋ทฐํธ์ ์ง์ ๋ CSS ํ์ผ์ ์๋ฒ์ ์์ฒญํ์ฌ ๋ก๋ํ CSS ํ์ผ์ด๋ styleํ๊ทธ ๋ด์ CSS๋ฅผ HTML๊ณผ ๋์ผํ ํ์ฑ ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ ํด์ํ์ฌ CSSOM์ ์์ฑํ๋ค.
[โฃ ๐] : ์ดํ CSS ํ์ฑ์ ์๋ฃํ๋ฉด HTML ํ์ฑ์ด ์ค๋จ๋ ์ง์ ๋ถํฐ ๋ค์ HTML์ ํ์ฑํ๊ธฐ ์์ํ์ฌ DOM ์์ฑ์ ์ฌ๊ฐํ๋ค.
๐๏ธ
๋ ๋๋ง ์์ง: HTML ๋ฌธ์ ๋ฐ์์์ด.
HTML ๋ฌธ์: ใ
ใ
, ๋ ์ฒ์๋ถํฐ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ํ์ฑํ๋ฉด์ DOM ๋ง๋ค์ด๋๊ฐ๊ณ ์์ด.
โธ๏ธ
๋ ๋๋ง ์์ง: ใ
ใ
, ๊ทธ๋ฌ๋ค๊ฐ CSS ๊ด๋ จ๋ ๊ฑฐ ๋ง๋๋ฉด ์๋ ค์ค.
HTML ๋ฌธ์: ์๊ฒ ์ด. ์ฌ๊ธฐ์ link ํ๊ทธ๋ style ํ๊ทธ ๋ง๋๋ฉด ์ผ๋จ ์ค๋จํ๊ณ ๋งํด์ค๊ฒ.
๐
HTML ๋ฌธ์: ๋ link ํ๊ทธ๋ style ํ๊ทธ ๋ง๋จ.
๋ ๋๋ง ์์ง: ใ
ใ
, HTML ํ์ฑ ์ค๋จํจ.
HTML ๋ฌธ์: CSS๋ฅผ ํ์ฑํ๊ณ CSSOM ์์ฑ ๋คํ์.
๐
๋ ๋๋ง ์์ง: ใ
ใ
, ๋ค์ HTML ํ์ฑํ ๊ฒ.
โ ๋ ๋๋ง ํธ๋ฆฌ ๊ตฌ์ถ
DOM ํธ๋ฆฌ์ ๋ฃจํธ์์๋ถํฐ ์์ํ์ฌ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋๋ฐ ํ์ํ ๋ ธ๋๋ง ๋จ๊ธด๋ค.
ํ๋ฉด์ ํ์๋๋ ๋ชจ๋ ๋ ธ๋์ ์ปจํ ์ธ ๋ฐ ์คํ์ผ ์ ๋ณด๋ค์ ํฌํจํ๋ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ง ๋ ๋๋ง ํธ๋ฆฌ๊ฐ ์ต์ข ์ ์ผ๋ก ๊ตฌ์ถ๋๋ค.
โก ๋ ๋๋ง ํธ๋ฆฌ ๋ฐฐ์น LAYOUT
์ฌ์ฉ์์ ๋ทฐํฌํธ ๊ธฐ์ค์ผ๋ก ๋ ๋๋ง ํธ๋ฆฌ๊ฐ ๊ทธ๋ ค์ง ์์น์ ํฌ๊ธฐ๋ค์ ๊ณ์ฐํ๋ ๋จ๊ณ์ด๋ค.
ํ์ด์ง์์ ๊ฐ ๊ฐ์ฒด์ ์ ํํ ํฌ๊ธฐ์ ์์น๋ฅผ ํ์
ํ๊ธฐ ์ํด ๋ค์ ๋ ๋๋ง ํธ๋ฆฌ์ ๋ฃจํธ์์๋ถํฐ ๊ณ์ฐ์ ๋ค์ด๊ฐ๋ค.
๊ฐ ๋
ธ๋๋ค์ ์ ํํ ์์น์ ํฌ๊ธฐ๊ฐ ๊ณ์ฐ๋์ด ๋ ์ด์์์ด ์๋ฃ๋๋ฉด Paint Setup ๋ฐ Paint ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค.
โข ๋ ๋๋ง ํธ๋ฆฌ ๊ทธ๋ฆฌ๊ธฐ PAINT
๋ ์ด์์์ ํตํด ๋ ๋๋ง ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๊ฐ ์ค์ง์ ์ผ๋ก ์ฐจ์งํ๋ ๊ฐ์ ๊ณ์ฐํ๊ณ ๋ ธ๋๋ค์ ๊ธฐํํ์ ํํ๋ฅผ ๊ตฌํ๋ค.
์ด๋ฅผ ํ๋ฉด์ ๊ทธ๋ ค์ ์ฌ์ฉ์์๊ฒ ํ์ํ๋ ์์ ์ ํ์ธํ ๋๋ ๋์คํฐํ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด ๊ณผ์ ์์ ์คํ์ผ์ด ๋ณต์กํ ์๋ก ํ์ธํ
์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋์ด๋๋ค.
์ด๋ ๊ฒ ๋ ๋๋ง ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ฉฐ ๋ง์ฝ DOM์ด๋ CSSOM์ด ์์ ๋๋ฉด ํ๋ฉด์ ๋ค์ ๋ ๋๋งํ ํ์๊ฐ ์๋ ํฝ์
์ ํ์
ํ๋ ค๋ฉด, ์ ๋ถ ์ฒ์๋ถํฐ ๋ฐ๋ณตํด์ผํ๋ค.
HTTP ์์ฒญ๊ณผ ๊ฐ์ ๋คํธ์ํฌ ํธ์ถ์ ์ฌ์ฉ๋จ. ์ด๊ฒ์ ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ ์ธํฐํ์ด์ค์ด๊ณ ๊ฐ ํ๋ซํผ ํ๋ถ์์ ์คํ
์ฝค๋ณด ๋ฐ์ค์ ์ฐฝ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ์ฅ์น๋ฅผ ๊ทธ๋ฆผ. ํ๋ซํผ์์ ๋ช ์ํ์ง ์์ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค๋ก์, OS ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ฒด๊ณ๋ฅผ ์ฌ์ฉ
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํด์ํ๊ณ ์คํ
์ด ๋ถ๋ถ์ ์๋ฃ๋ฅผ ์ ์ฅํ๋ ๊ณ์ธต์ด๋ค. ์ฟ ํค๋ฅผ ์ ์ฅํ๋ ๊ฒ๊ณผ ๊ฐ์ด ๋ชจ๋ ์ข ๋ฅ์ ์์์ ํ๋ ๋์คํฌ์ ์ ์ฅํ ํ์๊ฐ ์๋ค. HTML5 ๋ช ์ธ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ๋ '์น ๋ฐ์ดํฐ ๋ฒ ์ด์ค'๊ฐ ์ ์๋์ด ์๋ค.
์ฐธ๊ณ ๋ธ๋ก๊ทธ :
์ธ์ฐ๋ ์์ผ๋ก ์ดํดํ์๋๋ฐ ์์ธํ ๊ธ ๋๋ถ์ ์ข ๋ ๊น๊ฒ ์ดํดํ์ต๋๋ค ์ ๋ดค์ต๋๋ค!