Skip to main content

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•, ๋ Œ๋”๋ง ๊ณผ์ • ์ดํ•ดํ•˜๊ธฐ

ํšจ๋นˆ2024๋…„ 12์›” 30์ผAbout 2 minCSSArticle(s)blogyozm.wishket.comcss

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•, ๋ Œ๋”๋ง ๊ณผ์ • ์ดํ•ดํ•˜๊ธฐ ๊ด€๋ จ

CSS > Article(s)

Article(s)

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•, ๋ Œ๋”๋ง ๊ณผ์ • ์ดํ•ดํ•˜๊ธฐ
๋ Œ๋”๋ง(Rendering)์ด๋ž€, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML, CSS, Javascript๋ฅผ ํ•ด์„ํ•ด, ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ํ™”๋ฉด์— ์‹ค์ œ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ํŒŒ์ผ์„ ์ฝ๋Š” ๊ฒƒ๋งŒ ์•„๋‹ˆ๋ผ, ์›น ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์Šคํƒ€์ผ๊ณผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ํ”ฝ์…€ ๋‹จ์œ„์˜ ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์•„์ฃผ ๋ณต์žกํ•œ ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ Œ๋”๋ง ๊ณผ์ •์€ ๋ธŒ๋ผ์šฐ์ €์˜ ์„ฑ๋Šฅ์„ ์ขŒ์šฐํ•˜๋ฉฐ, ์ด๋ฅผ ์ดํ•ดํ•˜๋ฉด ์›น ํŽ˜์ด์ง€์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ Œ๋”๋ง์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์†Œ๊ฐœํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ €(Web Browser)๋Š” ์›น์—์„œ ํŽ˜์ด์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ํ‘œ์‹œํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ธํ„ฐ๋„ท์ƒ์˜ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—๋Š” Google Chrome, Microsoft Edge, Safari ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ๋‹จ์ˆœํžˆ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ณด๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ค‘์š”ํ•œ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ํฌ๊ฒŒ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(์ฃผ์†Œ์ฐฝ, ๋’ค๋กœ ๊ฐ€๊ธฐ ๋“ฑ), ๋ Œ๋”๋ง ์—”์ง„, Javascript ์—”์ง„, ๋„คํŠธ์›Œํ‚น, ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๋“ฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. ์ด ์ค‘์—์„œ ์ด๋ฒˆ์— ๋‹ค๋ฃฐ ๋‚ด์šฉ์€ ๋ฐ”๋กœ โ€œ๋ Œ๋”๋ง ์—”์ง„โ€์ž…๋‹ˆ๋‹ค.

๋ Œ๋”๋ง(Rendering)์ด๋ž€, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML, CSS, Javascript๋ฅผ ํ•ด์„ํ•ด, ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ํ™”๋ฉด์— ์‹ค์ œ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ํŒŒ์ผ์„ ์ฝ๋Š” ๊ฒƒ๋งŒ ์•„๋‹ˆ๋ผ, ์›น ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์Šคํƒ€์ผ๊ณผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ํ”ฝ์…€ ๋‹จ์œ„์˜ ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์•„์ฃผ ๋ณต์žกํ•œ ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ Œ๋”๋ง ๊ณผ์ •์€ ๋ธŒ๋ผ์šฐ์ €์˜ ์„ฑ๋Šฅ์„ ์ขŒ์šฐํ•˜๋ฉฐ, ์ด๋ฅผ ์ดํ•ดํ•˜๋ฉด ์›น ํŽ˜์ด์ง€์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ Œ๋”๋ง์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์†Œ๊ฐœํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์˜ ์ „์ฒด ๊ณผ์ •

๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML, CSS, Javascript๋ฅผ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ด๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ถœ์ฒ˜: <FontIcon icon="fas fa-globe"/>web.dev
์ถœ์ฒ˜: web.dev

1) HTML ํŒŒ์‹ฑ ๋ฐ DOM ํŠธ๋ฆฌ ์ƒ์„ฑ

