Skip to content

how_browsers_work

KyusungDev edited this page Jun 9, 2017 · 5 revisions

๋ธŒ๋ผ์šฐ์ €์˜ ๋™์ž‘

์ปดํŒŒ์ผ๋Ÿฌ(Compiler)

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

์ €๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(์–ด์…ˆ๋ธ”๋ฆฌ์–ด, ๊ธฐ๊ณ„์–ด)๋Š” ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. ๋˜ํ•œ ํŠน์ • ํ•˜๋“œ์›จ์–ด ๊ตฌ์กฐ์— ์˜์กด์„ฑ์ด ๊ฐ•ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ, ํ•˜๋“œ์›จ์–ด ์˜์กด์„ฑ์„ ์ค„์ด๊ณ  ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•˜๊ธฐ ์‰ฌ์šด ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค. ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์€ ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰๊ฐ€๋Šฅํ•˜๋„๋ก ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpereter)

์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ๋ณ„๋„์˜ ์ปดํŒŒ์ผ ๊ณผ์ •์—†์ด ํ•œ๋ฒˆ์— ํ•œ ์ค„์”ฉ ์ฝ์–ด๋“ค์—ฌ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งํ•œ๋‹ค.
์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋‹ค๋ฅธ์ ์€ ์‹คํ–‰์ค‘์— ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•ด์„œ ๋ณด์—ฌ์ฃผ๊ณ , ๋ชฉ์ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ํฌ๊ฒŒ ๋‘์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

  • ์ปดํŒŒ์ผ๋Ÿฌ + ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๊ฒฐํ•ฉํ˜•
    ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ค‘๊ฐ„ ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ ํ›„ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์ฝ์–ด๋“ค์—ฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๊ณ  ํ•ด์„ํ•˜๋ฉฐ ์‹คํ–‰ํ•œ๋‹ค.
  • ์†Œ์Šค์ฝ”๋“œ ์œ ์ง€ํ˜•
    ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€ํ•œ์ฑ„ ๋ผ์ธ ๋‹จ์œ„๋กœ ํ•ด์„ํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค.
    ์„ฑ๋Šฅํ–ฅ์ƒ์„ ์œ„ํ•ด ์‹คํ–‰ ์‹œ์ ์— ์›์‹œ์ฝ”๋“œ๋‚˜ ์ค‘๊ฐ„ ์ฝ”๋“œ๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๊ธฐ๋ฒ•์„ JIT(Just-in-time) ์ปดํŒŒ์ผ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„

๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ดํ•ด์„์„ ์œ„ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ํƒ‘์žฌ๋˜์–ด ์žˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋‹ค. ์ด์ œ๋Š” ๋ธŒ๋ผ์šฐ์ € ์™ธ์—๋„ ์„œ๋ฒ„์˜์—ญ์ด๋‚˜ PC์˜ ์„ค์น˜ํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋„ ํƒ‘์žฌ๋˜์–ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์— ํƒ‘์žฌ๋œ V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„

V8์€ ๋…์ผ ๊ตฌ๊ธ€ ๊ฐœ๋ฐœ ์„ผํ„ฐ์—์„œ ๋งŒ๋“ค์–ด์ง„ JavaScript ์—”์ง„์ด๋‹ค. ์˜คํ”ˆ ์†Œ์Šค์ด๊ณ  C++๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค.
ํด๋ผ์ด์–ธํŠธ์ชฝ(Google Chrome)๊ณผ ์„œ๋ฒ„์ชฝ(node.js) JavaScript ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‘์— ์“ฐ์ธ๋‹ค. V8์€ ์›น ๋ธŒ๋ผ์šฐ์ € ์•ˆ์—์„œ ์‹คํ–‰๋˜๋Š” JavaScript์˜ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ ๊ณ ์•ˆ๋˜์—ˆ๋‹ค. ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ V8์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๋Œ€์‹  JavaScript ์ฝ”๋“œ๋ฅผ ์ข€๋” ํšจ์œจ์ ์ธ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•œ๋‹ค. ์š”์ฆ˜์˜ JavaScript ์—”์ง„์ฒ˜๋Ÿผ JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ ์šฉํ•˜์—ฌ JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ปดํŒŒ์ผํ•˜์—ฌ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ ๋งŒ๋“ ๋‹ค. V8์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋˜๋Š” ๋‹ค๋ฅธ ์ค‘๊ฐ„ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

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

๋ธŒ๋ผ์šฐ์ €์˜ ๋™์ž‘ ์›๋ฆฌ

๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ฐธ์กฐํ•˜๊ณ ์ž ํ•˜๋Š” ์›นํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ›์•„ ๋ธŒ๋ผ์šฐ์ € ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ html, css, javascript ํŒŒ์ผ์„ ์‘๋‹ต๋ฐ›๋Š”๋‹ค. html, cssํŒŒ์ผ์€ ๋ Œ๋”๋ง ์—”์ง„์˜ HTML ํŒŒ์„œ์™€ CSS ํŒŒ์„œ์— ์˜ํ•ด ํŒŒ์‹ฑ๋˜์–ด DOM, CSSOM ํŠธ๋ฆฌ๋กœ ๋ณ€ํ™˜๋˜๊ณ  ๋ Œ๋” ํŠธ๋ฆฌ๋กœ ๊ฒฐํ•ฉ๋œ๋‹ค.

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

์ฐธ๊ณ 

Clone this wiki locally