[WEB] ๐ ์ฃผ์์ฐฝ์ "www.naver.com"๋ฅผ ์ ๋ ฅํ๋ฉด ์ด๋ค ์ผ์ด ์๊ธธ๊น?
๐ ๋ธ๋ผ์ฐ์ ๊ตฌ์กฐ
์ฌ์ฉ์ ์ธํฐํ์ด์ค
- ์นํ์ด์ง ์๋จ๋ฐ์ ์์นํ ๋ค๋ก๊ฐ๊ธฐ, ์์ผ๋ก๊ฐ๊ธฐ, ์๋ก๊ณ ์นจ ๋ฑ๋ฑ,๋ง ๊ทธ๋๋ก ์ฌ์ฉ์์ ์ํธ ์์ฉํ๋ ์ธํฐํ์ด์ค๋ฅผ ๋ปํ๋ค
๋ธ๋ผ์ฐ์ ์์ง
- ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ฅด๋ฉด ๋ ๋๋ง ์์ง์๊ฒโ์ฌ์ฉ์๊ฐ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ ์ผ๋ ์ด์ ์ ์ฌ์ดํธ๋ฅผ ๊ฐ์ ธ์์ ๊ทธ๋ ค์ค!โ๋ผ๊ณ ์๋ ค์ฃผ๋ ์ญํ ์ ํจ
๐ ๋ ๋๋ง ์์ง
- ์น์ฌ์ดํธ๋ฅผ ๊ทธ๋ฆฌ๋ ์์ง
ํต์
- ์น ๋ธ๋ผ์ฐ์ ์ ๋คํธ์ํฌ๋ฅผ ๋ด๋น
UI ๋ฐฑ์๋
- ์ฌ์ฉ์ ์ ๋ ฅ, ๋ง์ฐ์ค ์์ง์, ํด๋ฆญ ๋ฑ์ ํธ๋ค๋ง ํ๋ ๊ณณ
์๋ฐ์คํฌ๋ฆฝํธ ํด์๊ธฐ
- JS์ฝ๋๋ฅผ ํด์ํ ๋ ์ฌ์ฉํ๋ JS ์์ง
์๋ฃ ์ ์ฅ์
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณณ์ผ๋ก ๋ก์ปฌ์คํ ๋ฆฌ์ง, ์ธ์ ์คํ ๋ฆฌ์ง ๋ฑ์ด ์ฌ๊ธฐ ์ํ๋ค
ใ ค
๐ ์ฃผ์์ฐฝ์ "naver.com"๋ฅผ ์ ๋ ฅํ๋ฉด ์ด๋ค ์ผ์ด ์๊ธธ๊น?
1. IP ์ฃผ์ ์ฐพ๊ธฐ
์ฌ์ค "www.naver.com"
๋ผ๊ณ ์
๋ ฅํด๋ ๋ธ๋ผ์ฐ์ ๋ ์ฝ์ง ๋ชปํ๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์ค์ ๋ก ์ฝ๋ ๊ฑด IP
์ฃผ์์ด๊ธฐ ๋๋ฌธ์ ํด๋นํ๋ IP
์ฃผ์๋ฅผ ์ฐพ์์ผ ํ๋ค.
๊ทธ๋ผ IP
์ฃผ์๋ ์ด๋ป๊ฒ ์ฐพ์๊น?
DNS์๊ฒ ์ฐพ์๊ฐ(Domain Name System)naver.com์ ํด๋นํ๋ IP๋ฅผ ์ฐพ์ผ๋ฉด DNS์ ํจ๊ป IP์ ๋ง๋ IP ์ฃผ์๋ฅผ ์ฐพ๋๋ค.
์ด ๊ณผ์ ์ด ๋ณต์กํ๊ธฐ ๋๋ฌธ์
DNS cache์ IP ์ฃผ์๋ฅผ ์ ์ฅํด์ ๋ค์์๋ ๊ฑฐ๊ธฐ์์ ๋ฐ๋ก ๊ฐ์ ธ์จ๋ค.
ใ ค
2. ๋ฆฌ์์ค ์์ฒญ
1. ์บ๋ฆญํฐํ
IP
์ฃผ์๋ฅผ ์ฐพ๊ณ ๋๋ฉด ์น์ฌ์ดํธ๋ฅผ ๊ทธ๋ ค์ผ ํ๋ค. ์ด๋, "์๋ฒ์ผ ๋ ์น์ฌ์ดํธ ๊ทธ๋ฆฌ๊ณ ์ถ์๋ฐ HTML
์ข ๋ณด๋ด์ค"ํ๊ณ ์๋ฒ์ ์์ฒญํ๋ฉด ์ฐ๋ฆฌ๊ฐ ์๋ HTML
ํํ์ ํ์ผ์ ์ฃผ๋ ๊ฒ์ด ์๋๋ผ ๋ฐ์ดํธ ์คํธ๋ฆผ ํํ๋ก ์ฃผ๊ธฐ ๋๋ฌธ์ ์ธ์ฝ๋ฉ์ ํด์ผ ํ๋ค.
๋ณดํต
UTF-8 Encoding
๊ฐ์ ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉ์ ํ๋ค.์ฐ๋ฆฌ๊ฐ ๋ณด๋
HTML
ํ์ผ์ ์ฐ๋ฆฌ๊ฐ ์ด ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉ ํ๋ค๊ณ ์๋ ค์ฃผ๋ ๊ฒ.
์ธ์ฝ๋ฉ์ ํ๊ณ ๋๋ฉด ์ด๋ ๊ฒ Document ๋ฌธ์๊ฐ ์๊ธด๋ค.
2. ํ ํฐํ
์์ฑ๋ ํ๊ทธ๋ฅผ ํ๊ธ์ ํ๊ธ์ ์ปดํจํฐ๊ฐ ์ฝ์ผ๋ฉด์ ํ ํฐ์ ๋ง๋ ๋ค.
3. ๋ ธ๋
ํ ํฐ์ Object์ ๊ฐ์ฒด ํํ๋ก ์ฌํด์ํ๋ค.
4. DOM Tree
์ต์ข ์ ์ผ๋ก๋ ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ค์ ๊ด๊ณ๋ฅผ ๋ถ์ฌํด์ผ ํ๋ค. (HTML ํ๊ทธ์ ๋ถ๋ชจ - ์์ ๊ด๊ณ)
Tree ํํ๋ก ๊ด๊ณ๋ฅผ ์ฃผ๋ ๊ฒ์ Model์ด๋ผ๊ณ ํ๋ค.
Document ๋ฌธ์๋ฅผ
Object ๊ฐ์ฒด ํํ๋ก ๋ง๋ค์ด์
Model ๊ด๊ณ๋ฅผ ๋ง๋ ๋ค
HTML
์ ์ต์ข
๋ชฉํ๋ ์ด๋ ๊ฒ ๋ฌธ์๋ฅผ ํด์ํด์ย DOM Tree๋ฅผ ๋ง๋๋ ๊ฒ!ใ ค
3. Render Tree
์ ๊ณผ์ ์ ๊ฑฐ์ณ ๋ถ๋ฌ์จ HTML
, CSS
, JS
ํ์ผ๋ค์ ํฉ์ฒดํด์ผ ํ๋ค. ์ด ๊ณผ์ ์์ ์ธ๋ฐ์๋ ๋
ธ๋๋ค์ ์ ์ธํ๋ค.
ใ ค
4. ์ต์ข ๊ทธ๋ฆฌ๊ธฐ ๋จ๊ณ
์ด์ ์ง์ง ์น์ฌ์ดํธ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ๋ง ํ๋ฉด ๋๋๋ฐ ์ ํํ ์ด๋์๋ค ๊ทธ๋ฆด๊ฑด์ง ์ ํด์ผ ํ๋ค. (๋ฐ์ํ)
Layout: ์ ํํ
px
๊ฐ์ ๊ณ์ฐํ๋ ๋จ๊ณ์ด๋คPaint: ์ฌ๋ฌ๊ฐ์ ๋ ์ด์ด๋ก ๋๋ ์ ๊ทธ๋ฆผ
Composite: ์ฌ๋ฌ๊ฐ์ ๋ ์ด์ด๋ฅผ ๋ง์ง๋ง ๋จ๊ณ์์ ํฉ์ณ์ ๋ณด์ฌ์ค๋ค
Reflow ๋ ๋
ํ์ด์ง ์ด๊ธฐ ๋ ๋๋ง ์(์ต์ด
Layout
๊ณผ์ )์๋์ฐ ๋ฆฌ์ฌ์ด์ง ์(
Viewport
ํฌ๊ธฐ ๋ณ๊ฒฝ ์)๋ ธ๋ ์ถ๊ฐ ๋๋ ์ ๊ฑฐ์์์ ์์น, ํฌ๊ธฐ ๋ณ๊ฒฝ(
left
,top
,margin
,padding
๋ฑ๋ฑ)ํฐํธ ๋ณ๊ฒฝ(ํ ์คํธ ๋ด์ฉ)๊ณผ ์ด๋ฏธ์ง ํฌ๊ธฐ ๋ณ๊ฒฝ(ํฌ๊ธฐ๊ฐ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ก ๋ณ๊ฒฝ ์)
ใ ค
+ ๋๋ณด๊ธฐ(๋ฆฌ์์ค์์ฒญ)
CSSOM Tree
<link rel="stylesheet" type="text/css" href="/examples/media/expand_style.css">
HTML
ํ์ผ์ ์ฝ๋ค๊ฐ ์ด๋ ๊ฒ CSS
๋ช
๋ น์ด๊ฐ ์์ผ๋ฉด "์๋ฒ์ผ ์๊น HTML
ํ์ผ ๋ณด๋ด์ค ๊ฑฐ ๋ณด๋๊น CSS
ํ์ผ๋ ํ์ํ๋ค ํด์ ๊ทธ๊ฒ๋ ๋ณด๋ด์ค~"๋ผ๊ณ ์๊น ์ฃผ์์ ๋ค์ ํ๋ฒ ์์ฒญํ๋ค.
CSS
๋ HTML
๊ณผ ๋๊ฐ์ด ์์ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด ์ด๋ฐ ํํ์ CSSOM Tree๊ฐ ์์ฑ๋๋ค.
ใ ค
JavaScript ํ์ฑ
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="./style.css">
<title></title>
</head>
<body>
<script src="script.js"></script>
</body>
</html>
"์๋ฒ์ผ ์ฝ๋ค ๋ณด๋๊น JS
ํ์ผ๋ ์๋ค ์ด๊ฒ๋ ๋ณด๋ด์ค!"ํ๊ณ ๋ค์ ์์ฒญ์ ํ๋ค. ์ด๋ HTML
์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ์คํ๋๋ ๋์์๋ DOM
ํ์ฑ์ ๋ฉ์ถ๋ค.
์ ๋ฉ์ถ๊น?
๋ง์ฝ DOM์ ๋ค ๊ทธ๋ ธ๋๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ฒญ์ฌํญ์ด ๋๋ฌด ๋ง์ผ๋ฉด ๊ทธ ์์ฒญ์ฌํญ์ ๋ฐ๋ผ ๋ค์ ๋ ๊ทธ๋ ค์ผ ํ๋ค. ๊ทธ๋์ ์ผ๋จ ๊ทธ๋ฆฌ๋ ๊ฑฐ ๋ฉ์ท๋ค๊ฐ, JSํ์ผ์ ๋ค ์ฝ๊ณ ์์ฒญ์ฌํญ์ ๋ง๊ฒ ๋ค์ DOM ์์ฑ์ ์ด์ด๋๊ฐ๋ค.
ใ ค
์๋ฐ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ํญ์ ๋ฐ๋ฅ์ ์๋ ์ด์ ?
<script src="main.js" defer></script>
<div id="test" class="test">hey</div>
์๋ฅผ ๋ค์ด, JS ํ์ผ์ด <div id="test">
์ ํ
์คํธ๋ฅผ ๋ฐ๊ฟ์ฃผ์ธ์๋ผ๋ ์์ฒญ์ ๊ฐ์ง ํ์ผ์ธ๋ฐ <div id="test">
๊ฐ JS ํ์ผ๋ณด๋ค ๋ฐ์ ์์นํด ์์ผ๋ฉด JS ํ์ผ์ด ์์๋ฅผ ์ ์ ์์ด์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ script
ํ๊ทธ๊ฐ body
ํ๊ทธ ์ตํ๋จ์ ์์นํด์ผ ํ๋ค.
ใ ค
defer๊ณผ async
<script src="main.js" defer></script>
<div id="test" class="test">hey</div>
๊ทผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ DOM ํ์ผ์ ๋ง๋ ๊ฑด ๋ง์ด ์๋์ง ์๋? ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ๋์ DOM ํ์ฑ ๋ฉ์ถ๋ ๊ฑฐ ์ซ๋ค?
defer
์ด๋ย async
๋ฅผ ์ฌ์ฉํ๋ฉดย script
ย ํ์ผ์ดย DOM
์ ์์ฑ์ ๋ง์ง ์๋๋ค.ใ ค
๊ทผ๋ฐ ์ CSS link ํ๊ทธ๋ ํญ์ ์์ ์๋๊ฑฐ์ผ?
CSS
๋ DOM
์ ์์ฑ์ ๋ง์ง ์์! DOM
์ด ์์ฑ์ด ๋๋ค๊ณ ๋ฐ๋ก ์น์ฌ์ดํธ์ ๋ณด์ด๋ ๊ฒ์ด ์๋๋ผ CSSOM
์ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ ๋ค ์์ฑ์ด ๋๋ฉด ๋ค์ ์คํ
์ผ๋ก ์งํํ๋ค.
๊ทธ๋์ CSSOM
์ด ์ต๋ํ ๋นจ๋ฆฌ ์งํ๋๋๊ฒ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ์ค์ํ ์ญํ ์ ํ๋ค. ๋ง์ฝ CSS
ํ์ผ์ด ๋๋ฌด ํฌ๋ฉด DOM
์ด ๋๋ฌ์ด๋ CSSOM
์ด ๋๋๋ ๊ฑธ ๊ณ์ ๊ธฐ๋ค๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ ์คํ์ผ ํ์ผ์ ํ์์ ๋ฐ๋ผ ๋๋๋ ๊ฒ ์น์ฑ๋ฅ์ ๋์ด๋๋ฐ ์ข๋ค.
ใ ค
๐ค ๊ทธ๋ ๋ค๋ฉด ์น์ฌ์ดํธ์ ์ฑ๋ฅ์ ์ํด์ ์ด๋ป๊ฒ ํด์ผํ ๊น?
์์ค(ํ์ผ)์ ์ฌ์ด์ฆ ์ค์ด๊ธฐ(๋ฐ์ดํธ ์ ์ค์ด๊ธฐ)
์ธ๋ถ์์ ๊ฐ์ ธ์ค๋ ๋ฆฌ์์ค์ ์ค์ด๊ธฐ - CSS ํ์ผ ๊ฐ์ ๊ฒฝ์ฐ Media Query ๋ฑ์ ์จ์ ๋ถํ์ํ ํ์ผ์ ๋์ค์ ๊ฐ์ ธ์ค๊ธฐ
์ธ๋ถ์์ ๊ฐ์ ธ์ค๋ ํ์ ์ค์ด๊ธฐ(์ธ๋ผ์ธ ์คํ์ผ) - ์ฅ๋จ์ ์์
Reflow, Repaint ์ค์ด๊ธฐ(left, right ๋ณด๋ค transform ์ฌ์ฉ, 1px์ฉ ๋ณด๋จ 3px์ฉ ๋ฑ...)
ใ ค
๐คจ ๊ฐ์ ๋ฃ๊ณ ๋๋ ์
์ปดํจํฐ์ผ.. ์ฌ์ดํธ ํ๋ ์ฝ๊ธฐ ์ํด์ ์๊ฐ๋ณด๋ค ์ ๋ง ๋ง์ ์ผ์ ํ๋๊ตฌ๋. ๊ทธ๋ฆฌ๊ณ ์ง๊ธ๊น์ง ๋ด๊ฐ ์ง ์ฝ๋๋ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ์ ๋ง ์ ์ข์๊ฒ ๊ตฌ๋.. ์์ผ๋ก ๋ง์ด ๊ณ ๋ คํ๋ฉด์ ์ฝ๋๋ฅผ ์งค ์ ์๋๋ก ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค.
ใ ค