- User Interface: ์น ํ์ด์ง๋ฅผ ์ ์ธํ ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ ๋ถ๋ถ(์. ์ฃผ์ ํ์์ค, ์ด์ /๋ค์/์๋ก๊ณ ์นจ ๋ฒํผ, ๋ถ๋งํฌ ๋ฑ)
- Browser Engine: User Interface์ Rendering Engine ์ฐ๊ฒฐ
- Rendering Engine: ์น ํ์ด์ง ํ์
- Networking: ๋คํธ์ํฌ ์์ฒญ ์ํ
- Javascript Interpreter: Javascript์ฝ๋ ์คํ
- UI Backend: ์ฒดํฌ๋ฐ์ค๋ ๋ฒํผ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ์์ ฏ์ ๊ทธ๋ ค์ค
- 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๋ฌธ์๋ฅผ ํ์ฑํ ๊ฒฐ๊ณผ๋ฌผ
- CSS๋ ๋์ผํ ๊ณผ์ ์ผ๋ก ํ์ฑ๋จ
- ๋ ๋ํธ๋ฆฌ
- ํ๋ฉด์ ํ์๋์ด์ผํ๋ ๋ชจ๋ ๋ ธ๋์ ์ปจํ ์ธ , ์คํ์ผ ์ ๋ณด๋ฅผ ํฌํจ
- ํ๋ฉด์ ๋ ๋๋ง๋์ง ์๋ ๋ ธ๋(์. meta, script)๋ ๋ฏธํฌํจ
display: none
์ธ ๋ ธ๋๋ ๋ฏธํฌํจ
- ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฑํ์ฌ AST(Abscract Syntax Tree)๋ฅผ ์์ฑํ๊ณ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํ์ฌ ์คํ
- JS๋ DOM API๋ฅผ ํตํด DOM, CSSOM์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ๋ณ๊ฒฝ๋ DOM, CSSOM์ ๋ค์ ๋ ๋ํธ๋ฆฌ๋ก ๊ฒฐํฉ๋จ
- JSํ์ฑ์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์์ง์ด ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ฒ๋ฆฌํจ
- JS์์ง์ด AST๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธํฐํ๋ฆฌํฐ๊ฐ ์คํํ ์ ์๋ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์คํ
- ํ ํฌ๋์ด์ง: ๋จ์ ๋ฌธ์์ด์ธ ์ฝ๋๋ฅผ ์ดํ ๋ถ์ํ์ฌ ๋ฌธ๋ฒ์ ์๋ฏธ๋ฅผ ๊ฐ๋ ์ฝ๋์ ์ต์๋จ์ ํ ํฐ์ผ๋ก ๋ถํด
- ํ์ฑ: ํ ํฐ์ ์งํฉ์ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ AST(ํ ํฐ์ ๋ฌธ๋ฒ์ ์๋ฏธ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ ํธ๋ฆฌ) ์์ฑ, AST๋ ์ธํฐํ๋ฆฌํฐ ์ปดํ์ผ๋ฌ ๋ฟ ์๋๋ผ TypeScript, Babel Prettier๊ฐ์ ํธ๋์คํ์ผ๋ฌ๋ฅผ ๊ตฌํํ๋๋ฐ ์ฌ์ฉ ๊ฐ๋ฅํจ
- ๋ฐ์ดํธ์ฝ๋์ ์์ฑ๊ณผ ์คํ(์ธํฐํ๋ฆฌํฐ์ ์ํด ์์ฑ๋จ)\
- JS์์ง์ด AST๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธํฐํ๋ฆฌํฐ๊ฐ ์คํํ ์ ์๋ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์คํ
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์ข
๋ฅ
- V8(ํฌ๋กฌ, ์ฃ์ง, Node.js)
- SpiderMonkey(ํ์ด์ดํญ์ค)
- JavaScriptCore(์ฌํ๋ฆฌ)
- ๋ ๋๋ง ์์ง์ ๋น ๋ฅด๊ฒ ๋ด์ฉ์ ํ์ํ๊ธฐ ์ํด HTMLํ์ฑ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ ์ด์์๊ณผ ํ์ธํ ๊ณผ์ ์ ์์ํจ
- ๋ ์ด์์(๋ฆฌํ๋ก์ฐ)
- ๋ทฐํฌํธ ๋ด ์์๋ค์ ํฌ๊ธฐ์ ์์น ๊ณ์ฐ
%
๋em
๊ณผ ๊ฐ์ ์๋์ ์ธ ๋จ์๊ฐpx
๋ก ๋ณ๊ฒฝ๋จ
- ํ์ธํ
- ํ๋ฉด์ ์ค์ ํฝ์ ๋ก ๊ทธ๋ ค์ง
- ๋ฆฌํ๋ก์ฐ์ ๋ฆฌํ์ธํ
์ด ์ผ์ด๋๋ ๋์
- JS์ ์ํ ๋ ธ๋ ์ถ๊ฐ, ์ญ์
- ๋ธ๋ผ์ฐ์ ์ฐฝ ๋ฆฌ์ฌ์ด์ง์ ์ํ ๋ทฐํฌํธ ํฌ๊ธฐ ๋ณ๊ฒฝ
- HTML ๋ ์ด์์์ ๋ณ๊ฒฝ์ํค๋ ์คํ์ผ ๋ณ๊ฒฝ
- width/height, margin, padding, border, display, position, top/right/bottom/left ๋ฑ
- ๋ ์ด์์์ ์ํฅ์ด ์๋ ๋ณ๊ฒฝ์ ๋ฆฌํ๋ก์ฐ์์ด ๋ฆฌํ์ธํ ๋ง ์คํ๋๊ธฐ๋ ํจ
- ํ๋จ!
- ๋ ๋๋ง ์์ง๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ง๋ ฌ์ ์ผ๋ก ํ์ฑ์ ์ํํ๋ค. scriptํ๊ทธ์ ์์น์ ๋ฐ๋ผ HTML ํ์ฑ์ด ๋ธ๋กํน๋์ด DOM์์ฑ์ด ์ง์ฐ๋ ์ ์๋ค.
- JS์์ ์์ง ์์ฑ๋์ง ์์ DOM์ ์กฐ์ํ๋ ค๊ณ ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- src ์ดํธ๋ฆฌ๋ทฐํธ๋ก ์ธ๋ถ JSํ์ผ์ ๋ก๋ํ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- async
- ์์กด์ฑ์ด ์๋ ์คํฌ๋ฆฝํธ
- HTML ํ์ฑ๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ๋ก๋๊ฐ ๋์์ ์งํ๋จ.
- ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋๊ฐ ์๋ฃ๋๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฑ๊ณผ ์คํ์ด ์์๋๊ณ HTMLํ์ฑ ์ค๋จ
- ์ฌ๋ฌ scirptํ๊ทธ์ ์ ์ฉ ์ ๋จผ์ ๋ก๊ทธ๊ฐ ์๋ฃ๋ ํ์ผ๋ถํฐ ์คํํ๋ฏ๋ก ์์๊ฐ ๋ณด์ฅ๋์ง ์์
- defer
- DOM ์ ์ด์ ๊ด๋ จ์๋ ์คํฌ๋ฆฝํธ
- HTML ํ์ฑ๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ๋ก๋๊ฐ ๋์์ ์งํ๋จ.
- ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฑ๊ณผ ์คํ์ DOM ์์ฑ์ด ์๋ฃ๋ ์งํ
- ๋ฆฌํ๋ก์ฐ์ ๋ฆฌํ์ธํธ๋ฅผ ๋ฐ์์ํค์ง ์๋ ์ ๋๋ฉ์ด์ ์ฌ์ฉํ๊ธฐ
- JS, CSS ํ์ผ๋ค์ ํ๋๋ก ๋ฌถ๊ธฐ
- ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ํ๋๋ก ๋ฌถ๊ธฐ(CSS Sprite)
- ์ด๊ธฐ ๋ก๋ฉ ์ ํ์์๋ JS๋ ๋ทฐ ํฌํธ ๋ฐ์ ์ด๋ฏธ์ง๋ ์ญ์ ํ๊ฑฐ๋ ์ถํ๋ก ๋ก๋ฉ ๋ฏธ๋ฃจ๊ธฐ(lazy loading)
- ๋ธ๋ผ์ฐ์ ๋น ๋์ ์ฐ๊ฒฐ๊ฐ๋ฅํ ๊ฐ์๊ฐ ์ ํด์ ธ ์๋ค. ๋ง์ ์์ฒญ์ ๋ณด๋ด๋ฉด ๊ธฐ๋ค๋ ค์ผํจ
- HTTP2 ์ฌ์ฉํ๊ธฐ
- ํ์ผ ํฌ๊ธฐ ์ค์ด๊ธฐ
- CSS, JS
- ์ฃผ์์ ๊ฑฐ
- ๊ณต๋ฐฑ์ ๊ฑฐ
- ๋๋ ํ
- ์์ถ
- ์ด๋ฏธ์ง ํฌ๊ธฐ ์ค์ด๊ธฐ
- ํฌ๋งท์ ๋ฐ๋ผ ์ฉ๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ ์ ํ ํฌ๋งท ์ฌ์ฉ
- ๋ฉํ์ ๋ณด ์ ๊ฑฐ
- CSS, JS
- Preload ๋ฏธ๋ฆฌ ์์์ ๊ฐ์ ธ์ค๊ธฐ
- headํ๊ทธ์ ์์์ ๋ณ๋ ฌ๋ก ๋ฐ๊ธฐ ๋๋ฌธ์ ๊ผญ ํ์ํ CSS์ JS๋ง ๋ฃ๊ธฐ
- headํ๊ทธ์ ์์์ ๋ชจ๋ ๋ก๋ํ๊ธฐ ์ ๊น์ง ๋น ํ๋ฉด์ด ๋ํ๋จ
- js๋ bodyํ๊ทธ ๋ง์ง๋ง์
- Hero ์๋ฆฌ๋จผํธ๋ lazyํ๊ฒ ์ฒ๋ฆฌํ๋ฉด ์๋จ, ๊ฐ์ฅ ๋จผ์ ๋ณด์ฌ์ผํ๋ ์ปจํ ์ธ
- ์ค์ง์ ์ธ ์ฑ๋ฅํฅ์์ ์๋์ง๋ง, ์ฌ์ฉ์ ์ฒด๊ฐ ์๋๋ฅผ ์ค์ด๊ธฐ ์ํ ์ค์ผ๋ ํค UI ์ฌ์ฉ
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive, 38์ฅ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์
- ๋ธ๋ผ์ฐ์ ๋ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ? - NAVER D2
- TECH CONCERT: FRONT END 2019 - ์ค๋๋ถํฐ ๋๋ FE ์ฑ๋ฅ๋ถ์๊ฐ
- [10๋ถ ํ ์ฝํก] โ๏ธ ์ฒดํ์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง