๐Ÿคฟ (1) ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ โ†’ ์›น ํ™”๋ฉด์— ๋‚˜์˜ค๊ธฐ๊นŒ์ง€ - ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •

Kayยท2023๋…„ 2์›” 27์ผ
0

Javascript

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

โ€œ[ํŒจ์ŠคํŠธ์บ ํผ์Šค] ์›น ๊ฐœ๋ฐœ ๊ฐ•์˜ 1์ฃผ์ฐจ: ํ™”๋ฉด๋งŒ๋“ค๊ธฐโ€ ๊ฐ•์˜ ์ˆ˜๊ฐ•์„ ์‹œ์ž‘ํ–ˆ๋‹คโ—๏ธ
์ฒซ ๊ฐ•์˜๋Š” 1์ฃผ์ฐจ์— ๋ฐฐ์šธ ๊ฒƒ๋“ค์— ๋Œ€ํ•ด์„œ ์•Œ๋ ค์ฃผ์‹œ๊ธฐ ์œ„ํ•ด โ€œ์›น์‚ฌ์ดํŠธ์˜ ๊ตฌ์„ฑ์›๋ฆฌโ€์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ๋จผ์ € ์„ค๋ช…ํ•ด์ฃผ์…จ๋‹ค.

์•ž์œผ๋กœ ๋ฐฐ์šธ HTML, CSS, Javascript๋กœ ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ๋ฌด์‹œํ•  ์ˆ˜ ์—†๋Š” ๊ถ๊ธˆ์ฆ!
๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด์„ํ•˜๊ณ  ๋‚ด ์˜๋„๋Œ€๋กœ ์˜ˆ์˜๊ฒŒ ๋งŒ๋“ค์–ด์ค„๊นŒ?

