Skip to content

Latest commit

ย 

History

History
128 lines (106 loc) ยท 6.94 KB

README.md

File metadata and controls

128 lines (106 loc) ยท 6.94 KB

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

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

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

  1. User Interface: ์›น ํŽ˜์ด์ง€๋ฅผ ์ œ์™ธํ•œ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ถ€๋ถ„(์˜ˆ. ์ฃผ์†Œ ํ‘œ์‹œ์ค„, ์ด์ „/๋‹ค์Œ/์ƒˆ๋กœ๊ณ ์นจ ๋ฒ„ํŠผ, ๋ถ๋งˆํฌ ๋“ฑ)
  2. Browser Engine: User Interface์™€ Rendering Engine ์—ฐ๊ฒฐ
  3. Rendering Engine: ์›น ํŽ˜์ด์ง€ ํ‘œ์‹œ
  4. Networking: ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์ˆ˜ํ–‰
  5. Javascript Interpreter: Javascript์ฝ”๋“œ ์‹คํ–‰
  6. UI Backend: ์ฒดํฌ๋ฐ•์Šค๋‚˜ ๋ฒ„ํŠผ ๊ฐ™์€ ๊ธฐ๋ณธ์ ์ธ ์œ„์ ฏ์„ ๊ทธ๋ ค์คŒ
  7. Data Persistance: ๋ณด์กฐ ๊ธฐ์–ต์žฅ์น˜(์˜ˆ. localStorage, Cookie ๋“ฑ)์— ๋ฐ์ดํ„ฐ ์ €์žฅ

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

ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ

  • html, css, js, ์ด๋ฏธ์ง€, ํฐํŠธ ๋“ฑ์˜ ํŒŒ์ผ ์š”์ฒญ ํ›„ ์‘๋‹ต๋ฐ›์Œ
    • ์™ธ๋ถ€ ์š”์†Œ๋ฅผ ๋กœ๋“œํ•˜๋Š” ํƒœ๊ทธ: <link>, <img>, <script>
  • HTTP: ์›น์—์„œ ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„๊ฐ€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ(๊ทœ์•ฝ)
    • HTTP 1.1: ์ปค๋„ฅ์…˜ ํ•˜๋‚˜ ๋‹น ํ•˜๋‚˜์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต๋งŒ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅ, 1999๋…„ ๋ฐœํ‘œ
    • HTTP 2.0: ๋‹ค์ค‘ ์‘๋‹ต ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ, 2015๋…„ ๋ฐœํ‘œ

๋ Œ๋”ํŠธ๋ฆฌ ์ƒ์„ฑ

  • ๋ Œ๋”๋ง ์—”์ง„์ด HTML๊ณผ CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM๊ณผ CSSOM์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋“ค์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋”ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•จ
    • ๋ Œ๋”๋ง ์—”์ง„ ์ข…๋ฅ˜
      • Blink(ํฌ๋กฌ, ์—ฃ์ง€, ์˜คํŽ˜๋ผ, ์‚ผ์„ฑ์ธํ„ฐ๋„ท, ์›จ์ผ)
      • Webkit(์‚ฌํŒŒ๋ฆฌ, IOS์˜ ํฌ๋กฌ)
      • Gecko(ํŒŒ์ด์–ดํญ์Šค)
  • ๋ฐ”์ดํŠธ -> ๋ฌธ์ž -> ํ† ํฐ -> ๋…ธ๋“œ -> DOM(Document Object Model)
    • CSS๋„ ๋™์ผํ•œ ๊ณผ์ •์œผ๋กœ ํŒŒ์‹ฑ๋จ
      • CSSOM์€ CSS์˜ ์ƒ์†์„ ๋ฐ˜์˜ํ•˜์—ฌ ์ƒ์„ฑ๋จ
    • ๋ฐ”์ดํŠธ: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ๋ฐ›์€ HTML ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„ ๋ฐ”์ดํŠธ(2์ง„์ˆ˜)๋ฅผ ๋ณด๋ƒ„
    • ๋ฌธ์ž: meta ํƒœ๊ทธ์˜ charset์— ์ง€์ •๋œ ์ธ์ฝ”๋”ฉ๋ฐฉ์‹(์˜ˆ. UTF-8) ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝ
    • ํ† ํฐ: ๋ฌธ๋ฒ•์  ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ฝ”๋“œ์˜ ์ตœ์†Œ ๋‹จ์œ„
    • ๋…ธ๋“œ: ๊ฐ ํ† ํฐ์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ƒ์„ฑ๋จ. ๋ฌธ์„œ ๋…ธ๋“œ, ์š”์†Œ ๋…ธ๋“œ, ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ, ํ…์ŠคํŠธ ๋…ธ๋“œ
    • DOM: ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ, HTML๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•œ ๊ฒฐ๊ณผ๋ฌผ
  • ๋ Œ๋”ํŠธ๋ฆฌ
    • ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์–ด์•ผํ•˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ปจํ…์ธ , ์Šคํƒ€์ผ ์ •๋ณด๋ฅผ ํฌํ•จ
    • ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ(์˜ˆ. meta, script)๋Š” ๋ฏธํฌํ•จ
    • display: none์ธ ๋…ธ๋“œ๋Š” ๋ฏธํฌํ•จ

