ex) ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง soft)

๋ณธ ๊ธ€์€ ํ…Œ์ŠคํŠธ ๋ฌธ์„œ ์ž…๋‹ˆ๋‹ค.

Profile Picture
seoungin
2023-02-24

๐Ÿ˜Ž ๋ธŒ๋ผ์šฐ์ €๋ž€?

๋ธŒ๋ผ์šฐ์ €๋ž€ ๋™๊ธฐ(Synchronous)์ ์œผ๋กœ (HTML + CSS), Javascript ์–ธ์–ด๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋‚ด์šฉ์„ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ๋œ ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์— ํ‘œ์‹œํ•˜๋Š”๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์›ํ•˜๋Š” ์ •๋ณด์˜ ์ข…๋ฅ˜๋Š” ํฌ๊ฒŒ Html , img, pdf ๋“ฑ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ •๋ณด์˜ ์ข…๋ฅ˜ ํŠนํžˆ๋‚˜ Html์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์€ ์ฃผ์†Œ๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด๋Š” Url(Uniform Resource Locator) ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์˜ ์ข…๋ฅ˜์—๋Š” ํฌ๋กฌ, ์‚ฌํŒŒ๋ฆฌ, ํŒŒ์ด์–ดํญ์Šค (์˜คํ”ˆ์†Œ์Šค ๊ธฐ๋ฐ˜) , ๋„ค์ด๋ฒ„ ์›จ์ผ ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

image

์ตœ๊ทผ ์œ ์ €๋“ค์˜ ๋ธŒ๋ผ์šฐ์ € ์ ์œ ์œจ ์ž…๋‹ˆ๋‹ค. ํฌ๋กฌ๊ณผ ์‚ฌํŒŒ๋ฆฌ๊ฐ€ ๋Œ€๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•˜๋Š”๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์˜ ๊ตฌ์„ฑ์š”์†Œ

๋ธŒ๋ผ์šฐ์ €์˜ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •์— ์ค‘์‹ฌ์ด ๋˜๋Š” ์š”์†Œ๋“ค์„ ์ค‘์‹ฌ์œผ๋กœ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

image

1. User Interface

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

2. Browser Engine

User Interface์™€ Rendering Engine ์‚ฌ์ด์˜ ๋™์ž‘์„ ์ œ์–ดํ•ด์ฃผ๋Š” ์—”์ง„์ž…๋‹ˆ๋‹ค.

3. Rendering Engine

์›น์—์„œ ๋ Œ๋”๋ง ์—”์ง„์˜ ์—ญํ• ์€ ์š”์ฒญ ๋ฐ›์€ ๋‚ด์šฉ์„ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— Render ์‹œํ‚ค๋Š” ์—ญํ• ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํฌ๋กฌ, ์‚ฌํŒŒ๋ฆฌ๋“ฑ์€ webkit ์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

3-1. Rendering Engine ์˜ ๊ฐœ๋žต์ ์ธ ๋™์ž‘์›๋ฆฌ

image

๋‹ค์Œ์€ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์ด Render ์‹œํ‚ค๋Š” ๋™์ž‘ ์ˆœ์„œ๋ฅผ ๊ฐ„๋žตํžˆ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ๋ Œ๋”๋ง ์—”์ง„์€ ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐญ์€ Html๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  DOM(Document Object Model) tree๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  css ์š”์†Œ๋ฅผ ์ ์šฉ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ CSSOM(Cascading Style Sheets Object Model)tree ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๋„ ๋‘ ํŠธ๋ฆฌ๋ฅผ ๋งค์นญ ์‹œ์ผœ Render tree๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„ ํ™”๋ฉด์— Render tree๋ฅผ ํ†ตํ•ด ๊ตฌ์„ฑํ•œ ์š”์†Œ๋“ค์ด ํ™”๋ฉด์— ์ •ํ™•ํžˆ ๋ฐฐ์น˜ ๋  ์œ„์น˜๋ฅผ ์ •ํ•˜๊ณ , ์ •ํ•ด์ง„ ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™”๋ฉด์— render ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Render tree์—๋Š” ํ™”๋ฉด์— ์ง์ ‘์ ์œผ๋กœ ํ‘œ์‹œ๊ฐ€ ๋  ์š”์†Œ๋“ค๋งŒ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— css ์†์„ฑ์œผ๋กœ visibility : hidden;์ธ ์š”์†Œ๋Š” ๊ดœ์ฐฎ์ง€๋งŒ display: none ์€ Render tree์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

3-2. Html๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜๋˜ ์ค‘ scriptํƒœ๊ทธ๋ฅผ ๋งŒ๋‚œ๋‹ค๋ฉด?

Html ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜๋˜์ค‘

<script></script>

ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋œ๋‹ค๋ฉด Html ๋ฌธ์„œ์˜ ํŒŒ์‹ฑ์„ ์ค‘๋‹จํ•˜๊ณ  js ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ html๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜๋Š” ๊ณผ์ •์— ์žˆ์–ด์„œ 2๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  1. html๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜๋‹ค๊ฐ€ script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด htmlํƒœ๊ทธ๋ฅผ ํŒŒ์‹ฑํ•˜๋‹ค๊ฐ€ ์ค‘๋‹จํ•˜๊ฒŒ ๋˜๊ณ  js ํŒŒ์ผ์˜ ๋กœ๋“œ๊ฐ€ ๋๋‚ ๋•Œ ๊นŒ์ง€ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์ด ์ง€์—ฐ๋œ๋‹ค.
  2. Html๋ฌธ์„œ์˜ ํŒŒ์‹ฑ์ด ๋๋‚˜๊ธฐ ์ „์— script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ์™„์„ฑ๋˜์ง€ ์•Š์€ Dom์— Js๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด script ํƒœ๊ทธ๋Š” bodyํƒœ๊ทธ์˜ ์ตœํ•˜๋‹จ์— ์œ„์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