๊ฐ€์žฅ ๋จผ์ € ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ํŒŒ์ผ์„ ์ฝ๊ณ  DOM(Document Object Model) ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. DOM์€ HTML ๋ฌธ์„œ์˜ ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ์ฒด ๋ชจ๋ธ๋กœ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML๋กœ ์ž‘์„ฑ๋œ ์—ฌ๋Ÿฌ ์š”์†Œ๋“ค์„ Javascript๊ฐ€ ์ดํ•ดํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜์‹œํ‚จ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

DOM์€ ๋ฌธ์„œ์˜ ์š”์†Œ๋ฅผ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ, ๊ฐ ๋…ธ๋“œ(Node)๋Š” HTML ํƒœ๊ทธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ํŠธ๋ฆฌ๊ตฌ์กฐ๋ฅผ โ€˜DOM ํŠธ๋ฆฌโ€™๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

<!DOCTYPE html>
<html>
  <body>
    <div class="recipe">
      <div class="dish">์‚ถ์€ ๊ณ„๋ž€</div>
      <div class="ingredients">๊ณ„๋ž€ 2๊ฐœ</div>
      <div class="how">15๋ถ„ ๋™์•ˆ ๋ฌผ์„โ€ฆ</div>
    </div>
  </body>
</html>

์œ„์˜ ์ฝ”๋“œ๋ฅผ DOM ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ด๋ณด๋ฉด ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DOM ํŠธ๋ฆฌ๋Š” HTML ๋ฌธ์„œ๋ฅผ ๊ณ„์ธต์ ์œผ๋กœ ํ‘œํ˜„ํ•œ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ, HTML ๋ฌธ์„œ์˜ ๊ฐ ์š”์†Œ(ํƒœ๊ทธ), ์†์„ฑ, ํ…์ŠคํŠธ๋Š” DOM ํŠธ๋ฆฌ์—์„œ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ์ด ํŠธ๋ฆฌ๊ตฌ์กฐ ๋•๋ถ„์—, ๋ถ€๋ชจ-์ž์‹, ํ˜•์ œ ๋…ธ๋“œ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‰ฝ๊ฒŒ ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2) CSS ํŒŒ์‹ฑ ๋ฐ CSSOM ํŠธ๋ฆฌ ์ƒ์„ฑ

HTML์„ ํŒŒ์‹ฑํ•ด DOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด, ์ด์ œ ๋ธŒ๋ผ์šฐ์ €๋Š” CSS ํŒŒ์ผ์„ ์ฝ์–ด CSSOM(CSS Object Model) ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. CSSOM์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ํ‘œํ˜„ํ•œ ๊ฐ์ฒด ๋ชจ๋ธ๋กœ, HTML ๋ฌธ์„œ์˜ ๊ฐ ์š”์†Œ์— ์ ์šฉ๋œ CSS ์Šคํƒ€์ผ ๊ทœ์น™์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, DOM๊ณผ ๊ฒฐํ•ฉํ•ด ํ™”๋ฉด์— ํ‘œํ˜„๋  ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ CSS ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค.

.body {
  padding: 30px;
}

.dish {
  font-size: 20px;
}

.ingredients {
  color: blue;
}

๊ทธ๋Ÿผ CSSOM์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3) ๋ Œ๋” ํŠธ๋ฆฌ ํ˜•์„ฑ

CSS๋ฅผ ํŒŒ์‹ฑํ•ด CSSOM๊นŒ์ง€ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด์ œ DOM๊ณผ CSSOM์„ ๊ฒฐํ•ฉํ•ด ๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ Œ๋” ํŠธ๋ฆฌ๋Š” ํ™”๋ฉด์— ํ‘œ์‹œ๋  ์š”์†Œ๋“ค๋งŒ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐ ์š”์†Œ์— ์ ์šฉ๋  ์Šคํƒ€์ผ๊ณผ ์œ„์น˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. DOM ํŠธ๋ฆฌ์™€ CSSOM์„ ๊ฒฐํ•ฉํ•œ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