JS ์‹คํ–‰

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ AST(Abscract Syntax Tree)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰
  • JS๋Š” DOM API๋ฅผ ํ†ตํ•ด DOM, CSSOM์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณ€๊ฒฝ๋œ DOM, CSSOM์€ ๋‹ค์‹œ ๋ Œ๋”ํŠธ๋ฆฌ๋กœ ๊ฒฐํ•ฉ๋จ
  • JSํŒŒ์‹ฑ์€ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์—”์ง„์ด ์•„๋‹Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ฒ˜๋ฆฌํ•จ
    • JS์—”์ง„์ด AST๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹คํ–‰
      • ํ† ํฌ๋‚˜์ด์ง•: ๋‹จ์ˆœ ๋ฌธ์ž์—ด์ธ ์ฝ”๋“œ๋ฅผ ์–ดํœ˜ ๋ถ„์„ํ•˜์—ฌ ๋ฌธ๋ฒ•์  ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ฝ”๋“œ์˜ ์ตœ์†Œ๋‹จ์œ„ ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ด
      • ํŒŒ์‹ฑ: ํ† ํฐ์˜ ์ง‘ํ•ฉ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์—ฌ AST(ํ† ํฐ์— ๋ฌธ๋ฒ•์  ์˜๋ฏธ์™€ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•œ ํŠธ๋ฆฌ) ์ƒ์„ฑ, AST๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฟ ์•„๋‹ˆ๋ผ TypeScript, Babel Prettier๊ฐ™์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ
      • ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ ์ƒ์„ฑ๊ณผ ์‹คํ–‰(์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์˜ํ•ด ์ƒ์„ฑ๋จ)\
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ์ข…๋ฅ˜
    • V8(ํฌ๋กฌ, ์—ฃ์ง€, Node.js)
    • SpiderMonkey(ํŒŒ์ด์–ดํญ์Šค)
    • JavaScriptCore(์‚ฌํŒŒ๋ฆฌ)

๋ Œ๋”ํŠธ๋ฆฌ ๊ธฐ์ค€์œผ๋กœ ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ ํ›„ ํŽ˜์ธํŒ…

  • ๋ Œ๋”๋ง ์—”์ง„์€ ๋น ๋ฅด๊ฒŒ ๋‚ด์šฉ์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด HTMLํŒŒ์‹ฑ ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋ ˆ์ด์•„์›ƒ๊ณผ ํŽ˜์ธํŒ… ๊ณผ์ •์„ ์‹œ์ž‘ํ•จ
  • ๋ ˆ์ด์•„์›ƒ(๋ฆฌํ”Œ๋กœ์šฐ)
    • ๋ทฐํฌํŠธ ๋‚ด ์š”์†Œ๋“ค์˜ ํฌ๊ธฐ์™€ ์œ„์น˜ ๊ณ„์‚ฐ
    • %๋‚˜ em๊ณผ ๊ฐ™์€ ์ƒ๋Œ€์ ์ธ ๋‹จ์œ„๊ฐ€ px๋กœ ๋ณ€๊ฒฝ๋จ
  • ํŽ˜์ธํŒ…
    • ํ™”๋ฉด์— ์‹ค์ œ ํ”ฝ์…€๋กœ ๊ทธ๋ ค์ง
  • ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŒ…์ด ์ผ์–ด๋‚˜๋Š” ๋™์ž‘
    • JS์— ์˜ํ•œ ๋…ธ๋“œ ์ถ”๊ฐ€, ์‚ญ์ œ
    • ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ๋ฆฌ์‚ฌ์ด์ง•์— ์˜ํ•œ ๋ทฐํฌํŠธ ํฌ๊ธฐ ๋ณ€๊ฒฝ
    • HTML ๋ ˆ์ด์•„์›ƒ์„ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ์Šคํƒ€์ผ ๋ณ€๊ฒฝ
      • width/height, margin, padding, border, display, position, top/right/bottom/left ๋“ฑ
      • ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์ด ์—†๋Š” ๋ณ€๊ฒฝ์€ ๋ฆฌํ”Œ๋กœ์šฐ์—†์ด ๋ฆฌํŽ˜์ธํŒ…๋งŒ ์‹คํ–‰๋˜๊ธฐ๋„ ํ•จ