ํ˜น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ js ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š”๊ฒƒ์„ ์ง€์—ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="UTF-8" />
		<title>script load</title>
	</head>
	<body>
		<script>
			// window.onload๊ฐ€ ๊ฐ€์žฅ ์•ž์— ์œ„์น˜!
			window.onload = function () {
				console.log("afterwindowload");
				var target = document.querySelector("#test");
				console.log(target);
			};
			// DOMContentLoaded๊ฐ€ ๋‘๋ฒˆ์งธ์— ์œ„์น˜!
			document.addEventListener("DOMContentLoaded", function () {
				console.log("afterdomload");
				var target = document.querySelector("#test");
				console.log(target);
			});
			// ์ผ๋ฐ˜ script ์ฝ”๋“œ๊ฐ€ ๊ฐ€์žฅ ๋์— ์œ„์น˜
			console.log("๋ฐ”๋กœ์‹œ์ž‘");
			var target = document.querySelector("#test");
			console.log(target);
		</script>
		<div id="test">test</div>
	</body>
</html>

์œ„์˜ ์ฝ”๋“œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ script ํƒœ๊ทธ๊ฐ€ body ํƒœ๊ทธ์˜ ์‹œ์ž‘๋ถ€๋ถ„์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ onloadํ•จ์ˆ˜ , "DOMContentLoaded"๋ฅผ ํ†ตํ•ด์„œ script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋”๋ผ๋„ js ํŒŒ์ผ์˜ load๋ฅผ ์ง€์—ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

image

์œ„์™€ ๊ฐ™์ด script์˜ ํ•˜๋‹จ์˜ console.log์˜ ์ถœ๋ ฅ์„ ๋ณด๋ฉด null๋กœ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‘ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด์„œ html ํŒŒ์‹ฑ์ด ๋๋‚œ ํ›„ ์š”์†Œ์— ์ ‘๊ทผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— querySelector๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•œ div ํƒœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3-3. DOM tree์™€ CSSOM tree ์˜ ์ƒ์„ฑ

HTML ๋ฌธ์„œ์˜ ํŒŒ์‹ฑ์ด ์ •์ƒ์ ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌ ๋˜์—ˆ๋‹ค๋ฉด, ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ Œ๋”๋ง ์—”์ง„์€ DOM tree๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • DOM tree image
  • CSSOM tree image

3-4. Render tree ๊ตฌ์ถ•

  • Render tree (DOM + CSSOM) image < /> Render tree ์—์„œ๋Š” display:none์ด ๋œ ์š”์†Œ๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3-5. Render tree ๋ฐฐ์น˜

๊ตฌ์ถ•๋œ Render tree๋ฅผ ํ™”๋ฉด์— ๋ฐฐ์น˜๋  ์œ„์น˜๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.(Layout)

3-6. Render tree ๊ทธ๋ฆฌ๊ธฐ

์ •ํ•ด์ง„ ์œ„์น˜์— ๋”ฐ๋ผ์„œ Render tree๋ฅผ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.(painting)

4. Javascript Engine

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋Œ€์ค‘์ ์œผ๋กœ ํฌ๋กฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” v8 ์—”์ง„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จ์š”์•ฝ

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šด์ € ์—”์ง„์„ ํ†ตํ•ด์„œ ํŠน์ • url์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  2. ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ URL ์ฃผ์†Œ ์ค‘์—์„œ ๋„๋ฉ”์ธ ๋„ค์ž„(domain name) ๋ถ€๋ถ„์„ DNS ์„œ๋ฒ„์—์„œ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  3. DNS ์„œ๋ฒ„๋Š” ํ•ด๋‹น ๋„๋ฉ”์ธ ๋„ค์ž„์„ ํ†ตํ•ด์„œ IP์ฃผ์†Œ๋ฅผ ์ฐพ์•„์„œ ํ•„์š”ํ•œ ์ •๋ณด(HTML ๋ฌธ์„œ)๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.
  5. ํŒŒ์‹ฑํ•˜๋˜ ์ค‘ scriptํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ํŒŒ์‹ฑ์„ ์ค‘๋‹จํ•˜๊ณ  jsํŒŒ์ผ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  6. ํŒŒ์‹ฑ์ด ์ข…๋ฃŒ๋˜๋ฉด ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ DOM tree๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  7. Link ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด์„œ stylesheet๋ฅผ ์—ฐ๊ฒฐ๋ฐ›๋Š” ๊ฒฝ์šฐ CSSOM์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  8. DOM tree + CSSOM tree => Render tree ๊ตฌ์ถ• (์—ฌ๊ธฐ์„œ ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š๋Š” ์š”์†Œ๋“ค์€ ๋ฐฐ์ œํ•ฉ๋‹ˆ๋‹ค.)
  9. ๊ตฌ์ถ•๋œ Render tree๋ฅผ ํ™”๋ฉด์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  10. ๋ฐฐ์น˜๋œ Render tree๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

Reference

ยฉ 2023 Adultlee. All rights reserved.Made with โค by ์ด์„ฑ์ธ