๐ŸŒ ๋ธŒ๋ผ์šฐ์ €๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€?

Boriยท2023๋…„ 3์›” 31์ผ
0

์–ด์จŒ๋“  ๊ณต๋ถ€

๋ชฉ๋ก ๋ณด๊ธฐ
12/40

๋ธŒ๋ผ์šฐ์ €(Browser)

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

๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— www.google.com์„ ์ž…๋ ฅํ•˜๋ฉด?

ํƒ์ƒ‰(Navigation)

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

DNS(Domain Name System) ์กฐํšŒ

  • ํƒ์ƒ‰์˜ ์ฒซ ๋‹จ๊ณ„๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€์˜ ์ž์›์ด ์–ด๋””์— ์œ„์น˜ํ•˜๋Š”์ง€ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.
  • DNS ์„œ๋ฒ„์— ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์ „์— ์บ์‹ฑ๋œ DNS ๊ธฐ๋ก์„ ๋จผ์ € ํ™•์ธ
    • ๋งŒ์•ฝ ํ•ด๋‹น ๋„๋ฉ”์ธ ์ด๋ฆ„์— ๋งž๋Š” IP ์ฃผ์†Œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, DNS ์„œ๋ฒ„์— IP ์ฃผ์†Œ๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  ์บ์‹ฑ๋œ IP ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜
    • ๋งŒ์•ฝ www.google.com์— ํ•œ ๋ฒˆ๋„ ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋‹ค๋ฉด, DNS ๋ธŒ๋ผ์šฐ์ €๋Š” DNS ์„œ๋ฒ„์— ํ•ด๋‹น ์‚ฌ์ดํŠธ์˜ IP ์ฃผ์†Œ๋ฅผ ์š”์ฒญํ•˜์—ฌ ์‘๋‹ต๋ฐ›๋Š”๋‹ค.
    • IP ์ฃผ์†Œ๋Š” ์ผ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ์บ์‹œ๋˜์–ด ํ›„์† ์š”์ฒญ ์†๋„๋ฅผ ๋†’์ธ๋‹ค.

TCP Handshake

  • IP๋ฅผ ์‘๋‹ต๋ฐ›์€ ํ›„, ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„์™€ TCP 3 Way Handshake๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ์„ ์„ค์ •

TCP(Transmittion Control Protocol)

  • ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์˜ ํ†ต์‹ ์„ ์•ˆ์ •์ ์œผ๋กœ, ์ˆœ์„œ๋Œ€๋กœ, ์—๋Ÿฌ์—†์ด ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • TCP๋Š” UDP๋ณด๋‹ค ์•ˆ์ „ํ•˜์ง€๋งŒ ๋Š๋ฆฌ๋‹ค.

3 Way Handshake

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

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ ํŒจํ‚ท์„ ๋ณด๋ƒ„
  2. ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๋Š” ํŒจํ‚ท์„ ๋ณด๋ƒ„
  3. ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋ฅผ ์ตœ์ข…์ ์œผ๋กœ ์ˆ˜๋ฝํ•˜๋Š” ํŒจํ‚ท์„ ๋ณด๋ƒ„

์‘๋‹ต(Response)

  • ์›น ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ์ด ์„ฑ๋ฆฝ๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” HTTP Request๋ฅผ ๋ณด๋‚ธ๋‹ค.
  • ์›น ์‚ฌ์ดํŠธ๋Š” ๋Œ€๊ฒŒ HTML ํŒŒ์ผ์„ ์š”์ฒญ
  • ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด, ๊ด€๋ จ ์‘๋‹ต ํ—ค๋”์™€ ํ•จ๊ป˜ HTML์˜ ๋‚ด์šฉ์„ ์‘๋‹ต(HTTP Response)

๊ตฌ๋ฌธ ๋ถ„์„(Parsing)

  • ๋ธŒ๋ผ์šฐ์ €๋Š” ์ˆ˜์‹ ๋œ ์ •๋ณด๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„์„ ํ•˜๊ธฐ ์‹œ์ž‘
  • ๊ตฌ๋ฌธ ๋ถ„์„์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ DOM์ด๋‚˜ CSSOM์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋‹จ๊ณ„๋กœ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ํŒŒ์‹ฑ ๊ฒฐ๊ณผ๋Š” ๋ณดํ†ต ๋ฌธ์ž ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋…ธ๋“œ ํŠธ๋ฆฌ์ธ๋ฐ ํŒŒ์‹ฑ ํŠธ๋ฆฌ(parse tree) ๋˜๋Š” ๋ฌธ๋ฒ• ํŠธ๋ฆฌ(syntax tree)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์ด๋Š” ๋ Œ๋”๋Ÿฌ๊ฐ€ ํ™”๋ฉด์— ํŽ˜์ด์ง€๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ Œ๋”๋ง(rendering) : HTML, CSS, JavaScript๋กœ ์ž‘์„ฑ๋œ ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ์‹œ๊ฐ์ ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ

HTML ํŒŒ์‹ฑ๊ณผ DOM ์ƒ์„ฑ

  • ๋ธŒ๋ผ์šฐ์ €์˜ ์š”์ฒญ์— ์˜ํ•ด ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•œ HTML ๋ฌธ์„œ๋Š” ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ
  • ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋ง ํ•˜๊ธฐ ์œ„ํ•ด HTML ๋ฌธ์„œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ(๊ฐ์ฒด)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ
  • ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ ์‘๋‹ต๋ฐ›์€ HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ธ DOM(Document Object Model)์„ ์ƒ์„ฑ

DOM ํŠธ๋ฆฌ ์ƒ์„ฑ ๊ณผ์ •

  • ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ”์ดํŠธ ํ˜•ํƒœ์˜ HTML ๋ฌธ์„œ๋ฅผ ์‘๋‹ต๋ฐ›๋Š”๋‹ค.
  • ์‘๋‹ต๋œ ๋ฐ”์ดํŠธ ํ˜•ํƒœ์˜ HTML ๋ฌธ์„œ๋Š” meta ํƒœ๊ทธ์˜ charset ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ์˜ํ•ด ์ง€์ •๋œ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹(์˜ˆ: UTF-8)์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜
  • ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ HTML ๋ฌธ์„œ๋ฅผ ๋ฌธ๋ฒ•์  ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ฝ”๋“œ์˜ ์ตœ์†Œ ๋‹จ์œ„์ธ ํ† ํฐ(token)๋“ค๋กœ ๋ถ„ํ•ด
  • ๊ฐ ํ† ํฐ๋“ค์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…ธ๋“œ๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  ์ด ๋…ธ๋“œ๋Š” DOM์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ์š”์†Œ๊ฐ€ ๋œ๋‹ค.
  • HTML ์š”์†Œ ๊ฐ„์˜ ๋ถ€์ž ๊ด€๊ณ„(์ค‘์ฒฉ ๊ด€๊ณ„)๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ DOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

CSS ํŒŒ์‹ฑ๊ณผ CSSOM ์ƒ์„ฑ

  • ๋ Œ๋”๋ง ์—”์ง„์€ HTML์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•œ ์ค„์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜์—ฌ DOM์„ ์ƒ์„ฑํ•˜๋‹ค๊ฐ€ CSS๋ฅผ ๋กœ๋“œํ•˜๋Š” link ํƒœ๊ทธ๋‚˜ style ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM ์ƒ์„ฑ์„ ์ผ์‹œ ์ค‘๋‹จ
  • link ํƒœ๊ทธ์˜ href ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ์ง€์ •๋œ CSS ํŒŒ์ผ์ด๋‚˜ style ํƒœ๊ทธ ๋‚ด์˜ CSS๋ฅผ HTML๊ณผ ๋™์ผํ•œ ํŒŒ์‹ฑ ๊ณผ์ •์„ ๊ฑฐ์ณ CSSOM(CSS Object Model)์„ ์ƒ์„ฑ
    • ๋ฐ”์ดํŠธ โžž ๋ฌธ์ž โžž ํ† ํฐ โžž ๋…ธ๋“œ โžž CSSOM
  • CSS ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋˜๋ฉด HTML ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋œ ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ HTML ํŒŒ์‹ฑ ์‹œ์ž‘ํ•˜์—ฌ DOM ์ƒ์„ฑ ์žฌ๊ฐœ