4) ๋ ˆ์ด์•„์›ƒ

๋ Œ๋” ํŠธ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฐ ์š”์†Œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ(Layout) ๋‹จ๊ณ„์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ๋Š” ์š”์†Œ๊ฐ€ ํ™”๋ฉด์—์„œ ์–ด๋””์— ์œ„์น˜ํ• ์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ํฌ๊ธฐ๋ฅผ ๊ฐ€์งˆ์ง€ ๋“ฑ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ฝ”๋“œ์—์„œ๋Š” body์— padding: 30px์ด ์ ์šฉ๋˜๋ฉด, class ์ด๋ฆ„์ด dish์™€ ingredients, how์ธ ์š”์†Œ๋Š” 30px์˜ ์—ฌ๋ฐฑ์„ ๋‘๊ณ  ๋ฐฐ์น˜๋˜๊ฒ ์ฃ .

5) ํŽ˜์ธํŠธ

๋ ˆ์ด์•„์›ƒ ๋‹จ๊ณ„ ์ดํ›„, ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์†Œ์˜ ์Šคํƒ€์ผ๊ณผ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ™”๋ฉด์— ํ”ฝ์…€์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋ฅผ ํŽ˜์ธํŠธ(Paint) ๋‹จ๊ณ„๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ๋ ˆ์ด์•„์›ƒ ๋‹จ๊ณ„์—์„œ ๊ณ„์‚ฐ๋œ ์š”์†Œ๋“ค์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•ด, ๊ฐ ์š”์†Œ์— ์ ์šฉ๋œ ์Šคํƒ€์ผ ์†์„ฑ(์ƒ‰์ƒ, ํ…์ŠคํŠธ, ๊ทธ๋ฆผ์ž, ํ…Œ๋‘๋ฆฌ ๋“ฑ)์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฐ ์š”์†Œ์˜ ์‹œ๊ฐ์ ์ธ ์†์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”ฝ์…€ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋“ค์€ ํ™”๋ฉด์— ํ‘œ์‹œ๋  ์ค€๋น„๋ฅผ ํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

class ์ด๋ฆ„์ด dish์ธ ์š”์†Œ๋Š” ๊ธ€์ž ํฌ๊ธฐ 20px, ํ…์ŠคํŠธ ๋‚ด์šฉ์€ โ€˜์‚ถ์€ ๊ณ„๋ž€โ€™์œผ๋กœ ํ™”๋ฉด์— ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค. ingredients ์š”์†Œ๋Š” โ€˜๊ณ„๋ž€ 2๊ฐœโ€™๋ผ๋Š” ํ…์ŠคํŠธ๊ฐ€ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ๊ทธ๋ ค์ง€๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ class ์ด๋ฆ„์ด how์ธ ์š”์†Œ๋Š” ๊ธฐ๋ณธ ์Šคํƒ€์ผ๋กœ โ€˜15๋ถ„ ๋™์•ˆ ๋ฌผ์„โ€ฆโ€™์ด๋ผ๋Š” ํ…์ŠคํŠธ๊ฐ€ ๊ทธ๋ ค์ง€๊ฒ ๋„ค์š”.

ํŽ˜์ธํŠธ ๊ณผ์ •์—์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฐ ์š”์†Œ์˜ ์‹œ๊ฐ์ ์ธ ์†์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŽ˜์ธํŠธ ๋ ˆ์ด์–ด(Paint Layer)๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ์š”. ์š”์†Œ๋“ค์˜ ํŠน์ • ์†์„ฑ(z-index, position, opacity, <video>, <canvas> ๋“ฑ)์— ๋”ฐ๋ผ ๋…๋ฆฝ์ ์ธ ๋ ˆ์ด์–ด๊ฐ€ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6) ์ปดํฌ์ง€ํŒ…

