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

Daily Front_Minhhk

๋ธŒ๋ผ์šฐ์ € ๋ณธ๋ฌธ

Code๊ฐœ๋ฐœ์ผ์ง€

๋ธŒ๋ผ์šฐ์ €

Minhhk 2023. 1. 16. 14:01
๐Ÿ’ป ๋ธŒ๋ผ์šฐ์ €

์›น ๋ธŒ๋ผ์šฐ์ €๋ผ๊ณ ๋„ ํ•˜๊ณ , ์›น ํƒ์ƒ‰๊ธฐ๋ผ๊ณ ๋„ ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €๋Š” ์›น ์„œ๋ฒ„์—์„œ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ํ†ต์‹ ์„ ํ•˜๋ฉฐ HTML ๋ฌธ์„œ ๋ฐ ๊ทธ๋ฆผ, ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ๋“ฑ์˜ ์ปจํ…์ธ ๋ฅผ ์—ด๋žŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” GUI ๊ธฐ๋ฐ˜์˜ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ํŽ˜์ด์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜๊ธฐ ์œ„ํ•ด ์‘์šฉ ๊ณ„์ธต์˜ ๋Œ€ํ‘œ์ ์ธ ํ”„๋กœํ† ์ฝœ์ธ HTTP๋ฅผ ํ†ตํ•ด ์†ก์ˆ˜์‹ ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ–ฅ๏ธ ๋ธŒ๋ผ์šฐ์ €์˜ ํŠน์ง•๊ณผ ์›น์˜ ๋™์ž‘ ์›๋ฆฌ

๋ธŒ๋ผ์šฐ์ €๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ์ž์›(Resource)๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญ(Request)ํ•˜๊ณ , ์„œ๋ฒ„์˜ ์‘๋‹ต(Response)์„ ๋ธŒ๋ผ์šฐ์ €์— ๋„์šฐ๋Š”(Rendering) ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ž์›์€ ๋Œ€๊ฐœ HTML ๋ฌธ์„œ์ด๋‚˜ ๊ฐ€๋” PDF, ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ๋“ฑ ๋‹ค๋ฅธ ํ˜•ํƒœ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž์›์˜ ์ฃผ์†Œ๋Š” URI(Uniform Resource Identifier)๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ๋ฆ„ ์ˆœ์„œ๋Š” ์‚ฌ์šฉ์ž๋กœ ๋ถ€ํ„ฐ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰

 

๋ธŒ๋ผ์šฐ์ €์˜ ๊ตฌ์กฐ๋ฅผ

→ ๊ฐ„๋‹จํžˆ ๋„์‹ํ™”

 

๋ธŒ๋ผ์šฐ์ € ์—”์ง„(Browser Engine)

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ Œ๋”๋ง ์—”์ง„ ์‚ฌ์ด์˜ ๋™์ž‘์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ์—”์ง„์˜ ์ฃผ๋œ ์—ญํ• ์€ HTML ๋ฌธ์„œ์™€ ๊ธฐํƒ€ ์ž์›์˜ ์›นํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉ์ž์˜ ์žฅ์น˜์— ์‹œ๊ฐ ํ‘œํ˜„์œผ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋ฉฐ, ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(DOM) ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ์—”์ง„(Layout Engine)๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ, ๋ Œ๋”๋ง ์—”์ง„(Rendering Engine)๊ณผ ๋ฐ€์ ‘ํ•œ ์—ฐ๊ด€์ด ์žˆ์–ด ๋ณดํ†ต์€ ๋ธŒ๋ผ์šฐ์ € ์—”์ง„๊ณผ ๋ Œ๋”๋ง ์—”์ง„์„ ๋ฌถ์–ด ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์œผ๋กœ ๋ถ€๋ฅด๋‚˜ ์—ฌ๊ธฐ์„œ๋Š” ๊ตฌ๋ถ„ํ•ด์„œ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

 

๋ Œ๋”๋ง ์—”์ง„(Rendering Engine)