๋งŽ์€ ๋ถ„๋“ค์˜ ์ •๋ฆฌํ•ด์ฃผ์‹  ๋•๋ถ„์— ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ (์••๋„์  ๊ฐ์‚ฌ...!) ํ•˜๋‹จ์— ์ถœ์ฒ˜๋ฅผ ๋ฐํžˆ๋ฉฐ
์ดํ•ดํ•œ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์Šค์Šค๋กœ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

  1. ์›น ๋ธŒ๋ผ์šฐ์ €๋ž€?

    ์›น ๋ธŒ๋ผ์šฐ์ €๋ž€ ์›น ์„œ๋ฒ„์—์„œ ์ด๋™ํ•˜๋ฉฐ ์Œ๋ฐฉํ–ฅ์œผ๋กœ ํ†ต์‹ ํ•˜๊ณ  HTML ๋ฌธ์„œ๋‚˜ ํŒŒ์ผ์„ ์ถœ๋ ฅํ•˜๋Š” ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(GUI) ๊ธฐ๋ฐ˜์˜ ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด์ด๋‹ค. (์ถœ์ฒ˜: ์œ„ํ‚ค๋ฐฑ๊ณผ)

    (๊ฐœ๋… ๊ณต๋ถ€ ์ดˆ๋ฐ˜์—๋Š” ์ดํ•ด๋˜์ง€ ์•Š๋Š” ๋‹จ์–ด๋“ค์ด ๊ฐœ๋… ๊ณต๋ถ€๋ฅผ ๋”์šฑ ์–ด๋ ต๊ฒŒ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๐Ÿฅฒ)

    1 - 1) ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ž€?

    ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(GUI): ์‚ฌ์šฉ์ž๊ฐ€ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž…์ถœ๋ ฅ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์•Œ๊ธฐ ์‰ฌ์šด ์•„์ด์ฝ˜ ๋”ฐ์œ„์˜ ๊ทธ๋ž˜ํ”ฝ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. (์ถœ์ฒ˜: ์œ„ํ‚ค๋ฐฑ๊ณผ)

    1 - 2) ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์€?

    ๋ฌธ์ž ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค(CUI(Character User Interface) โ‰’ CLI (Command Line Interface)): ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ด์ „ํŒ์ด๋ฉฐ, ๋ช…๋ น์–ด ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ํ…์ŠคํŠธ ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์™€ ์ปดํ“จํ„ฐ๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

    • ์ปค๋งจ๋“œ(Command): ์ปดํ“จํ„ฐ๋กœ ์‹œ์Šคํ…œ์ด๋‚˜ ์žฅ์น˜์— ๋Œ€ํ•˜์—ฌ ํŠน์ • ๊ธฐ๋Šฅ์˜ ์‹คํ–‰์„ ์ง€์‹œํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋‚˜ ์‹ ํ˜ธ.

    1 - 3) GUI์™€ CUI(CLI)์™€์˜ ์ฐจ์ด์ ?

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

    1 - 4) ๋ธŒ๋ผ์šฐ์ €์˜ ์ข…๋ฅ˜

    ๊ตฌ๊ธ€ ํฌ๋กฌ, ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ, ํŒŒ์ดํญ์Šค, ์‚ฌํŒŒ๋ฆฌ, ์˜คํŽ˜๋ผ, ๋„ค์ด๋ฒ„ ์›จ์ผ ๋“ฑ์ด ์žˆ๋‹ค.


  1. ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋Šฅ

    ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ์ž์›์„ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์— ํ‘œ์‹œํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

    ์›น ํ‘œ์ค€ํ™” ๊ธฐ๊ตฌ์ธ W3C(World Wide Web Consortium)์—์„œ HTML, CSS ๋ช…์„ธ๋ฅผ ์ง€์ •ํ•˜๊ณ , ๊ฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ๋ช…์„ธ์— ๋”ฐ๋ผ HTML ํŒŒ์ผ์„ ํ•ด์„ํ•ด์„œ ํ‘œ์‹œํ•œ๋‹ค.


  1. ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

  1. ๋ Œ๋”๋ง ์ „

    4 - 1) ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ ํ™•์ธ

    ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ฃผ์†Œ์ฐฝ๊ณผ ๊ฒ€์ƒ‰์—”์ง„๊ณผ ๊ฐ™์ด ์ž‘์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฒ€์ƒ‰์–ด์ธ์ง€, url ์ฃผ์†Œ์ธ์ง€ ํ™•์ธํ•˜๋Š” ์ž‘์—…์„ ๊ฑฐ์นœ๋‹ค.

    4 - 2) ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ

    4 - 2 - 1) ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ์–ด๋“ค

    - IP ์ฃผ์†Œ (Internet Protocol address, IP Address): ๋„คํŠธ์›Œํฌ ์žฅ์น˜๋“ค์ด ์„œ๋กœ๋ฅผ ์ธ์‹ํ•˜๊ณ  ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ˆ˜ํ•œ ๋ฒˆํ˜ธ๋“ค (์˜ˆ์‹œ: 125.209.222.142)
        - IPv4(Internet Protocol version 4): ์ „์„ธ๊ณ„์ ์œผ๋กœ ์‚ฌ์šฉ๋œ ์ฒซ ๋ฒˆ์งธ ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ
        - IPv6(Internet Protocol version 6): IPv6 ์ฃผ์†Œ ๊ณ ๊ฐˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ
            - ์žฅ์ : ๋ณด์•ˆ ๊ฐ•ํ™”, ์ง€๋ฆฌ์  ์ œํ•œX, ์ผ๊ด€๋œ ํ—ค๋”๋กœ ํšจ์œจ์ ์ธ ๋ผ์šฐํŒ…, MAC Address์™€ ๊ฐ™์€ ์ž์ฒด IP ์ฃผ์†Œ ํ• ๋‹น
    - ๋„๋ฉ”์ธ ๋„ค์ž„ (Domain Name):  ์ˆซ์ž๋กœ ํ‘œํ˜„๋œ IP ์ฃผ์†Œ๋ฅผ ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ์˜๋ฌธ์œผ๋กœ ํ‘œ๊ธฐํ•œ ๊ฒƒ (์˜ˆ์‹œ: naver.com)
    - DNS (Domain Name System): ๋„๋ฉ”์ธ์„ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์‹œ์Šคํ…œ
    - ์บ์‹ฑ: ์ปดํ“จํ„ฐ์—์„œ ์š”์ฒญ์ด ์žˆ์„ ๊ฒฝ์šฐ ์ผ์‹œ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์ด๋ฅผ ์บ์‹ฑ์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์บ์‹ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด์ „์— ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ๊ณ„์‚ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

    4 - 2 - 2) IP ์ฃผ์†Œ ์ฐพ๊ธฐ

    • ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ๊ฐ€ url์ผ ๊ฒฝ์šฐ DNS ์„œ๋ฒ„์— ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์ „ ์บ์‹ฑ๋œ DNS ๊ธฐ๋ก์„ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.
    • ๋งŒ์•ฝ ๋„๋ฉ”์ธ์— ํ•ด๋‹นํ•˜๋Š” IP ์ฃผ์†Œ๊ฐ€ ์กด์žฌํ•˜๋ฉด ์บ์‹ฑ๋œ IP ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • (๊ทธ๋ฆผ ์† 1๋ฒˆ ๊ณผ์ •)์บ์‹ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด DNS ์„œ๋ฒ„์— ์š”์ฒญํ•˜์—ฌ (๊ทธ๋ฆผ ์† 2๋ฒˆ ๊ณผ์ •)IP ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    4 - 2 - 3) HTTP ํ†ต์‹ 

    • (๊ทธ๋ฆผ ์† 3๋ฒˆ ๊ณผ์ •)ํด๋ผ์ด์–ธํŠธ(์‚ฌ์šฉ์ž)๋Š” IP ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์„œ๋ฒ„์— ์›นํŽ˜์ด์ง€๋ฅผ ์œ„ํ•ด HTTP request๋ฅผ ๋ณด๋‚ด๊ณ , (๊ทธ๋ฆผ ์† 4๋ฒˆ ๊ณผ์ •)์„œ๋ฒ„๋Š” ์›นํŽ˜์ด์ง€ ์ •๋ณด๋ฅผ ๋‹ด์•„ HTTP response๋ฅผ ๋ณด๋‚ธ๋‹ค.

  1. ๋ Œ๋”๋ง ์ค‘

    5 - 1) ๋ Œ๋”๋ง์ด๋ž€?

    render: 1. ๋งŒ๋“ค๋‹ค 2. ์ฃผ๋‹ค 3. ์ œ์‹œํ•˜๋‹ค ๋ผ๋Š” ๋œป๊ณผ ๊ฐ™์ด ๋ Œ๋”๋ง์€ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์„ ๋งŒ๋“œ๋Š” ๋‹จ๊ณ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    ์ฃผ๋กœ ํ™”๋ฉด์„ ๊ทธ๋ฆฐ๋‹ค๊ณ  ํ‘œํ˜„ํ•˜๋ฉฐ, ์ด ๋‹จ๊ณ„๋ฅผ Critical Rendering Path๋ผ๊ณ  ํ•œ๋‹ค.

    5 - 2) ๋ Œ๋”๋ง ๋™์ž‘ ๊ณผ์ •

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

    • parse: (๋ฌธ์žฅ์„ ๋ฌธ๋ฒ•์ ์œผ๋กœ)๋ถ„์„ํ•˜๋‹ค ๋ผ๋Š” ๋œป์„ ๊ฐ€์กŒ๋‹ค. ์ž‘์„ฑํ•œ ๋ฌธ์žฅ ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฝ์–ด ๋ถ„์„ํ•˜๋Š” ๊ณผ์ •์„ ํŒŒ์‹ฑํ•œ๋‹ค๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

    • 5 - 2 - 1) HTML ๋ฌธ์„œ ํŒŒ์‹ฑ

      ๋„คํŠธ์›Œํฌ๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.


    • 5 - 2 - 2) CSS ๋ฌธ์„œ ํŒŒ์‹ฑ

    ๋„คํŠธ์›Œํฌ๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ CSS ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ CSSOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.


    ์ถœ์ฒ˜: https://code-masterjung.tistory.com/116

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

    • 5 - 2 - 3) Javascript ํŒŒ์‹ฑ
    • ํŒŒ์‹ฑ ๊ณผ์ •์—์„œ <script> ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ Œ๋”๋ง ์—”์ง„์€ ํŒŒ์‹ฑ์„ ์ž ์‹œ ์ค‘๋‹จํ•˜๊ณ  script๋ฅผ ์ฝ๋Š”๋‹ค.
    • Javascript ํŒŒ์‹ฑ์ด ๋๋‚˜๋ฉด ๋ Œ๋”๋ง ์—”์ง„์€ ๋‹ค์‹œ HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•œ๋‹ค.
    • Javascript ํŒŒ์‹ฑ์ด ์šฐ์„ ์‹œ ๋˜๋Š” ์ด์œ ๋Š” DOM ๊ตฌ์กฐ์— ์ ‘๊ทผํ•˜์—ฌ document.write()๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • <script> ํƒœ๊ทธ๊ฐ€ <body> ํƒœ๊ทธ ์ค‘๊ฐ„์— ์œ„์น˜ํ•  ๊ฒฝ์šฐ HTML์„ ํŒŒ์‹ฑํ•˜๋Š” ๋„์ค‘์— ๊ฐ‘์ž๊ธฐ JS ํŒŒ์ผ์„ ์ฝ๊ฒŒ ๋˜๋ฏ€๋กœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์œ„ํ—˜์ด ์žˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ <script> ํƒœ๊ทธ๋ฅผ <body> ํƒœ๊ทธ ์ตœํ•˜๋‹จ์— ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

    • 5 - 2 - 4) Render Tree

      DOM ํŠธ๋ฆฌ์™€ CSSOM ํŠธ๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” Attachment ๊ณผ์ •์„ ํ†ตํ•ด Render Tree๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค.

    1. html ํƒœ๊ทธ์™€ body ํƒœ๊ทธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ๋ Œ๋”ํŠธ๋ฆฌ ๋ฃจํŠธ๋ฅผ ๊ตฌ์„ฑ
    2. DOM ์ตœ์ƒ์œ„ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœํšŒํ•˜๋ฉด์„œ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€์ง€ ์•Š๋Š” ๋…ธ๋“œ๋ฅผ Render Tree์˜ ๊ตฌ์„ฑ์—์„œ ์ œ์™ธ
      • ํƒœ๊ทธ ์š”์†Œ์™€ ๊ฐ™์€ ๋น„์‹œ๊ฐ์  DOM ์š”์†Œ๋Š” Render Tree์—์„œ ์ œ์™ธ
      • display: none; ์†์„ฑ๊ฐ™์ด ํ™”๋ฉด์— ์•„์˜ˆ ๋ณด์ด์ง€ ์•Š๋Š” ๋…ธ๋“œ๋Š” Render Tree์—์„œ ์ œ์™ธ
      • visibility: hidden;์˜ ๊ฒฝ์šฐ ํ™”๋ฉด์—์„œ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋Š” ์†์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— Render Tree์— ๋ฐ˜์˜
    3. ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๋Š” ๋…ธ๋“œ์— CSSOM ๊ทœ์น™์„ ์ฐพ์•„ ์ผ์น˜ํ•˜๋Š” ์Šคํƒ€์ผ ์ ์šฉ
      • ์ด ๊ณผ์ •์—์„œ position์ด๋‚˜ float ์†์„ฑ์„ ๋งŒ๋‚˜๋ฉด ์‹ค์ œ ๊ทธ๋ ค์ง€๋Š” ์œ„์น˜๋กœ Render ๊ฐ์ฒด๊ฐ€ ์ด๋™


    ์ถœ์ฒ˜: https://velog.io/@jhyun_k/๋‚ด-ํ™”๋ฉด์—-๋„ค์ด๋ฒ„๊ฐ€-์ผœ์ง€๋Š”-๊ณผ์ •


    • 5 - 2 - 5) Layout

    • Render ํŠธ๋ฆฌ ๊ตฌ์ถ•์ด ๋๋‚˜๋ฉด ์‹ค์ œ ๋ฐฐ์น˜๊ฐ€ ์‹œ์ž‘๋˜๋Š”๋ฐ ๊ฐ DOM ๋…ธ๋“œ๊ฐ€ ์ •ํ•ด์ง„ ์œ„์น˜์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

    • rem๊ณผ ๊ฐ™์€ ์ƒ๋Œ€ ์ธก์ • ๋‹จ์œ„๊ฐ€ px ๋‹จ์œ„๋กœ ๋ณ€ํ™˜๋œ๋‹ค.


    • 5 - 2 - 6) Paint
    • Layout ๋‹จ๊ณ„์—์„œ ์š”์†Œ๋“ค์˜ ํฌ๊ธฐ, ๋ชจ์–‘, ์œ„์น˜๊นŒ์ง€ ์•Œ์•˜์œผ๋ฉฐ, Paint ๋‹จ๊ณ„์—์„œ๋Š” ์–ด๋–ค ์ˆœ์„œ๋กœ ๊ทธ๋ฆด์ง€ ํŒ๋‹จํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.
      • ์˜ˆ๋ฅผ ๋“ค์–ด z-index๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์œผ๋ฉด ์›ํ•˜๋Š” ํ™”๋ฉด๋Œ€๋กœ ๋‚˜์˜ค์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
    • Paint ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, UI Backend ์š”์†Œ๋ฅผ ์ด์šฉํ•ด ๊ทธ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.
      • ๊ฐ ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” OS ๋ณ„๋กœ ๊ธฐ๋ณธ CSS ๊ฐ€ ๋‹ค๋ฅธ ์ด์œ 
    • ๊ฐ๊ฐ์˜ ์š”์†Œ๋Š” ๋ฐฐ๊ฒฝ > ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€ > ํ…Œ๋‘๋ฆฌ > ์ž์‹ > ์•„์›ƒ๋ผ์ธ ์ˆœ์œผ๋กœ ๊ทธ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

    5 - 3) ๋ Œ๋”๋ง ์—”์ง„๋“ค**

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