ํŽ˜์ธํŠธ ๊ณผ์ •์—์„œ ์ƒ์„ฑ๋œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ด์–ด๋“ค์€ ์ปดํฌ์ง€ํŒ…(Compositing) ๋‹จ๊ณ„์—์„œ ํ•˜๋‚˜์˜ ํ™”๋ฉด์œผ๋กœ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฐ ๋ ˆ์ด์–ด๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ํ•ฉ์„ฑํ•ด ํ™”๋ฉด์— ์ •ํ™•ํžˆ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์š”์†Œ๊ฐ€ ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ, z-index๋‚˜ position๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ๊ณ ๋ คํ•ด ๊ฒน์นจ ์ˆœ์„œ๋ฅผ ์ •ํ™•ํžˆ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋“ค์ด ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ง€๋Š” ๊ณผ์ •์€ ์•„๋ž˜์˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: <FontIcon icon="fas fa-globe"/>Aerotwist
์ถœ์ฒ˜: Aerotwist

์˜ˆ๋ฅผ ๋“ค์–ด, z-index ๊ฐ’์ด ํฐ ์š”์†Œ๋Š” ๋” ์•ž์ชฝ์— ๋ Œ๋”๋ง ๋˜๊ณ , position ์†์„ฑ๊ฐ’์ด fixed์ผ ๊ฒฝ์šฐ ๋…๋ฆฝ์ ์ธ ๋ ˆ์ด์–ด๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ํ™”๋ฉด ์ด๋™๊ณผ ์ƒ๊ด€์—†์ด ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ ˆ์ด์–ด ๋ถ„๋ฆฌ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณต์žกํ•œ ํ™”๋ฉด์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋…๋ฆฝ์ ์ธ ๋ ˆ์ด์–ด๋Š” ํŽ˜์ด์ง€์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ , ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐฑ์‹ ๋  ์ˆ˜ ์žˆ์–ด ๋ ˆ์ด์•„์›ƒ์ด๋‚˜ ํŽ˜์ธํŠธ ์ž‘์—…์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ ‡๊ฒŒ ๋ณต์žกํ•œ ๋ Œ๋”๋ง ๊ณผ์ •์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ์ตœ์ข… ํ™”๋ฉด์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ค‘์š”ํ•œ ๋ณ€์ˆ˜๋กœ ์ž‘์šฉํ•˜๋Š”๋ฐ์š”. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐ”๋กœ DOM๊ณผ CSSOM์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์„ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋„๋ก ์œ ๋ฐœํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ Œ๋”๋ง์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

๊ทธ๋ ‡๋‹ค๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ , ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ œ์–ดํ•˜๋ ค๋ฉด ์–ด๋– ํ•œ ์ ์„ ์œ ์˜ํ•ด์•ผ ํ• ๊นŒ์š”?

1) DOM ์กฐ์ž‘

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” DOM์„ ์กฐ์ž‘ํ•ด ํ™”๋ฉด์˜ ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ DOM ์กฐ์ž‘์€ ๋ธŒ๋ผ์šฐ์ €์˜ **๋ ˆ์ด์•„์›ƒ(Layout)**๊ณผ ํŽ˜์ธํŠธ(Paint) ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ์œ ๋„ํ•˜์—ฌ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌํ”Œ๋กœ์šฐ๋Š” ๋ ˆ์ด์•„์›ƒ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ž‘์—…์œผ๋กœ, ์š”์†Œ์˜ ํฌ๊ธฐ, ์œ„์น˜, ๋ ˆ์ด์•„์›ƒ ๋“ฑ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ „์ฒด ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, element.style.width = "100px";๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ํ•ด๋‹น ์š”์†Œ์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด์„œ ๋ฆฌํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋‹จ์ˆœํžˆ ํ•ด๋‹น ์š”์†Œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ทธ์™€ ๊ด€๋ จ๋œ ๋ถ€๋ชจ ์š”์†Œ์™€ ์ž์‹ ์š”์†Œ๋“ค๊นŒ์ง€ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ์š”์†Œ์— ๊ฑธ์ณ ๋ ˆ์ด์•„์›ƒ์„ ์žฌ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์—ฐ์‚ฐ๋Ÿ‰๊ณผ ๊ณ„์‚ฐ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฆฌํŽ˜์ธํŠธ๋Š” ๋ ˆ์ด์•„์›ƒ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์ง€๋งŒ, ์š”์†Œ์˜ ์‹œ๊ฐ์  ์Šคํƒ€์ผ(์˜ˆ: ์ƒ‰์ƒ, ๋ฐฐ๊ฒฝ์ƒ‰, ํ…Œ๋‘๋ฆฌ ๋“ฑ)์ด ๋ณ€๊ฒฝ๋  ๋•Œ ํ™”๋ฉด์— ๋‹ค์‹œ ๊ทธ๋ ค์ง€๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌํ”Œ๋กœ์šฐ์— ๋น„ํ•ด ๋น„๊ต์  ๋œ ๋ณต์žกํ•˜์ง€๋งŒ, ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•˜๋ฉด ์—ญ์‹œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ DOM ์กฐ์ž‘์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ์ž‘์—…์„ ์ตœ์ ํ™”ํ•˜์—ฌ ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ์˜ ๋ฐœ์ƒ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

2) ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ฐจ๋‹จ ๋ฌธ์ œ

DOM ์กฐ์ž‘ ์™ธ์—๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ HTML ํŒŒ์‹ฑ ๋‹จ๊ณ„์™€ ๋ Œ๋” ํŠธ๋ฆฌ ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” HTML์„ ํŒŒ์‹ฑํ•˜๋ฉด์„œ <script> ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•  ๋•Œ๊นŒ์ง€ HTML ํŒŒ์‹ฑ์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ Œ๋” ํŠธ๋ฆฌ ์ƒ์„ฑ์ด ์ง€์—ฐ๋˜๊ณ , ๋ Œ๋”๋ง์ด ๋Šฆ์–ด์ง€๋Š” ์ฃผ์š” ์›์ธ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ์†๋„๊นŒ์ง€ ์˜ํ–ฅ์„ ๋ฐ›์•„ ํŽ˜์ด์ง€๊ฐ€ ๋А๋ฆฌ๊ฒŒ ํ‘œ์‹œ๋˜๋ฉด์„œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด <script> ํƒœ๊ทธ์˜ async์™€ defer ์†์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

async๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋“œํ•˜๊ณ , ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋Š” ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

<script async src="script.js"></script>

async ์†์„ฑ์„ ์ž‘์„ฑํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์—, HTML ํŒŒ์‹ฑ๊ณผ ๋™์‹œ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋กœ๋”ฉ๋˜๋Š” ์ฆ‰์‹œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

async ์†์„ฑ์€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋กœ๋“œ๋œ ์ฆ‰์‹œ ์‹คํ–‰๋˜๋ฉฐ, ์—ฌ๋Ÿฌ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

<script> ํƒœ๊ทธ์˜ ๋˜ ๋‹ค๋ฅธ ์†์„ฑ์ธ defer ๋˜ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋“œํ•˜๋Š” ์†์„ฑ์œผ๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<script defer src="script.js"></script>

defer๋Š” async์™€ ๋‹ฌ๋ฆฌ, ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋“œํ•˜๋˜, HTML ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋œ ํ›„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ์†์„ฑ์€ ์—ฌ๋Ÿฌ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ž‘์„ฑ๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๋ฉฐ, HTML ํŒŒ์‹ฑ๊ณผ ์Šคํฌ๋ฆฝํŠธ ๋กœ๋“œ๊ฐ€ ๋™์‹œ์— ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ๋ Œ๋”๋ง ์ง€์—ฐ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•๋ถ„์— async์™€ defer๋Š” ๊ฐ๊ฐ ํŠน์ • ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, async๋Š” ์Šคํฌ๋ฆฝํŠธ ๊ฐ„ ์˜์กด์„ฑ์ด ์—†๊ณ , ๋น ๋ฅด๊ฒŒ ๋กœ๋“œ๋˜์–ด์•ผ ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋…๋ฆฝ์ ์ธ ๋ถ„์„ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ๊ด‘๊ณ  ์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์ด ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, defer๋Š” DOM์ด ์™„์ „ํžˆ ๋กœ๋“œ๋œ ํ›„์— ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๊ฑฐ๋‚˜, ์Šคํฌ๋ฆฝํŠธ ๊ฐ„์˜ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” DOM๊ณผ ๊ธด๋ฐ€ํžˆ ์—ฐ๋™๋˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„œ๋กœ ์˜์กด์„ฑ์„ ๊ฐ€์งˆ ๋•Œ ์•ˆ์ •์ ์ธ ์‹คํ–‰์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