์š”์ฒญํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. HTML, CSS ๋“ฑ์„ ํŒŒ์‹ฑํ•ด ์ตœ์ข…์ ์œผ๋กœ ํ™”๋ฉด์— ๊ทธ๋ ค์ฃผ๋ฉฐ, ๋ Œ๋”๋ง ์—”์ง„์€ HTML ๋ฐ XML ๋ฌธ์„œ์™€ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

ํ†ต์‹ (Networking)

HTTP ์š”์ฒญ๊ณผ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ํ”Œ๋žซํผ์˜ ๋…๋ฆฝ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค์ด๊ณ  ๊ฐ ํ”Œ๋žซํผ์˜ ํ•˜๋ถ€์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ๊ณผ ๊ฐ™์€ ๋ถ€๋ถ„์€ ์ด์ „ ์„น์…˜์—์„œ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ํ•ด๋‹น ๊ฐœ๋…์— ๋Œ€ํ•ด ๋ฏธ์ง„ํ•˜๋‹ค๋ฉด ๋‹ค์‹œ ์ด์ „ ์„น์…˜์˜ ๋„คํŠธ์›Œํฌ ์œ ๋‹›์—์„œ ๋ณต์Šตํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ด์„๊ธฐ(JavaScript Interpreter)

JavaScript๋Š” ์ฝ”๋“œ๋ฅผ ์œ„์—์„œ ์•„๋ž˜๋กœ ํ•œ ์ค„์”ฉ ์ฝ์–ด๋‚ด๋ ค๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ํŒŒ์‹ฑ(parsing)ํ•˜๋Š” ์–ธ์–ด(Interpreted Language)

๋”ฐ๋ผ์„œ JavaScript ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ด์„๊ธฐ(JavaScript Interpreter)๊ฐ€ ํ•„์š”์— ์˜ํ•ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์ „์šฉ ์—”์ง„์„ ์‚ฌ์šฉ

  • Rhino(๋ชจ์งˆ๋ผ, ์ž๋ฐ”๋กœ ๊ฐœ๋ฐœ)
  • SpiderMonkey(ํŒŒ์ด์–ดํญ์Šค)
  • V8(ํฌ๋กฌ) โœ”
  • JavascriptCore(์‚ฌํŒŒ๋ฆฌ, react native app)
  • Chakra(edge)

ํฌ๋กฌ์˜ V8 ์—”์ง„

 

ํž™ ๋ฉ”๋ชจ๋ฆฌ(Heap Memory)

ํž™ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด๋ถ€์—๋Š” ๋‹ค์–‘ํ•œ ๊ณต๊ฐ„์ด ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ, ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋Š” ์ปค๋‹ค๋ž—๊ฒŒ ํ•˜๋‚˜์˜ ๊ณต๊ฐ„์œผ๋กœ ๋˜์–ด์žˆ๋‹ค๊ณ  ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํž™(heap)์€ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

ํž™์„ ์ด์šฉํ•˜์—ฌ V8์€ ๊ฐ์ฒด ๋˜๋Š” ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ €์žฅ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” V8 ์—”์ง„ ๋‚ด๋ถ€์—์„œ ๊ฐ€์žฅ ํฐ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋˜ํ•œ ๋ฐœ์ƒํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

 

 

์ฝœ ์Šคํƒ(Call Stack)

JavaScript๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์˜ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

์ฝœ ์Šคํƒ์ด ํ•˜๋‚˜๋ผ๋Š” ์˜๋ฏธ์ด๋ฉฐ, ํ•œ ๋ฒˆ์— ํ•œ ์ž‘์—…๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝœ ์Šคํƒ์€ ํ”„๋กœ๊ทธ๋žจ ์ƒ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ๊ธฐ๋กํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ์ฝœ ์Šคํƒ์˜ ๊ฐ€์žฅ ์ƒ๋‹จ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์Šคํƒ์ด ํ›„์ž…์„ ์ถœ(LIFO)์ด๋ผ๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์–ด๋‚˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ๋๋‚œ๋‹ค๋ฉด, ํ•ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์ฝœ ์Šคํƒ์˜ ๊ฐ€์žฅ ์ƒ๋‹จ์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

UI ๋ฐฑ์—”๋“œ

