๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

์›น ํŽ˜์ด์ง€ ๋กœ๋“œ ๊ณผ์ • / Process of Loading a Web Page ๋ณธ๋ฌธ

Web (back-end)

์›น ํŽ˜์ด์ง€ ๋กœ๋“œ ๊ณผ์ • / Process of Loading a Web Page

9taetae9 2024. 1. 10. 04:18
728x90

1. ๋„คํŠธ์›Œํฌ ์š”์ฒญ
URL ๋ถ„์„: ์‚ฌ์šฉ์ž๊ฐ€ ์ฃผ์†Œ์ฐฝ์— ์ž…๋ ฅํ•œ URL์„ ๋ถ„์„ํ•˜์—ฌ ํ”„๋กœํ† ์ฝœ, ํ˜ธ์ŠคํŠธ ์ด๋ฆ„, ๊ฒฝ๋กœ, ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง ๋“ฑ์„ ํŒŒ์•…ํ•œ๋‹ค.
DNS ์กฐํšŒ: ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด DNS ์„œ๋ฒ„์— ์กฐํšŒ๋ฅผ ๋ณด๋‚ธ๋‹ค.
TCP ์—ฐ๊ฒฐ: DNS ์กฐํšŒ๋ฅผ ํ†ตํ•ด ์–ป์€ IP ์ฃผ์†Œ์™€ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์™€ TCP ์—ฐ๊ฒฐ์„ ํ•œ๋‹ค.
HTTP ์š”์ฒญ: ์„œ๋ฒ„์— HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค. HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋Š” ์š”์ฒญ๋˜๋Š” ๋ฆฌ์†Œ์Šค URL, ํ—ค๋” ์ •๋ณด, ์š”์ฒญ body(POST ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ์‹œ) ๋“ฑ์„ ํฌํ•จํ•œ๋‹ค.

 

*ํ•ด๋‹น ๋‹จ๊ณ„์—์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋จผ์ € ์บ์‹œ๋ฅผ ํ™•์ธํ•˜์—ฌ ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์บ์‹œ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์บ์‹œ์— ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.


2. ์„œ๋ฒ„ ์ฒ˜๋ฆฌ ๋ฐ ์‘๋‹ต
์„œ๋ฒ„ ์ฒ˜๋ฆฌ: ์„œ๋ฒ„๋Š” ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•์ธํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค.
HTTP ์‘๋‹ต: ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋Š” HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€์— ๋‹ด๊ฒจ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†ก๋œ๋‹ค. HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€๋Š” ์‘๋‹ต ์ฝ”๋“œ, ํ—ค๋” ์ •๋ณด, ์‘๋‹ต body(HTML, CSS, JavaScript ํŒŒ์ผ ๋“ฑ)์„ ํฌํ•จํ•œ๋‹ค.

3. ํŽ˜์ด์ง€ ๋ Œ๋”๋ง
HTML ํŒŒ์‹ฑ: HTML ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ DOM(Document Object Model) ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

DOM ํŠธ๋ฆฌ : HTML ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ๋ฐ์ดํ„ฐ


CSS ํŒŒ์‹ฑ: CSS ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ CSSOM(CSS Object Model) ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

CSSOM ํŠธ๋ฆฌ : ์Šคํƒ€์ผ ๊ทœ์น™์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ๋ฐ์ดํ„ฐ


๋ Œ๋” ํŠธ๋ฆฌ ์ƒ์„ฑ: DOM ํŠธ๋ฆฌ์™€ CSSOM ํŠธ๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๋ Œ๋” ํŠธ๋ฆฌ: ๊ฐ ๋…ธ๋“œ์˜ ๋ ˆ์ด์•„์›ƒ ์ •๋ณด์™€ ์Šคํƒ€์ผ ์ •๋ณด๋ฅผ ํฌํ•จํ•จ


๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ: ๋ Œ๋” ํŠธ๋ฆฌ์˜ ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
ํŽ˜์ธํŒ…: ๊ฐ ๋…ธ๋“œ๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ ค ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ

4. ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค ๋กœ๋”ฉ
ํŽ˜์ด์ง€์— ์ด๋ฏธ์ง€, CSS ํŒŒ์ผ, JavaScript ํŒŒ์ผ ๋“ฑ์˜ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ถ”๊ฐ€์ ์ธ HTTP ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค. ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋กœ๋”ฉ๋˜๋ฉด ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ๊ณผ์ •์— ๋ฐ˜์˜๋˜์–ด ํŽ˜์ด์ง€๊ฐ€ ์™„์„ฑ๋œ๋‹ค.

 

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

5. JavaScript ์‹คํ–‰ (์„ ํƒ ์‚ฌํ•ญ)
ํŽ˜์ด์ง€์— JavaScript ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ๋ธŒ๋ผ์šฐ์ €์˜ JavaScript ์—”์ง„์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
JavaScript ์ฝ”๋“œ๋Š” DOM ์š”์†Œ๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ํŽ˜์ด์ง€ ๋™์ž‘์„ ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

6. ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ
ํŽ˜์ด์ง€๊ฐ€ ๋ Œ๋”๋ง๋˜๊ณ  JavaScript ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ํŽ˜์ด์ง€์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
smooth scrolling๊ณผ touch ๋ฐ˜์‘์„ฑ ๋“ฑ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์€ ์ฃผ๋กœ ๋ธŒ๋ผ์šฐ์ €์˜ main thread์— ์˜ํ•ด ์ œ์–ด๋œ๋‹ค.
JavaScript ์ฝ”๋“œ๊ฐ€ main thread๋ฅผ ์ ์œ ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ๋‹ค.

์„ฑ๋Šฅ ์ตœ์ ํ™”
์›น ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„์™€ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์–‘ํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋„คํŠธ์›Œํฌ ์š”์ฒญ ์ตœ์†Œํ™”, ์บ์‹ฑ ํ™œ์šฉ, ์ฝ”๋“œ ์ตœ์ ํ™”, main thread ์ ์œ  ์‹œ๊ฐ„ ๊ฐ์†Œ ๋“ฑ์ด ์ฃผ์š” ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด๋‹ค.

์ถ”๊ฐ€ ์ •๋ณด
๋ธŒ๋ผ์šฐ์ €๋Š” ๋Œ€๋ถ€๋ถ„ single-threaded์ด๋ฉฐ, main thread๊ฐ€ ์ ์œ ๋˜๋ฉด ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ๋‹ค.
JavaScript๋ฅผ defer ๋˜๋Š” async ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ main thread ์ ์œ  ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋ ˆ์ด์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŽ˜์ธํŒ… ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

references :

https://developer.mozilla.org/en-US/docs/Web/Performance/How_browsers_work

 

Populating the page: how browsers work - Web performance | MDN

Users want web experiences with content that is fast to load and smooth to interact with. Therefore, a developer should strive to achieve these two goals.

developer.mozilla.org

https://blog.imqa.io/webpage_loading_process/

 

์›น ํŽ˜์ด์ง€ ๋กœ๋”ฉ ๊ณผ์ • ์ดํ•ดํ•˜๊ธฐ

์›น ํŽ˜์ด์ง€ ๋กœ๋”ฉ ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ์›น ํŽ˜์ด์ง€ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ๋…ธํ•˜์šฐ๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

blog.imqa.io

 

728x90

'Web (back-end)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Tomcat์˜ ๊ตฌ์กฐ, ํ๋ฆ„ ๋ฐ ์šฉ์–ด ๊ฐ„๋‹จ ์ •๋ฆฌ  (0) 2023.12.29