async์™€ defer๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋ฉด ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์œผ๋กœ ์ธํ•œ ์ฐจ๋‹จ ๋ฌธ์ œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์— ๊ฐ ์†์„ฑ์˜ ํŠน์ง•์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์ƒํ™ฉ์— ๋งž๊ฒŒ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.


๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •์ด ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๋ฉฐ, ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์ดํ•ดํ–ˆ๋‹ค๋ฉด ์ด์ œ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ์ „๋žต์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ตœ์ ํ™”๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ๋กœ, ๋น ๋ฅด๊ณ  ๋ถ€๋“œ๋Ÿฌ์šด ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

1) ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ ์ค„์ด๊ธฐ

๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ์ฃผ์š” ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ์ž‘์—…์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋ฉด CPU์™€ GPU์— ๋†’์€ ๋ถ€ํ•˜๋ฅผ ์ฃผ์–ด ํ”„๋ ˆ์ž„ ์†๋„๊ฐ€ ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š”, ๋ฐ”๋กœ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์Šคํƒ€์ผ ์†์„ฑ์„ ํ•œ ๋ฒˆ์— ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์Šคํƒ€์ผ์„ ๋ชจ์•„์„œ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ class๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์Šคํƒ€์ผ์„ ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฆฌํ”Œ๋กœ์šฐ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ํ•จ์ˆ˜๋‚˜, ์†์„ฑ์„ ๋งค๋ฒˆ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜์— ์ €์žฅํ•ด ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์„ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// bad
for (let i = 0; i< 5; i++) {
  el.style.width = target.offsetWidth + 50; // ๋ฐ˜๋ณต๋ฌธ์ด ๋Œ ๋•Œ ๋งค๋ฒˆ ํ˜ธ์ถœ
}

// good
const { offsetWidth } = target;  // ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•ด์„œ ๋ณ€์ˆ˜์— ์ €์žฅ
for (let i = 0; i< 5; i++) {
  el.style.width = offsetWidth + 50;
}

2) ์ด๋ฏธ์ง€์™€ ๋ฆฌ์†Œ์Šค ์ตœ์ ํ™”

์›น ํŽ˜์ด์ง€์—์„œ ์ด๋ฏธ์ง€๋Š” ์‹œ๊ฐ์ ์œผ๋กœ ์ค‘์š”ํ•œ ์š”์†Œ์ง€๋งŒ, ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ปค ๋กœ๋”ฉ ์†๋„์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์‚ฌ์šฉ์ž๊ฐ€ ์ฆ‰์‹œ ๋ณด์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋กœ๋“œํ•˜๋ฉด, ๋ถˆํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ๊ณผ ์ž์› ์†Œ๋น„๋กœ ์ธํ•ด ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” Lazy Loading์„ ์‚ฌ์šฉํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Lazy Loading์€ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์ฝ˜ํ…์ธ ๋ฅผ ์‹ค์ œ๋กœ ๋ณผ ๋•Œ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ธฐ์ˆ ๋กœ, ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ํฌ๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HTML5์—์„œ๋Š” ์ด๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” loading ์†์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<img src="example.jpg" alt="Example Image" loading="lazy">

