๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Lect & Tip/html, css, scss

[browser] ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •, css html javasccript parsing process

by ๋‚ฏ์„ ๊ณต๊ฐ„2019 2023. 7. 6.

๋ชฉ์ฐจ

    ์ธํ„ฐ๋„ท ์ฃผ์†Œ์ฐฝ์— URL์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ์‚ฌ์šฉ์ž๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ธฐ๊นŒ์ง€ ๊ฑฐ์น˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

    1. ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ์ฐฝ์— URL์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    2. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ž…๋ ฅ๋œ URL์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด DNS(Domain Name System)์—๊ฒŒ DNS ์กฐํšŒ ์š”์ฒญ์„ ํ•ฉ๋‹ˆ๋‹ค. DNS๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„์„ IP ์ฃผ์†Œ๋กœ ๋งคํ•‘ํ•ด ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    3. DNS๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„์„ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
    4. ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น IP ์ฃผ์†Œ๋กœ ์„œ๋ฒ„์— HTTP ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด ์š”์ฒญ์€ HTTP ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ผ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์š”์ฒญ ๋ฉ”์„œ๋“œ(GET, POST ๋“ฑ)์™€ ํ—ค๋”(์š”์ฒญ์˜ ์ถ”๊ฐ€ ์ •๋ณด)๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
    5. ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๋ฐ›๊ณ  ํ•ด๋‹นํ•˜๋Š” ๋ฆฌ์†Œ์Šค(HTML, CSS, JavaScript ํŒŒ์ผ ๋“ฑ)๋ฅผ ์ฐพ์•„์„œ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต์€ HTTP ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ผ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ƒํƒœ ์ฝ”๋“œ(200, 404 ๋“ฑ)์™€ ์‘๋‹ต ๋ณธ๋ฌธ(๋ฆฌ์†Œ์Šค์˜ ๋‚ด์šฉ)์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
    6. ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์‘๋‹ต ๋ณธ๋ฌธ์— ํฌํ•จ๋œ HTML, CSS, JavaScript ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    7. HTML ํŒŒ์‹ฑ: ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM(Document Object Model)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. DOM์€ ์›น ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ์™€ ์ฝ˜ํ…์ธ ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    8. CSS ํŒŒ์‹ฑ: ๋ธŒ๋ผ์šฐ์ €๋Š” CSS ์Šคํƒ€์ผ ์‹œํŠธ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ CSSOM(CSS Object Model)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. CSSOM์€ DOM๊ณผ ์œ ์‚ฌํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ ์šฉํ•  CSS ์Šคํƒ€์ผ ๊ทœ์น™์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    9. DOM๊ณผ CSSOM ๊ฒฐํ•ฉ: ๋ธŒ๋ผ์šฐ์ €๋Š” DOM๊ณผ CSSOM์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ Œ๋” ํŠธ๋ฆฌ๋Š” ํ™”๋ฉด์— ์‹ค์ œ๋กœ ๊ทธ๋ ค์งˆ ์š”์†Œ๋“ค๋กœ ๊ตฌ์„ฑ๋˜๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ CSS ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ ์š”์†Œ๋“ค์ด ์„ ํƒ๋˜๊ณ , ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    10. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์†Œ๋“ค์„ ํ™”๋ฉด์— ํŽ˜์ธํŒ…ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์›น ํŽ˜์ด์ง€๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์ž…๋ ฅํ•œ URL์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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


    ์›น ์š”์ฒญ๊ณผ ์‘๋‹ต: ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„๊นŒ์ง€์˜ ํ†ต์‹  ๊ณผ์ •

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

    1. URL์„ ํ†ตํ•œ ์„œ๋ฒ„ ์š”์ฒญ: ๋จผ์ €, ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ์ฐฝ์— ์ž…๋ ฅํ•œ URL์€ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด DNS(Domain Name System) ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ IP ์ฃผ์†Œ๋กœ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜๋œ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ ์„œ๋ฒ„์— ์›น ์š”์ฒญ์„ ์ „์†กํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    2. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ์˜ ์‘๋‹ต: ์„œ๋ฒ„๋Š” ์š”์ฒญ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์•„์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฃจํŠธ ์š”์ฒญ์— ๋Œ€ํ•œ ์•”๋ฌต์ ์ธ ๊ทœ์น™์œผ๋กœ์„œ index.html ํŒŒ์ผ์„ ์‘๋‹ตํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
    3. ๋‹ค์ค‘ ๋ฆฌ์†Œ์Šค ์š”์ฒญ: ๋ฐ›์€ index.html ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ถ„์„ํ•˜์—ฌ ๋ Œ๋”๋ง์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ index.html ํŒŒ์ผ์—๋Š” CSS ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” link ํƒœ๊ทธ๋‚˜ JavaScript ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” script ํƒœ๊ทธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋ฒ„์— ์ถ”๊ฐ€ ์š”์ฒญํ•˜๊ฒŒ ๋˜๋ฉฐ, ์„œ๋ฒ„๋Š” ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

    ์›นํŽ˜์ด์ง€ ๋ Œ๋”๋ง:

    1. HTML ํŒŒ์‹ฑ: ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ HTML ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ , ํ•ด๋‹น ํŒŒ์ผ์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ meta ํƒœ๊ทธ์˜ charset ์†์„ฑ์„ ํ†ตํ•ด ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ํ™•์ธํ•˜๊ณ  ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    2. ํ† ํฐํ™”: ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ HTML ํŒŒ์ผ์€ ๋ฌธ๋ฒ•์ ์œผ๋กœ ์˜๋ฏธ ์žˆ๋Š” ์ฝ”๋“œ์˜ ์ตœ์†Œ ๋‹จ์œ„์ธ ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ด๋ฉ๋‹ˆ๋‹ค. ๊ฐ ํ† ํฐ์€ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋˜์–ด ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ƒ์„ฑ๋˜๋Š” ๋…ธ๋“œ๋Š” document ๋…ธ๋“œ, element ๋…ธ๋“œ, attribute ๋…ธ๋“œ, text ๋…ธ๋“œ ๋“ฑ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋“ค ๋…ธ๋“œ๋Š” DOM์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ์š”์†Œ์ž…๋‹ˆ๋‹ค.
    3. DOM ์ƒ์„ฑ: HTML์€ element์˜ ์ง‘ํ•ฉ์œผ๋กœ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ด๋“ค element๋Š” ์ค‘์ฒฉ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๊ฐ element์˜ ์ค‘์ฒฉ ๊ด€๊ณ„์— ๋”ฐ๋ผ ๋ถ€๋ชจ์™€ ์ž์‹ ๊ด€๊ณ„๊ฐ€ ํ˜•์„ฑ๋˜๊ณ , ์ด๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ DOM(Document Object Model)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

    1 URL์„ ํ†ตํ•ด ์„œ๋ฒ„์— ์š”์ฒญ ์ „์†ก
    2 ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์‘๋‹ต ๋ฐ›์Œ
    3 ๋‹ค์ค‘ ๋ฆฌ์†Œ์Šค ์š”์ฒญ (CSS ํŒŒ์ผ, JavaScript ํŒŒ์ผ ๋“ฑ)
    4 HTML ํŒŒ์‹ฑ ๋ฐ ๋ฌธ์ž์—ด ๋ณ€ํ™˜
    5 ํ† ํฐํ™” ๋ฐ ๋…ธ๋“œ ์ƒ์„ฑ
    6 DOM ์ƒ์„ฑ ๋ฐ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌ์„ฑ

    CSS ํŒŒ์‹ฑ๊ณผ CSSOM ์ƒ์„ฑ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ

    ์†Œ๊ฐœ: ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ CSS๋ฅผ ๋กœ๋“œํ•˜๊ณ  CSSOM์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์€ ์›น ํŽ˜์ด์ง€์˜ ๋ Œ๋”๋ง์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” CSS ํŒŒ์‹ฑ๊ณผ CSSOM ์ƒ์„ฑ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

    1. CSS ํŒŒ์‹ฑ๊ณผ DOM ์ƒ์„ฑ ์ค‘๋‹จ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ HTML์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑ ํ•˜๋ฉด์„œ DOM์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CSS๋ฅผ ๋กœ๋“œํ•˜๋Š” link ํƒœ๊ทธ๋‚˜ style ํƒœ๊ทธ๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด DOM ์ƒ์„ฑ์„ ์ผ์‹œ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
    2. CSS ํŒŒ์‹ฑ๊ณผ CSSOM ์ƒ์„ฑ CSS ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด link ํƒœ๊ทธ์˜ href ์†์„ฑ์— ์ง€์ •๋œ ํŒŒ์ผ์„ ์„œ๋ฒ„์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต๋ฐ›์€ CSS ํŒŒ์ผ์ด๋‚˜ style ํƒœ๊ทธ ๋‚ด์˜ CSS๋Š” ๋ฐ”์ดํŠธ์—์„œ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜๋œ ํ›„ ํ† ํฐํ™”๋˜๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ CSSOM์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    CSSOM์€ CSS์˜ ์ƒ์†์„ ๋ฐ˜์˜ํ•˜์—ฌ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ถ€๋ชจ ์š”์†Œ์— ์ ์šฉ๋œ ํ”„๋กœํผํ‹ฐ๋Š” ์ž์‹ ์š”์†Œ์— ์ƒ์†๋˜์–ด CSSOM์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

    1. CSS ํŒŒ์‹ฑ ์™„๋ฃŒ ํ›„ DOM ์ƒ์„ฑ ์žฌ๊ฐœ CSS ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ์ค‘๋‹จ๋œ ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ํŒŒ์‹ฑํ•˜๋ฉด์„œ DOM ์ƒ์„ฑ์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” CSSOM๊ณผ DOM์ด ๊ฒฐํ•ฉ๋˜์–ด Render Tree๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    Render Tree๋Š” ๋ Œ๋”๋ง์„ ์œ„ํ•œ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ์‹ค์ œ ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜๋Š” ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋‚˜ CSS์˜ display: none ์†์„ฑ์„ ๊ฐ€์ง„ ๋…ธ๋“œ๋Š” ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

    1. Render Tree์™€ ๋ Œ๋”๋ง ์™„์„ฑ๋œ Render Tree๋Š” ๊ฐ HTML ์š”์†Œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Render Tree๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํ”ฝ์…€์„ ๋ Œ๋”๋ง ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    ์ด๋Ÿฌํ•œ ๋ Œ๋”๋ง ๊ณผ์ •์€ ํ•„์š”์— ๋”ฐ๋ผ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด JavaScript์— ์˜ํ•œ ๋…ธ๋“œ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ, ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ํฌ๊ธฐ ๋ณ€๊ฒฝ, ์Šคํƒ€์ผ ๋ณ€๊ฒฝ ๋“ฑ์ด ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ๋นˆ๋ฒˆํ•œ re-rendering์€ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    1. JavaScript ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰ HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์ƒ์„ฑ๋œ DOM์€ JavaScript๋กœ ๋™์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” DOM API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. JavaScript ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ DOM์„ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด JavaScript ํŒŒ์‹ฑ ๋ฐ ์‹คํ–‰์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

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

    JavaScript ํŒŒ์‹ฑ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

    • Tokenizing (ํ† ํฐํ™”): ๋‹จ์ˆœํ•œ ๋ฌธ์ž์—ด์ธ JavaScript ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ ‰์‹œ์ปฌ ๋ถ„์„ํ•˜์—ฌ ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ดํ•ฉ๋‹ˆ๋‹ค.
    • Parsing (ํŒŒ์‹ฑ): ํ† ํฐ์˜ ์ง‘ํ•ฉ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์—ฌ ์ถ”์ƒ์  ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. AST๋Š” ํ† ํฐ์˜ ๋ฌธ๋ฒ•์  ์˜๋ฏธ์™€ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
    • Byte code ์ƒ์„ฑ ๋ฐ ์‹คํ–‰: ํŒŒ์‹ฑ๋œ AST๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ์ฝ”๋“œ์ธ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๊ณ , ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์˜ํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

    JavaScript ์—”์ง„์€ ๋ธŒ๋ผ์šฐ์ €์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตฌ๊ธ€ ํฌ๋กฌ ๋ฐ Node.js๋Š” V8 ์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ณ , ํŒŒ์ด์–ดํญ์Šค๋Š” SpiderMonkey ์—”์ง„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

    ๋˜ํ•œ, JavaScript ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰์€ HTML ๋ฌธ์„œ์˜ ํŒŒ์‹ฑ ๊ฒฐ๊ณผ๋กœ ์ƒ์„ฑ๋œ DOM์„ ๋™์ ์œผ๋กœ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. JavaScript ์ฝ”๋“œ๋Š” ํŒŒ์‹ฑ ๋˜์–ด AST๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๊ณ  ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

    ๋ Œ๋”๋ง ๊ณผ์ •์€ ํ•„์š”์— ๋”ฐ๋ผ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ๋นˆ๋ฒˆํ•œ re-rendering์ด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ ์ ˆํ•œ ์ตœ์ ํ™”๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋ Œ๋”๋ธ”๋กœ๊ทธ ๊ธ€์„ ์œ„ํ•ด ์ž‘์„ฑํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ตฌ์กฐ์ ์ธ ์š”์•ฝ๊ณผ ํ•จ๊ป˜ ํ‘œ๋กœ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.


    CSS ํŒŒ์‹ฑ๊ณผ CSSOM ์ƒ์„ฑ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ

    ์†Œ๊ฐœ

    ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑ ํ•˜์—ฌ DOM์„ ์ƒ์„ฑํ•˜๋ฉฐ, CSS๋ฅผ ๋กœ๋“œํ•˜์—ฌ CSSOM์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” CSS ํŒŒ์‹ฑ๊ณผ CSSOM ์ƒ์„ฑ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

    1. CSS ํŒŒ์ผ ๋กœ๋“œ: link ํƒœ๊ทธ์˜ href ์†์„ฑ์— ์ง€์ •๋œ CSS ํŒŒ์ผ์„ ์„œ๋ฒ„์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    2. CSS ํŒŒ์‹ฑ ๊ณผ์ •: ์‘๋‹ต๋ฐ›์€ CSS ํŒŒ์ผ์€ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ ํ›„ ํ† ํฐํ™”, ๋…ธ๋“œํ™”๋˜์–ด CSSOM์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    3. CSSOM ์ƒ์„ฑ: CSSOM์€ CSS์˜ ์ƒ์†์„ ๋ฐ˜์˜ํ•˜์—ฌ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ถ€๋ชจ ์š”์†Œ์— ์ ์šฉ๋œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ž์‹ ์š”์†Œ์— ์ƒ์†๋ฉ๋‹ˆ๋‹ค.

    DOM ์ƒ์„ฑ ์žฌ๊ฐœ

    CSS ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ์ค‘๋‹จ๋œ ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ํŒŒ์‹ฑ ํ•˜๋ฉด์„œ DOM ์ƒ์„ฑ์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค.

    Render Tree ์ƒ์„ฑ

    1. DOM๊ณผ CSSOM ๊ฒฐํ•ฉ: ์™„์„ฑ๋œ DOM๊ณผ CSSOM์€ Render Tree๋กœ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค.
    2. Render Tree ๊ตฌ์„ฑ: Render Tree๋Š” ์‹ค์ œ ํ™”๋ฉด์— ๋ Œ๋”๋ง ๋˜๋Š” ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋Š” ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

    ๋ Œ๋”๋ง๊ณผ ๋ฆฌ๋ Œ๋”๋ง

    • ๋ Œ๋”๋ง: Render Tree๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๊ณ  ํ™”๋ฉด์— ํ”ฝ์…€์„ ๋ Œ๋”๋ง ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฆฌ๋ Œ๋”๋ง: JavaScript๋กœ ์ธํ•œ ๋…ธ๋“œ ์ถ”๊ฐ€/์‚ญ์ œ, ์ฐฝ ํฌ๊ธฐ ๋ณ€๊ฒฝ, ์Šคํƒ€์ผ ๋ณ€๊ฒฝ ๋“ฑ์œผ๋กœ ์ธํ•ด ๋ Œ๋”๋ง ๊ณผ์ •์ด ๋ฐ˜๋ณต๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

    1. ์ œ์–ด๊ถŒ ์ด์ „: script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM ์ƒ์„ฑ์„ ์ผ์‹œ ์ค‘๋‹จํ•˜๊ณ  JavaScript ํŒŒ์ผ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    2. JavaScript ํŒŒ์‹ฑ: JavaScript ์ฝ”๋“œ๋Š” ํ† ํฐํ™”, ํŒŒ์‹ฑ ํ•˜์—ฌ AST๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    3. ์‹คํ–‰: AST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜์–ด JavaScript ์—”์ง„์— ์˜ํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€