๋ Œ๋”๋ง ์—”์ง„์ด ๋ถ„์„ํ•œ Render Tree๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ๊ทธ๋ฆฌ๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

Select, Input ์ฐฝ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ์ ์ธ ์œ„์ ฏ์„ ๊ทธ๋ ค์ค๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ์—์„œ ๋ช…์‹œํ•˜์ง€ ์•Š์€ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ, OS ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” ํŠน์ •ํ•œ ๋ช…๋ น ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ **๋ช…๋ น์–ด ๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค(Command Line Interface, CLI)**์ด๋ฉฐ ๋˜ ํ•˜๋‚˜๋Š” **์ผ๊ด„ ์ฒ˜๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค(Batch Interface)**์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค (Graphic User Interface, GUI) ์ž…๋‹ˆ๋‹ค.

 

์›น ์Šคํ† ๋ฆฌ์ง€ ์ข…๋ฅ˜

 

๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€(localStorage)

๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด๋Š” ๋ณด๊ด€ ๊ธฐํ•œ์ด ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ € ํƒญ์ด ๋‹ซํžˆ๊ฑฐ๋‚˜, ์ปดํ“จํ„ฐ๋ฅผ ์žฌ๋ถ€ํŒ…ํ•ด๋„ ์ด ์ €์žฅ์†Œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ ,

Windows ์ „์—ญ ๊ฐ์ฒด์˜ localStorage๋ผ๋Š” ์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ์ €์žฅ๊ณผ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋„๋ฉ”์ธ ๋งˆ๋‹ค ๋ณ„๋„์˜ localStorage๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ ๋„๋ฉ”์ธ๋งŒ ๊ฐ™์œผ๋ฉด ์ „์—ญ์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

์„ธ์…˜์Šคํ† ๋ฆฌ์ง€(sessionStorage)

์„ธ์…˜์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด๋Š” ํ•˜๋‚˜์˜ ์„ธ์…˜๋งŒ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ณด๊ด€ํ•˜์ง€ ์•Š๊ณ  ๋ธŒ๋ผ์šฐ์ง•๋˜๊ณ  ์žˆ๋Š” ๋ธŒ๋ผ์šฐ์ € ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ํƒญ์ด๋‚˜ ์ฐฝ์„ ๋‹ซ์œผ๋ฉด ์ด ๊ฐ์ฒด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

 

๋ธŒ๋ผ์šฐ์ง•์ด๋ž€ ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด์„œ ์ธํ„ฐ๋„ท์— ๋“ค์–ด๊ฐ€ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฐพ๋Š” ํ–‰์œ„๋ฅผ ๋งํ•˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ € ์ปจํ…์ŠคํŠธ๋ž€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฌธ์„œ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ํ™˜๊ฒฝ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๋ธŒ๋ผ์šฐ์ง• ์ปจํ…์ŠคํŠธ๋Š” ํŠน์ • ์ถœ์ฒ˜ ๋ฐ ํ™œ์„ฑํ™”๋˜๊ณ  ์žˆ๋Š” ๋ฌธ์„œ์˜ ์ถœ์ฒ˜, ํ‘œ์‹œํ–ˆ๋˜ ๋ชจ๋“  ๋ฌธ์„œ์˜ ๋ฐฉ๋ฌธ๊ธฐ๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์žฅ๊ณผ ์กฐํšŒ๋Š” Windows ์ „์—ญ ๊ฐ์ฒด์˜ sessionStorage๋ผ๋Š” ์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๋„๋ฉ”์ธ ๋ณ„๋กœ ๋ณ„๋„๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์•Œ์•„๋‘ฌ์•ผ ํ•  ์ ์€ ๋ธŒ๋ผ์šฐ์ € ์ปจํ…์ŠคํŠธ๊ฐ€ ๋‹ค๋ฅด๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ์˜์—ญ์ด ๋œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฆ‰, ๋ธŒ๋ผ์šฐ์ € ๋‘ ๊ฐœ๋ฅผ ์‹คํ–‰ํ•ด ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ์—ด์—ˆ์„ ๋•Œ, ๋ธŒ๋ผ์šฐ์ €์˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅด๋ฏ€๋กœ ์ด ๋‘ ํŽ˜์ด์ง€์˜ sessionStorage๋Š” ๊ฐ ๋ณ„๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ์ธ์ง€๋˜์–ด ์„œ๋กœ ๋ฐ์ดํ„ฐ์˜ ๊ณต์œ ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

 

 

 


 

 

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •

์•„๋ž˜๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง์ด ๋˜๋Š” ๊ณผ์ •์„ ๊ฐ„๋‹จํžˆ ๋„์‹ํ™”

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์›น ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ HTML, CSS, JavaScript์™€ ๊ฐ™์€ ์›น์‚ฌ์ดํŠธ์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค์šด ๋ฐ›์Šต๋‹ˆ๋‹ค.
  3. ๋ Œ๋”๋ง ์—”์ง„์€ ์ „๋‹ฌ๋ฐ›์€ HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑ(parsing)ํ•ด DOM(Document Object Model, ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ) ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  4. ์ด์–ด์„œ ๋‹ค์šด ๋ฐ›์€ ์™ธ๋ถ€ CSS ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ํฌํ•จ๋œ ์Šคํƒ€์ผ ์š”์†Œ๋ฅผ ํŒŒ์‹ฑ(parsing)ํ•ด CSSOM(CSS Object Model, CSS ๊ฐ์ฒด ๋ชจ๋ธ) ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  5. ๋งŒ๋“  DOM ํŠธ๋ฆฌ์™€ CSSOM ํŠธ๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ•ด Render ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  6. ๋ ˆ์ด์•„์›ƒ ๊ณผ์ •์„ ํ†ตํ•ด ๊ฐ ์š”์†Œ๋ฅผ ์–ด๋””์— ๋ฐฐ์น˜ํ•  ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  7. ๋ ˆ์ด์•„์›ƒ ๊ณผ์ •์ด ๋๋‚˜๋ฉด UI ๋ฐฑ์—”๋“œ์—์„œ Render ํŠธ๋ฆฌ๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ paint๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

 

ํŒŒ์‹ฑ(Parsing)

ํŒŒ์‹ฑ์ด๋ž€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ตฌ๋ฌธ ๋ถ„์„(syntax analysis)์„ ํ•˜๋Š” ๋‹จ๊ณ„,,,

 

 

๋ ˆ์ด์•„์›ƒ

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์—์„œ “๋ ˆ์ด์•„์›ƒ” ๊ณผ์ •์€ ์šฐ๋ฆฌ๊ฐ€ ์›น ๊ฐœ๋ฐœ์—์„œ ํ‰์†Œ ๋งํ•˜๋Š” ์›น ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์งœ๊ธฐ, ๋””์ž์ด๋„ˆ๋“ค์˜ ๋ ˆ์ด์•„์›ƒ๊ณผ๋Š” ๋‹ค๋ฅธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ์€ ๋ Œ๋”ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ HTML ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ(์œ„์น˜, ํฌ๊ธฐ ๋“ฑ)์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด ์–ด๋””์— ๋ฐฐ์น˜ํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ณผ์ •

 

 

ํŽ˜์ธํŒ…

๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์€ ํ”ฝ์…€์ด๋ผ๊ณ  ํ•˜๋Š” ์ž‘์€ ์ ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ํ”ฝ์…€๋“ค์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽ˜์ธํŒ…์€ ์ด๋Ÿฐ ํ”ฝ์…€์— ๋Œ€ํ•œ ์ •๋ณด๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ํ”ฝ์…€์„ ์ฑ„์›Œ๋‚˜๊ฐ€๋Š” ๊ณผ์ •์ด๋ฉฐ, ์ด ๊ณผ์ •๊นŒ์ง€ ํ•ด๋‚ด์•ผ ํ…์ŠคํŠธ์— ๋ถˆ๊ณผํ–ˆ๋˜ HTML ํŒŒ์ผ์˜ ๋‚ด์šฉ๋“ค์ด ์ด๋ฏธ์ง€ํ™”๋œ ๋ชจ์Šต์œผ๋กœ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ๋„์›Œ์ง€๋Š” ๊ฒƒ

 

 


 