์œ„์™€ ๊ฐ™์ด ์ด๋ฏธ์ง€ ํƒœ๊ทธ์— loading="lazy" ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ๋ณผ ์œ„์น˜์— ๋„๋‹ฌํ•  ๋•Œ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ค„์ด๊ณ , ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์†๋„๋ฅผ ๋†’์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3) CSS์™€ JS ๋กœ๋“œ ๋ฐฉ์‹ ์ตœ์ ํ™”

CSS์™€ JS ํŒŒ์ผ์ด ๋กœ๋“œ๋˜๊ณ  ์‹คํ–‰๋˜๋Š” ๋ฐฉ์‹ ๋˜ํ•œ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์— ์ค‘์š”ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € CSS ํŒŒ์ผ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. CSS๋Š” HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜๊ธฐ ์ „์— ๋กœ๋“œ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ, CSS ํŒŒ์ผ์€ rel="stylesheet" ์†์„ฑ์„ ํ†ตํ•ด <head> ํƒœ๊ทธ ๋‚ด๋ถ€์— ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ž์„œ ์‚ดํŽด๋ณธ async์™€ defer ์†์„ฑ์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ๋„ JS ํŒŒ์ผ ๋กœ๋“œ ๋ฐฉ์‹์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. async ์†์„ฑ์€ ๋…๋ฆฝ์ ์ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•ด์•ผ ํ•  ๋•Œ, defer ์†์„ฑ์€ DOM๊ณผ ํ•จ๊ป˜ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.


๋งˆ์น˜๋ฉฐ

์ด์ฒ˜๋Ÿผ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์—ญํ• ์„ ์ดํ•ดํ•˜๋ฉด, ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์›์ธ์„ ๋ถ„์„ํ•˜๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DOM ์กฐ์ž‘๊ณผ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ตœ์ ํ™”, ๋ฆฌ์†Œ์Šค ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๋ฅผ ๋†’์ด๊ณ , ๋ธŒ๋ผ์šฐ์ €์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์ฃ .

๋ Œ๋”๋ง ์ตœ์ ํ™”๋Š” ๋‹จ์ˆœํžˆ ํŽ˜์ด์ง€ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ๊ทธ์น˜์ง€ ์•Š๊ณ , ๋ถ€๋“œ๋Ÿฝ๊ณ  ๋งค๋„๋Ÿฌ์šด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ํ•ต์‹ฌ์ ์ธ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์‚ดํŽด๋ณธ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์›น ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์‹ ๊ฒฝ ์“ด๋‹ค๋ฉด, ์‚ฌ์šฉ์ž์™€ ๊ฐœ๋ฐœ์ž ๋ชจ๋‘์—๊ฒŒ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •์„ ๊นŠ์ด ์ดํ•ดํ•˜๊ณ  ์ด๋ฅผ ํ™œ์šฉํ•œ๋‹ค๋ฉด, ๋”์šฑ ๋น ๋ฅด๊ณ  ๋งค๋„๋Ÿฌ์šด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•, ๋ Œ๋”๋ง ๊ณผ์ • ์ดํ•ดํ•˜๊ธฐ

๋ Œ๋”๋ง(Rendering)์ด๋ž€, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML, CSS, Javascript๋ฅผ ํ•ด์„ํ•ด, ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ํ™”๋ฉด์— ์‹ค์ œ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ํŒŒ์ผ์„ ์ฝ๋Š” ๊ฒƒ๋งŒ ์•„๋‹ˆ๋ผ, ์›น ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์Šคํƒ€์ผ๊ณผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ํ”ฝ์…€ ๋‹จ์œ„์˜ ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์•„์ฃผ ๋ณต์žกํ•œ ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ Œ๋”๋ง ๊ณผ์ •์€ ๋ธŒ๋ผ์šฐ์ €์˜ ์„ฑ๋Šฅ์„ ์ขŒ์šฐํ•˜๋ฉฐ, ์ด๋ฅผ ์ดํ•ดํ•˜๋ฉด ์›น ํŽ˜์ด์ง€์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ Œ๋”๋ง์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์†Œ๊ฐœํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.