script ํƒœ๊ทธ์˜ ์œ„์น˜

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

async / defer

  • src ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋กœ ์™ธ๋ถ€ JSํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • async
    • ์˜์กด์„ฑ์ด ์—†๋Š” ์Šคํฌ๋ฆฝํŠธ
    • HTML ํŒŒ์‹ฑ๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋กœ๋“œ๊ฐ€ ๋™์‹œ์— ์ง„ํ–‰๋จ.
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰์ด ์‹œ์ž‘๋˜๊ณ  HTMLํŒŒ์‹ฑ ์ค‘๋‹จ
    • ์—ฌ๋Ÿฌ scirptํƒœ๊ทธ์— ์ ์šฉ ์‹œ ๋จผ์ € ๋กœ๊ทธ๊ฐ€ ์™„๋ฃŒ๋œ ํŒŒ์ผ๋ถ€ํ„ฐ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์Œ
  • defer
    • DOM ์ œ์–ด์™€ ๊ด€๋ จ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ
    • HTML ํŒŒ์‹ฑ๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋กœ๋“œ๊ฐ€ ๋™์‹œ์— ์ง„ํ–‰๋จ.
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰์€ DOM ์ƒ์„ฑ์ด ์™„๋ฃŒ๋œ ์งํ›„

์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ ๋ฐฉ๋ฒ•

  • ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‚ฌ์šฉํ•˜๊ธฐ
  • JS, CSS ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ๊ธฐ
  • ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๊ธฐ(CSS Sprite)
  • ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ ํ•„์š”์—†๋Š” JS๋‚˜ ๋ทฐ ํฌํŠธ ๋ฐ–์˜ ์ด๋ฏธ์ง€๋Š” ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ถ”ํ›„๋กœ ๋กœ๋”ฉ ๋ฏธ๋ฃจ๊ธฐ(lazy loading)
  • ๋ธŒ๋ผ์šฐ์ € ๋‹น ๋™์‹œ ์—ฐ๊ฒฐ๊ฐ€๋Šฅํ•œ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋‹ค. ๋งŽ์€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๊ธฐ๋‹ค๋ ค์•ผํ•จ
    • HTTP2 ์‚ฌ์šฉํ•˜๊ธฐ
  • ํŒŒ์ผ ํฌ๊ธฐ ์ค„์ด๊ธฐ
    • CSS, JS
      • ์ฃผ์„์ œ๊ฑฐ
      • ๊ณต๋ฐฑ์ œ๊ฑฐ
      • ๋‚œ๋…ํ™”
      • ์••์ถ•
    • ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ค„์ด๊ธฐ
      • ํฌ๋งท์— ๋”ฐ๋ผ ์šฉ๋Ÿ‰ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•œ ํฌ๋งท ์‚ฌ์šฉ
      • ๋ฉ”ํƒ€์ •๋ณด ์ œ๊ฑฐ
  • Preload ๋ฏธ๋ฆฌ ์ž์›์„ ๊ฐ€์ ธ์˜ค๊ธฐ
  • headํƒœ๊ทธ์˜ ์ž์›์€ ๋ณ‘๋ ฌ๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ํ•„์š”ํ•œ CSS์™€ JS๋งŒ ๋„ฃ๊ธฐ
    • headํƒœ๊ทธ์˜ ์ž์›์„ ๋ชจ๋‘ ๋กœ๋“œํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋นˆ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚จ
  • js๋Š” bodyํƒœ๊ทธ ๋งˆ์ง€๋ง‰์—
  • Hero ์—˜๋ฆฌ๋จผํŠธ๋Š” lazyํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ์•ˆ๋จ, ๊ฐ€์žฅ ๋จผ์ € ๋ณด์—ฌ์•ผํ•˜๋Š” ์ปจํ…์ธ 
  • ์‹ค์งˆ์ ์ธ ์„ฑ๋Šฅํ–ฅ์ƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ฒด๊ฐ ์†๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ์Šค์ผˆ๋ ˆํ†ค UI ์‚ฌ์šฉ

์ฐธ๊ณ 


[TOP] | [HOME]