Front End/Web

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง(๋ฆฌํ”Œ๋กœ์šฐ, ๋ฆฌํŽ˜์ธํŠธ)

๐ŸŒ

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง(rendering)์ด๋ž€ HTML, CSS, JavaScript ๋“ฑ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋ฌธ์„œ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ถœ๋ ฅ๋˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ Œ๋”๋ง ์—”์ง„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

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

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

ํŒŒ์‹ฑ(Parsing)

ํŒŒ์‹ฑ์ด๋ž€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ตฌ๋ฌธ ๋ถ„์„(syntax analysis)์„ ํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค. ํŒŒ์„œ(parser)๊ฐ€ ์ง„ํ–‰ํ•˜๋ฉฐ, ์ผ์ข…์˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋‚˜ ์ปดํŒŒ์ผ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ€์šด๋ฐ ํ•˜๋‚˜์ด๋‹ค. ํŒŒ์„œ๋Š” HTML ํŒŒ์ผ์˜ ์ฝ”๋“œ๋ฅผ ๋ฌธ๋ฒ•์  ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ตœ์†Œ ๋‹จ์œ„์ธ ํ† ํฐ(token)์œผ๋กœ ํ•œ ๋ฒˆ ๋ถ„ํ•ดํ•˜๊ณ , ์ด ํ† ํฐ๋“ค์„ ๋ฌธ๋ฒ•์  ์˜๋ฏธ์™€ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๋…ธ๋“œ(node)๋ผ๋Š” ์š”์†Œ๋กœ ๋ฐ”๊พธ์–ด ์ƒํ•˜ ๊ด€๊ณ„์— ๋”ฐ๋ผ ํ•˜๋‚˜์˜ ํŠธ๋ฆฌ๋ฅผ ํ˜•์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ํŠธ๋ฆฌ๋ฅผ ํŒŒ์Šค ํŠธ๋ฆฌ(parse tree) ํ˜น์€ ๋ฌธ๋ฒ• ํŠธ๋ฆฌ(syntax tree)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋ฌธ์„œ ํŒŒ์‹ฑ(document parsing)์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ๋Š” HTML ํŒŒ์ผ์„ ๋ฐ”ํƒ•์œผ๋กœ DOM ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  CSS ํŒŒ์ผ๋กœ CSSOM ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ํŒŒ์‹ฑํ•œ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

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

๋ธŒ๋ผ์šฐ์ €๋Š” HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜๋ฉด์„œ CSS ์Šคํƒ€์ผ์„ ๋งŒ๋‚˜๋ฉด ํ…์ŠคํŠธ๋ฅผ CSS ์Šคํƒ€์ผ๋ง ๋ ˆ์ด์•„์›ƒ๊ณผ ํŽ˜์ธํŒ…์— ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ธ CSSOM ํŠธ๋ฆฌ๋กœ ํŒŒ์‹ฑํ•˜๊ณ  <link>, <style>ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚  ๊ฒฝ์šฐ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜๋ฉด์„œ HTML ํŒŒ์‹ฑ ๋˜ํ•œ ์ค‘๋‹จํ•œ๋‹ค. ์ด์–ด script ํŒŒ์ผ์„ ๋‹ค์šด ๋ฐ›์•„ ํŒŒ์‹ฑํ•˜๊ณ  ์‹คํ–‰์‹œํ‚จ ๋’ค ๋‹ค์‹œ HTML ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

ํŒŒ์‹ฑ์€ ๋ฌธ์„œ์— ์ž‘์„ฑ๋œ ์–ธ์–ด ๋˜๋Š” ํ˜•์‹์˜ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š”๋ฐ, ํŒŒ์‹ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํ˜•์‹์€ ์ •ํ•ด์ง„ ์šฉ์–ด์™€ ๊ตฌ๋ฌธ ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜•์‹์„ ์ž˜ ๊ฐ–์ถ˜ ๋ฌธ์„œ๋ผ๋ฉด ํŒŒ์‹ฑ ๊ณผ์ •์€ ์ง๊ด€์ ์ด๊ณ  ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰๋œ๋‹ค.

DOM Tree

