๐ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ์ดํดํ๊ธฐ: Critical Rendering Path ๐

๐ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ์ดํดํ๊ธฐ: Critical Rendering Path ๐
์๋ ํ์ธ์, ์ฌ๋ฌ๋ถ! ์ค๋์ ์น ๊ฐ๋ฐ์๋ผ๋ฉด ๊ผญ ์์์ผ ํ ์ด์ค์ ํ ํฝ, "๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ "์ ๋ํด ๊น์ด ํํค์ณ๋ณผ ๊ฑฐ์์. ํนํ Critical Rendering Path(CRP)๋ผ๋ ๊ฐ๋ ์ ์ค์ฌ์ผ๋ก ์ค๋ช ํ ๊ฑด๋ฐ์, ์ด๊ฒ ๋ญ์ง ์์ง ๋ชจ๋ฅด๊ฒ ๋ค๊ตฌ์? ๊ฑฑ์ ๋ง์ธ์! ์ง๊ธ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ค๋ช ํด๋๋ฆด๊ฒ์. ๐
์ฐ๋ฆฌ๊ฐ ๋งค์ผ ์ฌ์ฉํ๋ ์น ๋ธ๋ผ์ฐ์ , ๊ทธ ์์์ ์ด๋ค ๋ง๋ฒ ๊ฐ์ ์ผ์ด ๋ฒ์ด์ง๋์ง ๊ถ๊ธํ์ง ์์ผ์ จ๋์? ์ฐ๋ฆฌ๊ฐ URL์ ์ ๋ ฅํ๊ณ ์ํฐ๋ฅผ ๋๋ฅด๋ ์๊ฐ๋ถํฐ ์น ํ์ด์ง๊ฐ ์ฐ๋ฆฌ ๋์์ ๋ํ๋๊ธฐ๊น์ง, ๋ธ๋ผ์ฐ์ ๋ ์ ๋ง ์ด์ฌํ ์ผํ๊ณ ์๋ต๋๋ค. ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค์ํ ์ฌ๋ฅ์ ๊ฐ์ง ์ฌ๋๋ค์ด ์ด์ฌํ ์ผํ๋ ๊ฒ์ฒ๋ผ ๋ง์ด์ฃ ! ๐ค
์, ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ ์ ์ดํด๋ณผ ํ ๋ฐ์. ์ด ๊ณผ์ ์ ์ดํดํ๋ฉด ์ฌ๋ฌ๋ถ์ ์น ๊ฐ๋ฐ ์ค๋ ฅ์ด ํ์ธต ์ ๊ทธ๋ ์ด๋๋ ๊ฑฐ์์. ๋ง์น ์ฌ๋ฅ๋ท์์ ์๋ก์ด ์คํฌ์ ๋ฐฐ์ฐ๋ ๊ฒ์ฒ๋ผ ๋ง์ด์ฃ ! ๊ทธ๋ผ ์์ํด๋ณผ๊น์? ๐
๐ Critical Rendering Path๋ ๋ฌด์์ธ๊ฐ์?
Critical Rendering Path(CRP)๋ผ... ๋ญ๊ฐ ์ด๋ ค์ ๋ณด์ด๋ ์ด๋ฆ์ด์ฃ ? ใ ใ ใ ๊ฑฑ์ ๋ง์ธ์! ์๊ฐ๋ณด๋ค ์ฌ์ด ๊ฐ๋ ์ด์์. ๐ค
CRP๋ ๊ฐ๋จํ ๋งํด์ ๋ธ๋ผ์ฐ์ ๊ฐ HTML, CSS, JavaScript๋ฅผ ํ๋ฉด์ ํฝ์ ๋ก ๋ณํํ๋ ์ผ๋ จ์ ๋จ๊ณ๋ฅผ ๋งํด์. ์ฆ, ์ฐ๋ฆฌ๊ฐ ์น ํ์ด์ง๋ฅผ ์์ฒญํ๊ณ ๋์ ํ๋ฉด์ ๋ด์ฉ์ด ํ์๋๊ธฐ๊น์ง์ ๋ชจ๋ ๊ณผ์ ์ด๋ผ๊ณ ๋ณผ ์ ์์ฃ .
์ด ๊ณผ์ ์ ๋ง์น ์๋ฆฌ๋ฅผ ํ๋ ๊ฒ๊ณผ ๋น์ทํด์. ์ฌ๋ฃ(HTML, CSS, JS)๋ฅผ ์ค๋นํ๊ณ , ์กฐ๋ฆฌํ๊ณ (ํ์ฑ), ํ๋ ์ดํ (๋ ๋๋ง)ํ๋ ๊ณผ์ ์ด๋๊น์? ๐ณ
๐ก ์์๋์ธ์: CRP๋ฅผ ์ต์ ํํ๋ฉด ์น ํ์ด์ง์ ๋ก๋ฉ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ด์. ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ๊ฐ์ ํ๊ณ , ๊ฒ์ ์์ง ์ต์ ํ(SEO)์๋ ๋์์ด ๋ฉ๋๋ค!
์, ์ด์ CRP์ ๊ฐ ๋จ๊ณ๋ฅผ ํ๋์ฉ ์ดํด๋ณผ๊น์? ์ค๋น๋์ จ๋์? ๊ทธ๋ผ ๊ณ ๊ณ ! ๐
๐ CRP์ ์ฃผ์ ๋จ๊ณ
CRP๋ ํฌ๊ฒ 6๋จ๊ณ๋ก ๋๋ ์ ์์ด์. ๊ฐ ๋จ๊ณ๋ฅผ ์์ธํ ์ดํด๋ณด๋ฉด์, ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ป๊ฒ ์น ํ์ด์ง๋ฅผ ๊ทธ๋ ค๋ด๋์ง ์ดํดํด๋ด์!
- DOM (Document Object Model) ๊ตฌ์ถ
- CSSOM (CSS Object Model) ๊ตฌ์ถ
- JavaScript ์คํ
- ๋ ๋ ํธ๋ฆฌ ๊ตฌ์ถ
- ๋ ์ด์์
- ํ์ธํธ
์ด ๋จ๊ณ๋ค์ด ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๋์ง ๊ทธ๋ฆผ์ผ๋ก ํ๋ฒ ๋ณผ๊น์? ๐ผ๏ธ
์~ ๋ญ๊ฐ ๋ณต์กํด ๋ณด์ด์ฃ ? ใ ใ ใ ํ์ง๋ง ๊ฑฑ์ ๋ง์ธ์. ํ๋์ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ์ค๋ช ํด๋๋ฆด๊ฒ์! ๐
๐ณ 1๋จ๊ณ: DOM (Document Object Model) ๊ตฌ์ถ
์, ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๊ฐ ๋จ๊ณ๋ฅผ ํ๋์ฉ ์ดํด๋ณผ ์ฐจ๋ก์์. ์ฒซ ๋ฒ์งธ๋ DOM ๊ตฌ์ถ ๋จ๊ณ์ ๋๋ค! ๐๏ธ
DOM์ด ๋ญ๋๊ตฌ์? ๊ฐ๋จํ ๋งํด์ HTML ๋ฌธ์์ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค์์. ๋ธ๋ผ์ฐ์ ๋ HTML์ ์ฝ์ด DOM์ ๋ง๋ค์ด๋ด๋๋ฐ, ์ด ๊ณผ์ ์ "ํ์ฑ"์ด๋ผ๊ณ ํด์.
์๋ฅผ ๋ค์ด๋ณผ๊น์? ๋ค์๊ณผ ๊ฐ์ HTML์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด์:
<!DOCTYPE html>
<html>
<head>
<title>์ฌ๋ฅ๋ท - ๋น์ ์ ์ฌ๋ฅ์ ๋๋์ธ์!</title>
</head>
<body>
<h1>ํ์ํฉ๋๋ค!</h1>
<p>์ฌ๋ฅ๋ท์์ ๋น์ ์ ์ฌ๋ฅ์ ๊ณต์ ํ์ธ์.</p>
</body>
</html>
์ด HTML์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ์ผ๋ฉด, ๋ค์๊ณผ ๊ฐ์ DOM ํธ๋ฆฌ๋ฅผ ๋ง๋ค์ด๋ด์:
์์ฐ! ์ด๋ ๊ฒ ๋ณต์กํ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง๋ค์. ๐ฒ ํ์ง๋ง ๊ฑฑ์ ๋ง์ธ์. ์ด ๊ตฌ์กฐ ๋๋ถ์ ์ฐ๋ฆฌ๋ JavaScript๋ก ์น ํ์ด์ง์ ์์๋ค์ ์ฝ๊ฒ ์กฐ์ํ ์ ์๋ต๋๋ค.
๐ ๊ฟํ: DOM ๊ตฌ์ถ ๊ณผ์ ์์ <script> ํ๊ทธ๋ฅผ ๋ง๋๋ฉด ํ์ฑ์ด ์ค๋จ๋๊ณ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ผ์. ๊ทธ๋์ ๋ณดํต <script> ํ๊ทธ๋ <body> ํ๊ทธ์ ๋งจ ๋์ ์์น์ํค๋ ๊ฒ์ด ์ข๋ต๋๋ค!
์, ์ด์ DOM ๊ตฌ์ถ์ ๋ํด ์ดํดํ์ จ๋์? ๋ค์์ CSSOM ๊ตฌ์ถ ๋จ๊ณ๋ฅผ ์ดํด๋ณผ ๊ฑฐ์์. ์ค๋น๋์ จ์ฃ ? ๊ณ ๊ณ ! ๐
๐จ 2๋จ๊ณ: CSSOM (CSS Object Model) ๊ตฌ์ถ
์, ์ด์ ์ฐ๋ฆฌ์ ์น ํ์ด์ง์ ์คํ์ผ์ ์ ํ๋ณผ ์๊ฐ์ด์์! ๐๏ธ CSSOM์ CSS์ ๊ฐ์ฒด ํํ์ด์์. DOM์ด HTML์ ํํํ๋ค๋ฉด, CSSOM์ CSS๋ฅผ ํํํ๋ ๊ฑฐ์ฃ .
๋ธ๋ผ์ฐ์ ๋ CSS๋ฅผ ๋ง๋๋ฉด ์ด๋ฅผ ํ์ฑํด์ CSSOM์ ๋ง๋ค์ด์. ์ด ๊ณผ์ ์ DOM ๊ตฌ์ถ๊ณผ ๋น์ทํ์ง๋ง, CSS์๋ ๋ช ๊ฐ์ง ํน๋ณํ ๊ท์น์ด ์์ด์.
๐ง ๊ธฐ์ตํ์ธ์: CSS๋ ์บ์ค์ผ์ด๋ฉ(Cascading)์ด๋ผ๋ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ด์. ์ด๋ ์คํ์ผ์ด ์์ ์์๋ก๋ถํฐ ํ์ ์์๋ก 'ํ๋ฌ๋ด๋ฆฐ๋ค'๋ ์๋ฏธ์์. ๊ทธ๋์ CSSOM์ ๋ง๋ค ๋๋ ์ด ์ ์ ๊ณ ๋ คํด์ผ ํด์!
๊ฐ๋จํ ์๋ฅผ ๋ค์ด๋ณผ๊น์? ๋ค์๊ณผ ๊ฐ์ CSS๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด์:
body {
font-size: 16px;
}
h1 {
color: #333;
font-size: 24px;
}
p {
color: #666;
}
์ด CSS๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ ๋ค์๊ณผ ๊ฐ์ CSSOM์ ๋ง๋ค์ด๋ด์:
๋ณด์ด์๋์? body์ font-size๊ฐ p ์์์๋ ์ ์ฉ๋์์ด์. ์ด๊ฒ ๋ฐ๋ก ์บ์ค์ผ์ด๋ฉ์ ํจ๊ณผ๋๋๋ค! ๐
CSSOM ๊ตฌ์ถ์ ๋ ๋๋ง ์ฐจ๋จ ๋ฆฌ์์ค(render blocking resource)์์. ์ฆ, CSSOM์ด ์์ฑ๋ ๋๊น์ง ๋ธ๋ผ์ฐ์ ๋ ํ์ด์ง ๋ ๋๋ง์ ์์ํ์ง ์์์. ๊ทธ๋์ CSS๋ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ก๋๋๊ณ ๊ฐ๊ฒฐํด์ผ ํด์.
๐ก ํ๋ก ํ: CSS ์ต์ ํ๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ด์:
- ๋ถํ์ํ CSS ์ ๊ฑฐ
- CSS ์์ถ
- CSS ์คํ๋ผ์ดํธ ์ฌ์ฉ
- ๋ฏธ๋์ด ์ฟผ๋ฆฌ ํ์ฉ
์~ CSSOM๊น์ง ์์ฑํ์ด์! ์ด์ ์ฐ๋ฆฌ ์น ํ์ด์ง์ ๊ตฌ์กฐ(DOM)์ ์คํ์ผ(CSSOM)์ด ์ค๋น๋์๋ค์. ๋ค์์ ๋ญ๊น์? ๋ฐ๋ก JavaScript ์คํ์ด์์! ๐
๐ง 3๋จ๊ณ: JavaScript ์คํ
์, ์ด์ ์ฐ๋ฆฌ ์น ํ์ด์ง์ ์๋๊ฐ์ ๋ถ์ด๋ฃ์ ์ฐจ๋ก์์! JavaScript๊ฐ ๋ฑ์ฅํ ์๊ฐ์ด์ฃ . ๐ญ
JavaScript๋ ์น ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ํต์ฌ ์์์์. DOM๊ณผ CSSOM์ ์กฐ์ํ๊ณ , ์ฌ์ฉ์ ์ํธ์์ฉ์ ๋ฐ์ํ๊ณ , ์๋ฒ์ ํต์ ํ๋ ๋ฑ ๋ค์ํ ์์ ์ ์ํํ ์ ์์ฃ .
๐ญ ์ฌ๋ฏธ์๋ ์ฌ์ค: JavaScript๋ ํ์ ์ฐจ๋จ ๋ฆฌ์์ค(parser blocking resource)์์. ์ฆ, JavaScript๋ฅผ ๋ง๋๋ฉด HTML ํ์ฑ์ด ์ค๋จ๋๊ณ JavaScript๊ฐ ์คํ๋ผ์. ๊ทธ๋์ JavaScript ํ์ผ์ ์์น๊ฐ ์ค์ํ๋ต๋๋ค!
JavaScript๊ฐ ์คํ๋๋ ๊ณผ์ ์ ๊ฐ๋จํ ์ดํด๋ณผ๊น์?
- ๋ธ๋ผ์ฐ์ ๊ฐ <script> ํ๊ทธ๋ฅผ ๋ง๋๋ฉด HTML ํ์ฑ์ ์ค๋จํด์.
- JavaScript ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ ํ์ฑํด์.
- JavaScript ์ฝ๋๋ฅผ ์คํํด์.
- HTML ํ์ฑ์ ์ฌ๊ฐํด์.
์ด ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์ด๋ ๊ฒ ๋๊ฒ ๋ค์:
์ด๋ฐ ๊ณผ์ ๋๋ฌธ์ JavaScript ํ์ผ์ด ํฌ๊ฑฐ๋ ๋คํธ์ํฌ๊ฐ ๋๋ฆฌ๋ฉด ํ์ด์ง ๋ก๋ฉ์ด ์ง์ฐ๋ ์ ์์ด์. ๊ทธ๋์ JavaScript ์ต์ ํ๊ฐ ์ค์ํ๋ต๋๋ค!
๐ ์ต์ ํ ํ:
- JavaScript ํ์ผ์ ์์ถํ์ธ์.
- ๋ถํ์ํ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ธ์.
- async๋ defer ์์ฑ์ ์ฌ์ฉํ์ธ์.
- ์ฝ๋ ์คํ๋ฆฌํ ์ ํ์ฉํ์ธ์.
JavaScript ์คํ ๋จ๊ณ์์๋ DOM์ด๋ CSSOM์ ๋ณ๊ฒฝํ ์ ์์ด์. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์คํํ ์ ์์ฃ :
document.querySelector('h1').style.color = 'blue';
const newParagraph = document.createElement('p');
newParagraph.textContent = '์ฌ๋ฅ๋ท์์ ์๋ก์ด ์ฌ๋ฅ์ ๋ฐ๊ฒฌํ์ธ์!';
document.body.appendChild(newParagraph);
์ด ์ฝ๋๋ h1 ์์์ ์์์ ๋ณ๊ฒฝํ๊ณ , ์๋ก์ด p ์์๋ฅผ ์ถ๊ฐํด์. ์ด๋ ๊ฒ JavaScript๋ฅผ ํตํด ๋์ ์ผ๋ก ํ์ด์ง๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ต๋๋ค!
์, ์ด์ JavaScript ์คํ ๋จ๊ณ๊น์ง ๋ง์ณค์ด์. ๋ค์์ ๋ญ๊น์? ๋ฐ๋ก ๋ ๋ ํธ๋ฆฌ ๊ตฌ์ถ์ด์์! ์ฐ๋ฆฌ์ ์ฌ์ ์ด ์ ์ ๋ ํฅ๋ฏธ์ง์งํด์ง๊ณ ์์ด์. ๊ณ์ ๋ฐ๋ผ์์ฃผ์ธ์! ๐
๐ณ 4๋จ๊ณ: ๋ ๋ ํธ๋ฆฌ ๊ตฌ์ถ
์~ ๋๋์ด ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ค ์๊ฐ์ด์์! ๐จ ์ด ๋จ๊ณ๋ ์ ๋ง ์ ๋๋ ๋จ๊ณ์์. ์๋๊ตฌ์? DOM๊ณผ CSSOM์ด ๋ง๋ ์ค์ ๋ก ํ๋ฉด์ ๊ทธ๋ ค์ง ๋ด์ฉ์ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ด์ฃ !
๋ ๋ ํธ๋ฆฌ๋ ํ์ด์ง์์ ๋ณด์ด๋ ๋ชจ๋ ์์์ ๊ทธ ์์์ ์คํ์ผ ์ ๋ณด๋ฅผ ํฌํจํด์. ์ฆ, ์ค์ ๋ก ํ๋ฉด์ ๊ทธ๋ ค์ง ๋ด์ฉ๋ง์ ๋ด๊ณ ์๋ ๊ฑฐ์ฃ .
๋ ๋ ํธ๋ฆฌ ๊ตฌ์ถ ๊ณผ์ ์ ๊ฐ๋จํ ์ค๋ช ํ๋ฉด ์ด๋ ๋ต๋๋ค:
- DOM ํธ๋ฆฌ์ ๋ฃจํธ์์ ์์ํด ๊ฐ ๋ ธ๋๋ฅผ ์ํํฉ๋๋ค.
- ํ๋ฉด์ ํ์๋๋ ๋ ธ๋๋ง ์ ํํฉ๋๋ค. (์: display: none์ธ ์์๋ ์ ์ธ)
- ์ ํ๋ ๋ ธ๋์ ์ ์ ํ CSSOM ๊ท์น์ ์ ์ฉํฉ๋๋ค.
- ๊ณ์ฐ๋ ์คํ์ผ๊ณผ ํจ๊ป ์ฝํ ์ธ ๋ฅผ ํฌํจํ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์ด ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์ด๋ ๊ฒ ๋๊ฒ ๋ค์:
๐ง ๊ธฐ์ตํ์ธ์: ๋ ๋ ํธ๋ฆฌ์๋ ํ๋ฉด์ ์ค์ ๋ก ๊ทธ๋ ค์ง ์์๋ง ํฌํจ๋ผ์. ์๋ฅผ ๋ค์ด, <head> ์์๋ display: none ์คํ์ผ์ด ์ ์ฉ๋ ์์๋ ๋ ๋ ํธ๋ฆฌ์ ํฌํจ๋์ง ์์์!
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ HTML๊ณผ CSS๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณผ๊น์?
<!-- HTML -->
<body>
<h1>์ฌ๋ฅ๋ท์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค!</h1>
<p style="display: none">์ด ํ
์คํธ๋ ๋ณด์ด์ง ์์์.</p>
<div>
<p>๋น์ ์ ์ฌ๋ฅ์ ๋๋์ธ์!</p>
</div>
</body>
/* CSS */
body { font-family: Arial, sans-serif; }
h1 { color: #333; }
p { color: #666; }
์ด ๊ฒฝ์ฐ, ๋ ๋ ํธ๋ฆฌ๋ ๋๋ต ์ด๋ ๊ฒ ๊ตฌ์ฑ๋ ๊ฑฐ์์:
๋ณด์ด์๋์? display: none ์คํ์ผ์ด ์ ์ฉ๋ p ์์๋ ๋ ๋ ํธ๋ฆฌ์ ํฌํจ๋์ง ์์์ด์!
๋ ๋ ํธ๋ฆฌ๊ฐ ๊ตฌ์ถ๋๋ฉด, ์ด์ ๊ฐ ๋ ธ๋์ ์ ํํ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ ์ค๋น๊ฐ ๋ ๊ฑฐ์์. ์ด ๊ณผ์ ์ '๋ ์ด์์' ๋๋ '๋ฆฌํ๋ก์ฐ'๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ๋ฐ๋ก ๋ค์ ๋จ๊ณ์์ ์์ธํ ์ดํด๋ณผ ๊ฑฐ์์!
๐ก ํ๋ก ํ: ๋ ๋ ํธ๋ฆฌ ๊ตฌ์ถ์ ์ต์ ํํ๋ ค๋ฉด:
- CSS ์ ํ์๋ฅผ ๋จ์ํ๊ฒ ์ ์งํ์ธ์.
- ๋ถํ์ํ DOM ๊น์ด๋ฅผ ์ค์ด์ธ์.
- JavaScript๋ก DOM์ ๋๊ท๋ชจ๋ก ๋ณ๊ฒฝํ ๋๋ DocumentFragment๋ฅผ ์ฌ์ฉํ์ธ์.
์, ์ด์ ์ฐ๋ฆฌ์ ์น ํ์ด์ง๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๋๋ต์ ์ผ๋ก ์๊ฒ ๋์์ด์. ํ์ง๋ง ์์ง ์ ํํ ์์น์ ํฌ๊ธฐ๋ ๋ชจ๋ฅด์ฃ ? ๊ทธ๋์ ๋ค์ ๋จ๊ณ์ธ ๋ ์ด์์์ด ํ์ํ ๊ฑฐ์์! ๊ณ์ํด์ ๋ฐ๋ผ์์ฃผ์ธ์, ์ฐ๋ฆฌ์ ์ฌ์ ์ด ์ ์ ๋ ํฅ๋ฏธ์ง์งํด์ง๊ณ ์์ด์! ๐
๐ 5๋จ๊ณ: ๋ ์ด์์ (Layout)
์, ์ด์ ์ฐ๋ฆฌ์ ์น ํ์ด์ง ์์๋ค์ด ์ ํํ ์ด๋์ ์์นํด์ผ ํ ์ง ๊ฒฐ์ ํ ์๊ฐ์ด์์! ์ด ๊ณผ์ ์ '๋ ์ด์์' ๋๋ '๋ฆฌํ๋ก์ฐ'๋ผ๊ณ ๋ถ๋ฅธ๋ต๋๋ค. ๐บ๏ธ
๋ ์ด์์ ๋จ๊ณ์์๋ ๊ฐ ์์์ ์ ํํ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํด์. ์ด ๊ณผ์ ์ ๋ ๋ ํธ๋ฆฌ์ ๋ฃจํธ์์ ์์ํด์ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ํํ๋ฉด์ ์ด๋ค์ ธ์.
๐งฎ ์์๋์ธ์: ๋ ์ด์์ ๊ณ์ฐ์ ์๋์ ์ธ ์ธก์ ๊ฐ(%, em ๋ฑ)์ ์ ๋์ ์ธ ํฝ์ ๋ก ๋ณํํ๋ ๊ณผ์ ์ ํฌํจํด์. ์๋ฅผ ๋ค์ด, width: 50%๋ ๋ถ๋ชจ ์์์ ๋๋น์ ๋ฐ๋ผ ํฝ์ ๊ฐ์ผ๋ก ๊ณ์ฐ๋ผ์.
๋ ์ด์์ ๊ณผ์ ์ ๊ฐ๋จํ ์ค๋ช ํ๋ฉด ์ด๋ ๋ต๋๋ค:
- ๋ถ๋ชจ ์์์ ํฌ๊ธฐ์ ์์น ๊ฒฐ์
- ์์ ์์์ ํฌ๊ธฐ์ ์์น ๊ณ์ฐ
- ์ด ๊ณผ์ ์ ๋ชจ๋ ์์์ ๋ํด ์ฌ๊ท์ ์ผ๋ก ๋ฐ๋ณต
์ด ๊ณผ์ ์ ์๊ฐํํ๋ฉด ์ด๋ ๊ฒ ๋ณผ ์ ์์ด์:
์ด๋ ๊ฒ ๊ฐ ์์์ ์ ํํ ํฌ๊ธฐ์ ์์น๊ฐ ๊ณ์ฐ๋๋ ๊ฑฐ์์. ๋ฉ์ง์ฃ ? ๐
ํ์ง๋ง ๋ ์ด์์ ๊ณผ์ ์ ๊ฝค ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ด์์. ํนํ DOM ์์๊ฐ ๋ง๊ฑฐ๋ ๋ณต์กํ ๋ ์ด์์์ ๊ฐ์ง ํ์ด์ง์์๋ ๋์ฑ ๊ทธ๋ ์ฃ . ๊ทธ๋์ ๋ ์ด์์ ์ต์ ํ๊ฐ ์ค์ํด์!
๐ ์ต์ ํ ํ:
- ๋ ์ด์์์ ์์ฃผ ๋ณ๊ฒฝํ์ง ๋ง์ธ์. ์ฌ๋ฌ ๋ณ๊ฒฝ์ฌํญ์ ํ ๋ฒ์ ์ ์ฉํ๋ ๊ฒ์ด ์ข์์.
- position: absolute๋ fixed๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ์์๋ ๋ค๋ฅธ ์์์ ์ํฅ์ ์ฃผ์ง ์์ ๋ ์ด์์ ๊ณ์ฐ์ด ๋ ๋นจ๋ผ์ง ์ ์์ด์.
- ๋ณต์กํ ์ ๋๋ฉ์ด์ ์ position: fixed๋ absolute๋ฅผ ์ฌ์ฉํ๋ ์์์ ์ ์ฉํ์ธ์.
- ๋ ์ด์์์ ์ํฅ์ ์ฃผ๋ ์์ฑ(width, height, top, left ๋ฑ) ๋์ transform์ ์ฌ์ฉํ์ธ์.
์, ์ด์ ์ฐ๋ฆฌ ์น ํ์ด์ง์ ๊ฐ ์์๊ฐ ์ด๋์ ์์นํด์ผ ํ ์ง ์ ํํ ์๊ฒ ๋์์ด์. ํ์ง๋ง ์์ง ์ค์ ๋ก ํ๋ฉด์ ๊ทธ๋ ค์ง์ง๋ ์์์ฃ ? ๊ทธ๋์ ๋ค์ ๋จ๊ณ์ธ 'ํ์ธํธ'๊ฐ ํ์ํ ๊ฑฐ์์!
๋ ์ด์์ ๋จ๊ณ๋ฅผ ๋ง์น๊ณ ๋๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์ด์ ๊ฐ ์์๋ฅผ ์ค์ ํฝ์ ๋ก ๋ณํํ ์ค๋น๊ฐ ๋ ๊ฑฐ์์. ์ด ๊ณผ์ ์ด ๋ฐ๋ก ๋ค์์ ์ดํด๋ณผ 'ํ์ธํธ' ๋จ๊ณ๋๋๋ค. ์ฐ๋ฆฌ์ ์ฌ์ ์ด ๊ฑฐ์ ๋๋๊ฐ๊ณ ์์ด์! ์กฐ๊ธ๋ง ๋ ํ๋ด์ธ์! ๐จ๐๏ธ
๐จ 6๋จ๊ณ: ํ์ธํธ (Paint)
๋๋์ด ๋ง์ง๋ง ๋จ๊ณ์ ๋๋ฌํ์ด์! ๐ ์ด์ ์ฐ๋ฆฌ์ ์น ํ์ด์ง๋ฅผ ์ค์ ๋ก ํ๋ฉด์ ๊ทธ๋ฆด ์๊ฐ์ด์์. ์ด ๊ณผ์ ์ 'ํ์ธํธ' ๋๋ '๋์คํฐํ'๋ผ๊ณ ๋ถ๋ฅธ๋ต๋๋ค.
ํ์ธํธ ๋จ๊ณ์์๋ ๋ ๋ ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ฅผ ํ๋ฉด์ ์ค์ ํฝ์ ๋ก ๋ณํํด์. ์ด ๊ณผ์ ์๋ ํ ์คํธ, ์, ์ด๋ฏธ์ง, ํ ๋๋ฆฌ, ๊ทธ๋ฆผ์ ๋ฑ ์์์ ๋ชจ๋ ์๊ฐ์ ๋ถ๋ถ์ ๊ทธ๋ฆฌ๋ ์์ ์ด ํฌํจ๋ผ์.
๐๏ธ ์์๋์ธ์: ํ์ธํธ ๊ณผ์ ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ ๋ ์ด์ด์์ ์ํ๋ผ์. ์ด๋ ๊ฒ ํ๋ฉด ํ์ด์ง์ ์ผ๋ถ๋ง ๋ค์ ๊ทธ๋ฆฌ๋ฉด ๋๋ ๊ฒฝ์ฐ์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ด์.
ํ์ธํธ ๊ณผ์ ์ ๊ฐ๋จํ ์ค๋ช ํ๋ฉด ์ด๋ ๋ต๋๋ค:
- ๋ฐฐ๊ฒฝ์ ์น ํ๊ธฐ
- ํ ์คํธ ๊ทธ๋ฆฌ๊ธฐ
- ์ด๋ฏธ์ง ๊ทธ๋ฆฌ๊ธฐ
- ํ ๋๋ฆฌ์ ๊ทธ๋ฆผ์ ๋ฑ ์ถ๊ฐ ์ฅ์ ์์ ๊ทธ๋ฆฌ๊ธฐ
์ด ๊ณผ์ ์ ์๊ฐํํ๋ฉด ์ด๋ ๊ฒ ๋ณผ ์ ์์ด์:
์~ ๋๋์ด ์ฐ๋ฆฌ์ ์น ํ์ด์ง๊ฐ ์ค์ ๋ก ๋ณด์ด๋ ๋ชจ์ต์ด ์์ฑ๋์์ด์! ๐จโจ
ํ์ธํธ ๊ณผ์ ๋ ๊ฝค ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ด์์. ํนํ ํ์ด์ง๊ฐ ๋ณต์กํ๊ฑฐ๋ ์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์๋ ๋์ฑ ๊ทธ๋ ์ฃ . ๊ทธ๋์ ํ์ธํธ ์ต์ ํ๋ ์ค์ํด์!
๐ ์ต์ ํ ํ:
- ๊ฐ๋ฅํ ํ ์ ์ ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ์ธ์. ๋ ์ด์ด๊ฐ ๋ง์์๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํด์.
- ์ ๋๋ฉ์ด์ ์๋ transform๊ณผ opacity๋ฅผ ์ฌ์ฉํ์ธ์. ์ด ์์ฑ๋ค์ ์๋ก์ด ๋ ์ด์ด๋ฅผ ๋ง๋ค์ด ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ด์.
- ๋ณต์กํ ๊ทธ๋ฆผ์๋ ๊ทธ๋ผ๋ฐ์ด์ ์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ผ๋ ์ ์คํ ์ฌ์ฉํ์ธ์.
- will-change ์์ฑ์ ์ฌ์ฉํด ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ณ๊ฒฝ๋ ์์๋ฅผ ๋ฏธ๋ฆฌ ์๋ ค์ค ์ ์์ด์. ํ์ง๋ง ๊ณผ๋ํ ์ฌ์ฉ์ ์คํ๋ ค ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์์ผ๋ ์ฃผ์ํ์ธ์!
์, ์ด์ ์ฐ๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ป๊ฒ ์น ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋์ง ๋ชจ๋ ๊ณผ์ ์ ์ดํด๋ดค์ด์. HTML์ ํ์ฑํด์ DOM์ ๋ง๋ค๊ณ , CSS๋ฅผ ํ์ฑํด์ CSSOM์ ๋ง๋ค๊ณ , ์ด ๋์ ํฉ์ณ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ค์์ฃ . ๊ทธ๋ฆฌ๊ณ ๋ ์ด์์์ ๊ณ์ฐํ๊ณ , ๋ง์ง๋ง์ผ๋ก ํ์ธํธ ๊ณผ์ ์ ๊ฑฐ์ณ ์ค์ ํฝ์ ๋ก ๋ณํํ์ด์.
์ด ๋ชจ๋ ๊ณผ์ ์ด ์ฐ๋ฆฌ๊ฐ URL์ ์ ๋ ฅํ๊ณ ์ํฐ๋ฅผ ๋๋ฅธ ํ ๋ถ๊ณผ ๋ช ์ด ๋ง์ ์ผ์ด๋๋ค๋ ๊ฒ ๋๋์ง ์๋์? ํ๋ ์น ๋ธ๋ผ์ฐ์ ์ ๋๋ผ์ด ๊ธฐ์ ๋ ฅ์ด์์! ๐๐๐
์ด์ ์ฌ๋ฌ๋ถ์ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ ์ ๊น์ด ์ดํดํ๊ฒ ๋์์ด์. ์ด ์ง์์ ๋ฐํ์ผ๋ก ๋ ํจ์จ์ ์ด๊ณ ์ฑ๋ฅ ์ข์ ์น ํ์ด์ง๋ฅผ ๋ง๋ค ์ ์์ ๊ฑฐ์์. ์ฌ๋ฌ๋ถ์ ์น ๊ฐ๋ฐ ์ฌ์ ์ ์ด ์ง์์ด ํฐ ๋์์ด ๋๊ธธ ๋ฐ๋ผ์! ํ์ดํ ! ๐ช๐
๐ ๋ง๋ฌด๋ฆฌ: ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ์ด์ ๋ฆฌ
์ฌ๋ฌ๋ถ, ์ ๋ง ์๊ณ ํ์ จ์ด์! ๐ ์ฐ๋ฆฌ๋ ๊ธด ์ฌ์ ์ ํตํด ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ ์ ์์ธํ ์ดํด๋ดค์ด์. ์ด์ ์ ์ฒด ๊ณผ์ ์ ํ ๋ฒ ์ ๋ฆฌํด๋ณผ๊น์?
- DOM ๊ตฌ์ถ: HTML์ ํ์ฑํด์ DOM ํธ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
- CSSOM ๊ตฌ์ถ: CSS๋ฅผ ํ์ฑํด์ CSSOM์ ๋ง๋ญ๋๋ค.
- JavaScript ์คํ: JavaScript ์ฝ๋๋ฅผ ์คํํ์ฌ DOM๊ณผ CSSOM์ ์์ ํ ์ ์์ต๋๋ค.
- ๋ ๋ ํธ๋ฆฌ ๊ตฌ์ถ: DOM๊ณผ CSSOM์ ๊ฒฐํฉํ์ฌ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
- ๋ ์ด์์: ๊ฐ ์์์ ์ ํํ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ํ์ธํธ: ์ค์ ํ๋ฉด์ ํฝ์ ๋ก ๊ทธ๋ฆฝ๋๋ค.
์ด ๊ณผ์ ์ ์ดํดํ๋ฉด ์น ์ฑ๋ฅ ์ต์ ํ์ ํฐ ๋์์ด ๋ผ์. ์๋ฅผ ๋ค์ด:
- CSS๋ ๋ ๋๋ง ์ฐจ๋จ ๋ฆฌ์์ค์ด๋ฏ๋ก, ๋น ๋ฅด๊ฒ ๋ก๋๋๊ณ ํ์ฑ๋๋๋ก ์ต์ ํํด์ผ ํด์.
- JavaScript๋ ํ์ ์ฐจ๋จ ๋ฆฌ์์ค์ด๋ฏ๋ก, ์ ์ ํ ๋น๋๊ธฐ ๋ก๋ฉ์ ์ฌ์ฉํ๊ฑฐ๋ <body> ํ๊ทธ ๋์ ๋ฐฐ์นํ๋ ๊ฒ์ด ์ข์์.
- ๋ ์ด์์๊ณผ ๋ฆฌํ์ธํธ๋ฅผ ์ต์ํํ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ด์.
๐ก Pro Tip: Chrome DevTools์ Performance ํญ์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ๋ถ์ ์น ํ์ด์ง๊ฐ ์ด๋ป๊ฒ ๋ ๋๋ง๋๋์ง ์์ธํ ๋ถ์ํ ์ ์์ด์. ์ด๋ฅผ ํตํด ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ฐพ์ ์ต์ ํํ ์ ์๋ต๋๋ค!
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ์ ์ดํดํ๋ ๊ฒ์ ์น ๊ฐ๋ฐ์์๊ฒ ์ ๋ง ์ค์ํด์. ์ด ์ง์์ ๋ฐํ์ผ๋ก ์ฌ๋ฌ๋ถ์ ๋ ๋น ๋ฅด๊ณ , ๋ ํจ์จ์ ์ด๋ฉฐ, ์ฌ์ฉ์ ๊ฒฝํ์ด ๋ฐ์ด๋ ์น ์ฌ์ดํธ๋ฅผ ๋ง๋ค ์ ์์ ๊ฑฐ์์.
์ฌ๋ฌ๋ถ์ ์น ๊ฐ๋ฐ ์ฌ์ ์ ์ด ์ง์์ด ํฐ ๋์์ด ๋๊ธธ ๋ฐ๋ผ์. ํญ์ ํ์ตํ๊ณ , ์คํํ๊ณ , ๊ฐ์ ํ์ธ์. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฑด, ์ฝ๋ฉ์ ์ฆ๊ธฐ๋ ๊ฑฐ์์! ํ์ดํ ! ๐๐ป๐
๊ด๋ จ ํค์๋
๋๊ธ ์์ฑ
์ด ๊ธ์ ๋ํ ์ฌ๋ฌ๋ถ์ ์๊ฐ์ ๋ค๋ ค์ฃผ์ธ์
๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค
๋๊ธ์ ์์ฑํ๋ ค๋ฉด ๋จผ์ ๋ก๊ทธ์ธํด์ฃผ์ธ์.
๋๊ธ 0
์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์์ง ๋๊ธ์ด ์์ต๋๋ค.