JavaScript ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰

  • DOM์€ HTML ์š”์†Œ์™€ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋กœ DOM API๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ด๋ฏธ ์ƒ์„ฑ๋œ DOM์„ ๋™์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ Œ๋”๋ง ์—”์ง„์€ HTML์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•œ ์ค„์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜์—ฌ DOM์„ ์ƒ์„ฑํ•˜๋‹ค๊ฐ€ script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM ์ƒ์„ฑ์„ ์ผ์‹œ ์ค‘๋‹จ
  • script ํƒœ๊ทธ์˜ src ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ์ง€์ •๋œ JavaScript ํŒŒ์ผ์ด๋‚˜ script ํƒœ๊ทธ ๋‚ด์˜ JavaScript ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜๊ธฐ ์œ„ํ•ด JavaScript ์—”์ง„์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋„˜๊ธด๋‹ค.
  • ๋ Œ๋”๋ง ์—”์ง„์œผ๋กœ๋ถ€ํ„ฐ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ๋ฐ›์€ JavaScript ์—”์ง„์€ JavaScript ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์ถ”์ƒ์  ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST, Abstract Syntax Tree)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰
  • JavaScript ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ Œ๋”๋ง ์—”์ง„์œผ๋กœ ๋‹ค์‹œ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ HTML ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋œ ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ HTML ํŒŒ์‹ฑ ์‹œ์ž‘ํ•˜์—ฌ DOM ์ƒ์„ฑ ์žฌ๊ฐœ

๋ Œ๋”(Render)

  • ๋ Œ๋”๋ง ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋œ HTML๊ณผ CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๊ฐ๊ฐ DOM๊ณผ CSSOM๋ฅผ ์ƒ์„ฑํ•˜๊ณ , DOM๊ณผ CSSOM์€ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๋ Œ๋” ํŠธ๋ฆฌ(render tree)๋ฅผ ์ƒ์„ฑ

์Šคํƒ€์ผ(Style)

  • ๊ณ„์‚ฐ๋œ ์Šคํƒ€์ผ ํŠธ๋ฆฌ(=๋ Œ๋” ํŠธ๋ฆฌ)๋Š” DOM ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋ˆˆ์— ๋ณด์ด๋Š” ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์ƒ์„ฑ

๋ Œ๋” ํŠธ๋ฆฌ

  • ๋ Œ๋”๋ง์„ ์œ„ํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋ Œ๋” ํŠธ๋ฆฌ๋Š” ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์ƒ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜์—ฌ ํ‘œํ˜„๋˜๋Š” ๋…ธ๋“œ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
    • ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ ์ œ์™ธ(์˜ˆ: meta ํƒœ๊ทธ, script ํƒœ๊ทธ)
    • CSS์— ์˜ํ•ด ๋น„ํ‘œ์‹œ ๋˜๋Š” ๋…ธ๋“œ ์ œ์™ธ (์˜ˆ: display: none;)
    • visibility : hidden; ์†์„ฑ์€ ํ™”๋ฉด์ƒ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋ฏ€๋กœ ๋ Œ๋” ํŠธ๋ฆฌ์— ๋ฐ˜์˜
  • ๋ Œ๋” ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ๊ณ„์‚ฐ๋œ ์Šคํƒ€์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    • DOM ํŠธ๋ฆฌ์—์„œ ๋ณด์ด๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๊ด€๋ จ๋˜ ์Šคํƒ€์ผ์„ ๋งž์ถฐ๋ณด๊ณ , CSS ์บ์Šค์ผ€์ด๋“œ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๊ฐ ๋…ธ๋“œ์— ๊ณ„์‚ฐ๋œ ์Šคํƒ€์ผ์„ ๊ฒฐ์ •

๋ ˆ์ด์•„์›ƒ(Layout)

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

ํŽ˜์ธํŠธ(Paint)

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