๋ฆฌํ”Œ๋กœ์šฐ(Reflow)์™€ ๋ฆฌํŽ˜์ธํŠธ(Repaint)

๋งŒ์•ฝ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ด๋Š” ๋“ฑ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋กœ ์ด๋™์„ ํ•˜๋Š” ๋“ฑ ํ™”๋ฉด์— ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€ ๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ, ํ˜น์€ ์•„์˜ˆ ๋‹ค๋ฅธ ์š”์†Œ๋“ค์„ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธฐ๋ฉด ๋‹น์—ฐํžˆ ํ™”๋ฉด์— ์žˆ๋˜ ์š”์†Œ๋“ค์˜ ํฌ๊ธฐ๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ ์ž…์žฅ์—์„œ๋Š” ๋‹น์—ฐํ•œ ๊ณผ์ •์ด์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ชจ์Šต์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“  ์š”์†Œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๊ณ , ๋‹ค์‹œ ๊ทธ๋ ค ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋ Œ๋”๋ง ๊ณผ์ •์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋ฐ˜๋ณตํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฆฌํ”Œ๋กœ์šฐ
ํŽ˜์ธํŠธ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฆฌํŽ˜์ธํŠธ

 

DOM ์กฐ์ž‘์€ ๋ฆฌํ”Œ๋กœ์šฐ, ๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ

 

๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ์˜ ์ตœ์ ํ™”

์‚ฌ์šฉ์ž์˜ ๋ˆˆ์— ์ผ๋ จ์˜ ๊ณผ์ •์ด ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ฒ˜๋ฆฌ ๋˜๋ ค๋ฉด ์ดˆ๋‹น 60 ํ”„๋ ˆ์ž„์€ ๋ฐ˜๋“œ์‹œ ์œ ์ง€์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

DOM์€ ๋ณ€๊ฒฝ์ด ๋˜๋ฉด ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๋‹ค์‹œ ๊ตฌ์ถ•ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ€๊ฒฝ์ด ๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ๋ฅผ ๋‹ค์‹œ ํ•ด์•ผ ํ•œ๋‹ค ๋Š” ๊ฒƒ

[ํ”„๋ ˆ์ž„ ๋“œ๋ž: ๋ธŒ๋ผ์šฐ์ €์˜ ๊ณผ๋ถ€ํ•˜๋กœ ์ธํ•ด ํ”„๋ ˆ์ž„์˜ ์ˆ˜๊ฐ€ ์ค„์–ด๋“œ๋Š” ํ˜„์ƒ. ํ™”๋ฉด์ด ๋ฉˆ์ถ”๊ฑฐ๋‚˜ ๋ฒ„๋ฒ…์ž„]

 

  • ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์ค„์ธ๋‹ค
  • ๋ฆฌํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์†์„ฑ๋ณด๋‹ค ๋ฆฌํŽ˜์ธํŠธ๋งŒ ๋ฐœ์ƒํ•˜๋Š” ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์ค€๋‹ค.
  • ๋ฆฌํ”Œ๋กœ์šฐ? ์ฃผ๋กœ ์œ„์น˜๋‚˜ ๋„ˆ๋น„์™€ ๊ด€๋ จ๋œ ์†์„ฑ > position, width, height, left, top, right, bottom, margin, padding, border, border-width, clear, display, float, font-family, font-size, font-weight, line-height, min-height, overflow, text-allign, vertical-align
  • ๋ฆฌํŽ˜์ธํŠธ? > background, background-image, background-position, background-repea,background-size, border-radius, border-style, box-shadow,color, line-style,outline, clear,display, float, font-family, font-size, font-weight, outline-color, visibility
    • ์œ„์น˜๋‚˜ ๋„ˆ๋น„์™€ ๊ด€๋ จ๋œ ์†์„ฑ ๋Œ€์‹  transform: translate() ๋ฅผ ์‚ฌ์šฉํ•˜์ž.
    • visibillity/display๋ณด๋‹ค opacity ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์ž.
  • ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋…ธ๋“œ๋ฅผ ์ค„์ธ๋‹ค.position: absolute ๋˜๋Š” fixed ์‚ฌ์šฉ