DOM์€ HTML ๋ฌธ์„œ์˜ ์š”์†Œ๋“ค์˜ ์ค‘์ฒฉ ๊ด€๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋…ธ๋“œ๋“ค์„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” JavaScript ์–ธ์–ด๋งŒ ์•Œ์•„๋“ค์„ ์ˆ˜ ์žˆ์–ด HTML์˜ ํƒœ๊ทธ๋‚˜ ์†์„ฑ๋“ค์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ ์‘๋‹ต์œผ๋กœ ๋ฐ›์•„์˜จ HTML ๋ฌธ์„œ๋Š” ํ…์ŠคํŠธ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์ธ ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”์ค€ ๊ฒƒ์ด DOM ํŠธ๋ฆฌ์ด๋‹ค.

CSSOM Tree

html ํŒŒ์ผ์„ DOM ํŠธ๋ฆฌ๋กœ ํŒŒ์‹ฑํ•˜๋˜ ๋ธŒ๋ผ์šฐ์ €๋Š” <link>, <style>ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด ํŒŒ์‹ฑ์„ ์ž ์‹œ ๋ฉˆ์ถ”๊ณ  ํ•ด๋‹น ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์„ ์„œ๋ฒ„๋กœ ์š”์ฒญํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์š”์ฒญํ•œ ํŒŒ์ผ์„ html ํŒŒ์ผ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŒŒ์‹ฑ์„ ํ•˜๋Š”๋ฐ, ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•ด ๋งŒ๋“  ํŠธ๋ฆฌ๋ฅผ CSSOM์ด๋ผ๊ณ  ํ•œ๋‹ค. CSSOM ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๋‚˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ๋‹ค์‹œ html ํŒŒ์ผ์˜ ํŒŒ์‹ฑ์„ ๋ฉˆ์ท„๋˜ ๋ถ€๋ถ„์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๋งˆ์ € DOM ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค.

๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)

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

๋ Œ๋” ํŠธ๋ฆฌ๋Š” ์ด๋ฆ„์ฒ˜๋Ÿผ ๋ Œ๋”๋ง์„ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ํŠธ๋ฆฌ์ด๋‹ค. ๋ Œ๋”๋ง์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณด์—ฌ์ฃผ๊ณ ์ž ํ•˜๋Š” ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ณด์ด์ง€ ์•Š์„ ์š”์†Œ๋“ค์€ ์ด ํŠธ๋ฆฌ์— ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด DOM ํŠธ๋ฆฌ์˜ <meta>๋‚˜ CSSOM ํŠธ๋ฆฌ์˜ display:none๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ์ง€ ์•Š์•„๋„ ๋˜๊ฑฐ๋‚˜, ๋ณด์—ฌ์ฃผ์ง€ ๋ง์•„์•ผ ํ•  ํƒœ๊ทธ๋‚˜ ์š”์†Œ๋Š” ๋ Œ๋” ํŠธ๋ฆฌ์—์„œ ์ œ์™ธ๋œ๋‹ค.

๋ ˆ์ด์•„์›ƒ

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์—์„œ ๋ ˆ์ด์•„์›ƒ ๊ณผ์ •์€ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ HTML ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ(์œ„์น˜, ํฌ๊ธฐ ๋“ฑ)์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด ์–ด๋””์— ๋ฐฐ์น˜ํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

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

ํŽ˜์ธํŠธ

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

๋ฆฌํ”Œ๋กœ์šฐ(Reflow) / ๋ฆฌํŽ˜์ธํŠธ(Repaint)

์–ด๋–ค ์›น ์ธํ„ฐ๋ž™์…˜(๋ธŒ๋ผ์šฐ์ €์˜ ์ฐฝ ํฌ๊ธฐ ์กฐ์ ˆ, ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋กœ์˜ ์ด๋™ ๋“ฑ)์œผ๋กœ ์ธํ•ด ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ชจ์Šต์„ ๋ฐ”๊พธ์–ด์•ผ ํ•  ๋•Œ ์ผ์–ด๋‚˜๋Š” ๊ณผ์ •์„ ๊ฐ๊ฐ ๋ฆฌํ”Œ๋กœ์šฐ, ๋ฆฌํŽ˜์ธํŠธ๋ผ ํ•œ๋‹ค.

  • ๋ฆฌํ”Œ๋กœ์šฐ(Reflow) : ๋ ˆ์ด์•„์›ƒ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ
  • ๋ฆฌํŽ˜์ธํŠธ(Repaint) : ํŽ˜์ธํŠธ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ
const div = document.createElement('div');
document.body.append(div);
div.textContent = 'hello world';

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

๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ์˜ ์ตœ์ ํ™”