์ถœ์ฒ˜: https://roseline.oopy.io/dev/browser-rendering


  1. ๋ Œ๋”๋ง ํ›„
  • Layout(๋ ˆ์ด์•„์›ƒ), Reflow(๋ฆฌํ”Œ๋กœ์šฐ)์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์•ก์…˜ ๋ฐ ์Šคํƒ€์ผ

    • ๊ธ€๋กœ๋ฒŒ ๋ ˆ์ด์•„์›ƒ: ์ „์ฒด์˜ ๋ฐฐ์น˜ ๊ณผ์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
      • ์ฒ˜์Œ ๋ Œ๋”๋ง ํ•  ๋•Œ, ์ „์—ญ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ ์‹œ, ์ฐฝ์ด resize ๋˜๋Š” ๊ฒฝ์šฐ
    • ๋กœ์ปฌ ๋ ˆ์ด์•„์›ƒ: ์ฒซ ๋ Œ๋”๋ง ์ดํ›„ ํŠน์ • ๋ถ€๋ถ„๋งŒ ์žฌ๋ฐฐ์น˜๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ
    • DOM ์กฐ์ž‘(์š”์†Œ ์ถ”๊ฐ€, ์‚ญ์ œ, ๋ณ€๊ฒฝ ๋˜๋Š” ์ˆœ์„œ ๋ณ€๊ฒฝ)
    • form field ์˜ ํ…์ŠคํŠธ ๋ณ€๊ฒฝ์„ ํฌํ•จํ•œ ๋‚ด์šฉ ๋ณ€๊ฒฝ
    • css ์†์„ฑ์˜ ๊ณ„์‚ฐ ๋˜๋Š” ๋ณ€๊ฒฝ
      • width, height, min-height, padding, margin, display, border-width, border, top, left, right, bottom, position, float, overflow-y, font-weight, overflow, font-size, text-align, font-family, line-height, vertical-align, clear, white-space ...
    • ์Šคํƒ€์ผ์‹œํŠธ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐ
    • class ์†์„ฑ ๋ณ€๊ฒฝ(ํฌ๋กฌ์—์„œ๋Š” ์•ˆ๋˜์ง€๋งŒ, IE์—์„œ๋งŒ)
    • ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ์กฐ์ž‘ (ํฌ๊ธฐ ์กฐ์ •, ์Šคํฌ๋กค)
    • ์˜์‚ฌ ํด๋ž˜์Šค ํ™œ์„ฑํ™” (:hover, โ€ฆ)
  • Repaint(๋ฆฌํŽ˜์ธํŠธ)์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์•ก์…˜ ๋ฐ ์Šคํƒ€์ผ

    • ๊ฐ™์€ ํŽ˜์ด์ง€์— ์žˆ๋Š” ์š”์†Œ์˜ ์œ„์น˜์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ์š”์†Œ์˜ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ
    • color, visibility, text-decoration, background-position, outline-color, outline-style, outline-width, background-size, border-style, background, background-image, background-repeat, outline, border-radius, box-shadow, ...

  1. ์ถœ์ฒ˜

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