Layer model

  • ์›น ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ด๋ฏธ์ง€ ๋‹จ์œ„ ์š”์†Œ
  • ๋ ˆ์ด์–ด๋“ค์„ ๋ฐฐ์น˜,ํ•ฉ์„ฑํ•˜์—ฌ ์ตœ์ข…์ ์ธ ์›น ํŽ˜์ด์ง€๋ฅผ ํ‘œํ˜„
  • ํŽ˜์ธํŠธ ๋‹จ๊ณ„์—์„œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋ฅผ ์—ฌ๋Ÿฌ ์ธต์˜ ๋ ˆ์ด์–ด๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ทธ ๋ ˆ์ด์–ด๋“ค์„ ์–ด๋–ค ์ˆœ์„œ๋กœ ๊ทธ๋ฆด์ง€ ๊ฒฐ์ •
  • ์ด ๊ณผ์ •์—์„œ ๋ ˆ์ด์•„์›ƒ ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ ˆ์ด์–ด ํŠธ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์‹œ๊ฐ์ ์ธ ๋ถ€๋ถ„์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด ๊ฐ ๋ ˆ์ด์–ด์— ํ”ฝ์…€์„ ์ฑ„์šด๋‹ค.
  • Layer ๋ถ„๋ฅ˜
    • Paint Layer(Render Layer) : ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ์ƒ์„ฑ๋˜๋Š” ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ ๊ฐ์ฒด๋“ค์„ ํ™”๋ฉด์— ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์š”์†Œ๋“ค์„ ๋ฟŒ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ๋ ˆ์ด์–ด ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒƒ
    • Graphics Layer : Paint Layer์—์„œ ์‹ค์ œ ํ™”๋ฉด์— ๋„์›Œ์ง€๋Š” ์š”์†Œ๋“ค์˜ ์ถœ๋ ฅ์„ GPU์—๊ฒŒ ์œ„์ž„ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ ๋ ˆ์ด์–ด๋กœ GPU๊ฐ€ Graphics Layer๋ฅผ ๋ฌถ์–ด ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ์„ ํ•˜๋“œ์›จ์–ด ๊ฐ€์†/GPU ๊ฐ€์†์ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.
      • Graphics Layer์— ์œ„์น˜ํ•œ ์š”์†Œ๋“ค์€ CPU๊ฐ€ ์•„๋‹Œ GPU๊ฐ€ ์ฒ˜๋ฆฌ
      • GPU๋Š” CPU์— ๋น„ํ•ด์„œ ๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋Œ€ํ•œ ๋น„์šฉ์ด ์ ์–ด ์„ฑ๋Šฅ์— ์œ ๋ฆฌํ•˜๋‹ค.
  • ๋ ˆ์ด์–ด๋Š” ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ๋Š” ๋น„์šฉ์ด ๋น„์‹ผ ์ž‘์—…์ด๋‹ค.

ํ•ฉ์„ฑ(Compositiong)

  • ํŽ˜์ธํŠธ ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ๋ ˆ์ด์–ด๋ฅผ ํ•ฉ์„ฑํ•˜์—ฌ ์‹ค์ œ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์ด ๊ณผ์ •์ด ๋๋‚˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Reflow / Repaint

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

Reflow

  • ์ฒ˜์Œ ๋…ธ๋“œ์˜ ํฌ๊ธฐ์™€ ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์„ ๋ ˆ์ด์•„์›ƒ ์ดํ›„ ๋…ธ๋“œ์˜ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ
  • ๋ ˆ์ด์•„์›ƒ๋ถ€ํ„ฐ ์ดํ›„ ๊ณผ์ •์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•œ๋Š” ๊ฒƒ
  • ์š”์†Œ์— ๊ธฐํ•˜์ ์ธ ์˜ํ–ฅ์„ ์ฃผ๋Š” CSS ์†์„ฑ๊ฐ’ : height, width, left, top, font-size, line-height ๋“ฑ

Repaint

  • ์š”์†Œ์— ๊ธฐํ•˜์ ์ธ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” CSS ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฆฌํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํŽ˜์ธํŠธ๋ถ€ํ„ฐ ์ดํ›„ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ
  • ์š”์†Œ์— ๊ธฐํ•˜์ ์ธ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” CSS ์†์„ฑ๊ฐ’ : background-color, color, visibility, text-decoration ๋“ฑ
  • ๋ฆฌํ”Œ๋กœ์šฐ๋Š” ์ „์ฒด ํ”ฝ์…€์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ถ€ํ•˜๊ฐ€ ํฌ์ง€๋งŒ, ๋ฆฌํŽ˜์ธํŠธ๋Š” ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ํ”ฝ์…€๊ฐ’์„ ์ด์šฉํ•ด ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๊ธฐ ๋–„๋ฌธ์— ๋ฆฌํ”Œ๋กœ์šฐ์— ๋น„ํ•ด ๋ถ€ํ•˜๊ฐ€ ์ ๋‹ค.
  • ๋ฆฌํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฆฌํŽ˜์ธํŠธ๋„ ํ•จ๊ป˜ ๋ฐœ์ƒ

Reflow์™€ Repaint์˜ ์ฐจ์ด

  • Reflow๋Š” ์š”์†Œ์˜ ํฌ๊ธฐ๋‚˜ ์œ„์น˜์˜ ํ”ฝ์…€์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ๊ฐ’์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์•ผํ•  ๋•Œ ๋ฐœ์ƒ
  • Repaint๋Š” ํ”ฝ์…€ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋Š” CSS ์†์„ฑ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ

์ฐธ๊ณ 

0๊ฐœ์˜ ๋Œ“๊ธ€