์‚ฌ์šฉ์ž์˜ ๋ˆˆ์— ์ผ๋ จ์˜ ๊ณผ์ •์ด ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ฒ˜๋ฆฌ ๋˜๋ ค๋ฉด ์ดˆ๋‹น 60ํ”„๋ ˆ์ž„(60 FPS)์€ ๋ฐ˜๋“œ์‹œ ์œ ์ง€์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์ฆ‰, 1์ดˆ ์•ˆ์— ๋ธŒ๋ผ์šฐ์ €๋Š” 50์žฅ ๊ฐ€๋Ÿ‰์˜ ๋ ˆ์ด์•„์›ƒ๊ณผ ํŽ˜์ธํŠธ ๊ณผ์ •์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

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

ํ”„๋ ˆ์ž„๋“œ๋ž์˜ ๊ทน๋‹จ์ ์ธ ์˜ˆ

ํ”„๋ ˆ์ž„ ๋“œ๋ž์€ 60 FPS๋ฅผ ์œ ์ง€ํ•˜๋˜ ์ƒํ™ฉ์—์„œ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ณผ๋ถ€ํ•˜๋กœ ์ธํ•ด ํ”„๋ ˆ์ž„ ์ˆ˜๊ฐ€ ์ค„์–ด๋“œ๋Š” ํ˜„์ƒ์„ ๋œปํ•œ๋‹ค. ํ”„๋ ˆ์ž„ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๋ฉด ์œ ์ €๋Š” ํ•ด๋‹น ํ˜„์ƒ์„ โ€˜ํ™”๋ฉด์ด ๋ฉˆ์ถ˜๋‹คโ€™, โ€˜๋ฒ„๋ฒ…์ธ๋‹คโ€™๊ณ  ๋Š๋ผ๊ฒŒ ๋˜์–ด UX์— ์•…์˜ํ–ฅ์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ํ™”๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

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

๋ถˆํ•„์š”ํ•œ ๋ ˆ์ด์•„์›ƒ ์ค„์ด๊ธฐ

๋ ˆ์ด์•„์›ƒ ๊ณผ์ •์—์„œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ณ„์‚ฐํ•  ๊ฒƒ์ด ๋งŽ์•„์ง€๋ฉด ์—”์ง„๋„ ๊ฒฐ๊ตญ ์ปดํ“จํŒ… ํŒŒ์›Œ์— ๊ธฐ๋Œ€๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์ค„์ธ๋‹ค๋ฉด ๋ Œ๋”๋ง ํผํฌ๋จผ์Šค ์ตœ์ ํ™”๋ฅผ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

CSS์—์„œ ๋ ˆ์ด์•„์›ƒ, ํŽ˜์ธํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์†์„ฑ๋“ค

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

  • ๋ฆฌํ”Œ๋กœ์šฐ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์†์„ฑ
    positionwidthheightlefttopright
    bottommarginpaddingborderborder-widthclear
    displayfloatfont-familyfont-sizefont-weightline-height
    min-heightoverflowtext-alignvertical-align...

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

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

  • ๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์†์„ฑ
    backgroundbackground-imagebackground-positionbackground-repeatbackground-sizeborder-radius
    border-styleoutline-colorcolorline-styleoutlineclear
    displayfloatfont-familyfont-sizefont-weightbox-shadow
    visibility...

    visibility / display ๋Œ€์‹  ๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š๊ฒŒ ํ•ด์ฃผ๋Š” opacity ์†์„ฑ์„ ๊ณ ๋ คํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์˜ํ–ฅ์„ ์ฃผ๋Š” ๋…ธ๋“œ ์ค„์ด๊ธฐ

JavaScript + CSS๋ฅผ ์กฐํ•ฉํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋งŽ๊ฑฐ๋‚˜, ๋ ˆ์ด์•„์›ƒ ๋ณ€ํ™”๊ฐ€ ๋งŽ์€ ์š”์†Œ์˜ ๊ฒฝ์šฐ position์„ absolute๋˜๋Š” fixed๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ฃผ๋ณ€ ๋…ธ๋“œ๋“ค์„ ์ค„์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ fixed์™€ ๊ฐ™์ด ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋…ธ๋“œ๊ฐ€ ์ „ํ˜€ ์—†๋Š” ๊ฒฝ์šฐ ๋ฆฌํ”Œ๋กœ์šฐ ๊ณผ์ •์ด ํ•„์š”์—†์–ด ๋ฆฌํŽ˜์ธํŠธ ์—ฐ์‚ฐ ๋น„์šฉ๋งŒ ๋“ค์ผ ์ˆ˜ ์žˆ๋‹ค.


Uploaded by N2T