728x90
2.1 ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์
- 1995๋
, 90%์ ์์ฅ ์ ์ ์จ๋ก ์น ๋ธ๋ผ์ฐ์ ์์ฅ์ ์ง๋ฐฐํ๋ ๋ท์ค์ผ์ดํ ์ปค๋ฎค๋์ผ์ด์
์ฆ.
Brendan Eich๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ. - Mocha -> LiveScript -> JavaScript ๋ก ์ด๋ฆ์ด ๋ฐ๋.
2.2 ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์คํ
- 1996๋ ๋ง์ดํฌ๋ก์ํํธ๊ฐ JScript๋ผ๋ ํ์ ๋ฒ์ ์ ์ถ์ํจ.
- ๋ท์ค์ผ์ดํ ์ปค๋ฎค๋์ผ์ด์ ์ฆ์ ๋ง์ดํฌ๋ก์ํํธ๋ ์์ฌ ๋ธ๋ผ์ฐ์ ์ ์์ฅ ์ ์ ์จ์ ๋์ด๊ธฐ ์ํด ์์ฌ ๋ธ๋ผ์ฐ์ ์์๋ง ๋์ํ๋ ๊ธฐ๋ฅ ์ถ๊ฐํ๊ธฐ ์์ํจ.
- -> ์ต์ด์ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ์ด์
- ๋ท์ค์ผ์ดํ ์ปค๋ฎค๋์ผ์ด์ ์ฆ๋ ECMA ์ธํฐ๋ด์ ๋์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์คํ๋ฅผ ์์ฒญํจ.
- 1997๋ , ์๋ฐ์คํฌ๋ฆฝํธ๋ ECMAScript๋ก ๋ช ๋ช ๋จ. (์ดํ, ES1)
- 2015๋ ์ ๊ณต๊ฐ๋ ECMAScript 6(ECMAScript 2015, ES6)์ ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก์ ๊ฐ์ถฐ์ผํ ๊ธฐ๋ฅ์ ๋๊ฑฐ ๋์ ํจ.
2.3 ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ์ฅ์ ์ญ์ฌ
2.3.1 Ajax (Asynchronous JavaScript and XML)
- Ajax: ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์๋ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๋ ํต์ ๊ธฐ๋ฅ (XMLHttpRequest).
- ์ด์ ๋ฐฉ์: ์ ์ฒด HTML์ ์๋ฒ์์ ๋ฐ์์ ์นํ์ด์ง ์ ์ฒด๋ฅผ ๋ ๋๋ง.
- ๋ถํ์ํ ๋ฐ์ดํฐ ํต์ ๊ณผ ์ฑ๋ฅ ์ ํ.
- ๋ณ๊ฒฝ ํ์ ์๋ ๋ถ๋ถ๋ ๋ค์ ๋ ๋๋ง, ํ๋ฉด ์ ํ ์ ๊น๋ฐ์ ๋ฐ์.
- Ajax์ ์ฅ์ : ํ์ํ ๋ฐ์ดํฐ๋ง ์๋ฒ์ ์์ฒญํ๊ณ , ํด๋น ๋ถ๋ถ๋ง ์
๋ฐ์ดํธํ์ฌ ์ฑ๋ฅ ๊ฐ์ .
- ๋น๋๊ธฐ์ ์ฒ๋ฆฌ: ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ง ์๊ณ ๋ ์๋ฒ์ ํต์ ํ๋ฉฐ, ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ์ค๋จ๋์ง ์์.
- 2005๋ ๊ตฌ๊ธ ๋งต์ค: ์น ๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ์ Ajax๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์. ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋น๊ตํ์ ๋ ์์ ์๋ ์ฑ๋ฅ์ผ๋ก ์ฃผ๋ชฉ ๋ฐ์.
2.3.2 jQuery
- jQuery: JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, DOM(Document Object Model)์ ์ฝ๊ฒ ์ ์ดํ ์ ์๋๋ก ๋์์ค.
- DOM ์ ์ด๊ฐ ์ฌ์ด ์ด์ :
- jQuery๋ ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ์ ํตํด ๋ณต์กํ DOM ์์ ์ ํ, ์กฐ์, ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋จํ๊ฒ ํ ์ ์์.
- ์:
document.getElementById('myElement')
๋์$('#myElement')
์ฒ๋ผ ๊ฐ๋จํ ๋ฌธ๋ฒ ์ ๊ณต.
- ํฌ๋ก์ค๋ธ๋ผ์ฐ์ง ์ด์ ํด๊ฒฐ:
- jQuery๋ ๋ธ๋ผ์ฐ์ ๊ฐ์ ์ฐจ์ด๋ฅผ ๋ด๋ถ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ, ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์์ ๋์ผํ ์ฝ๋๋ก ์ผ๊ด๋ ๋์ ๋ณด์ฅ.
- ์: ํน์ ๋ธ๋ผ์ฐ์ ์์์ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ๋ณด์.
2.3.3 V8 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง
- 2008๋ , ๊ตฌ๊ธ์ V8 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ฑ์ฅ
- ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ ์ฌํ ์ฌ์ฉ์ ๊ฒฝํ(UX; user experience) ์ ๊ณต ๊ฐ๋ฅ
- ์น ์๋ฒ์์ ์ํ๋๋ ๋ก์ง๋ค์ด ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๋ก ์ด๋ํ๊ฒ ๋จ
-> ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ํ๋ก ํธ์๋ ์์ญ ์ฃผ๋ชฉ ๋ฐ๋ ๊ณ๊ธฐ
2.3.4 Node.js
- ๊ตฌ๊ธ V8 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ผ๋ก ๋น๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ํ๊ฒฝ(runtime environment)
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋ฆฝ์ํจ ์๋ฐ์คํฌ๋ฆฌ๋ธฅ ์คํ ํ๊ฒฝ
- ํน์ง:
- ๋น๋๊ธฐ I/O ์ง์
- ๋จ์ผ ์ค๋ ๋(single thread) ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ์ผ๋ก ๋์.
- -> SPA(Single Page Application)์ ์ ํฉ. (๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด I/O๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํ๊ธฐ ๋๋ฌธ)
- -> CPU ์ฌ์ฉ๋ฅ ์ด ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ๊ถ์ฅํ์ง ์์.
2.3.5 SPA ํ๋ ์์ํฌ
- ๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ : ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์๋ ์ฑ๋ฅ ํ์, ๊ฐ๋ฐ ๊ท๋ชจ์ ๋ณต์ก๋ ์์น.
- -> CBD(Component based development) ๋ฐฉ๋ฒ๋ก ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ SPA ๋์คํ.
- Angular, React, Vue.js, Svelte ๋ฑ ๋ค์ํ SPA ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ฅ
2.4 ์๋ฐ์คํฌ๋ฆฝํธ์ ECMAScript
- ECMAScript: ์๋ฐ์คํฌ๋ฆฝํธ ํ์ค ์ฌ์์ธ ECMA-262
- ๊ฐ ๋ธ๋ผ์ฐ์ ์ ์กฐ์ฌ๋ ECMAScript ์ฌ์์ ์ค์ํด์ ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ตฌํํจ.
- ์๋ฐ์คํฌ๋ฆฝํธ: ECMAScript(ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก์์ ๋ผ๋, core) + ํด๋ผ์ด์ธํธ ์ฌ์ด๋ Web API๋ฅผ ์์ฐ๋ฆ
- ํด๋ผ์ด์ธํธ ์ฌ์ด๋ Web API: DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web Worker ๋ฑ.
- ํด๋ผ์ด์ธํธ ์ฌ์ด๋ Web API๋ ECMAScript์๋ ๋ณ๋๋ก, ์๋ ์์ด๋ ์น ์ฝ์์ง์(World Wide Web Consortium; W3C)์์ ๋ณ๋ ์ฌ์์ผ๋ก ๊ด๋ฆฌํจ.
- https://developer.mozilla.org/en-US/docs/Web/API
2.5 ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ง
- ์น ๋ธ๋ผ์ฐ์ ์์ ๋์ํ๋ ์ ์ผํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด.
- ์ธํฐํ๋ฆฌํฐ ์ธ์ด(interpreter language) : ๊ฐ๋ฐ์๊ฐ ๋ณ๋์ ์ปดํ์ผ ์์ ์ ์ํํ์ง ์์.
ํน์ง | ์ปดํ์ผ๋ฌ ์ธ์ด (Compiled Language) | ์ธํฐํ๋ฆฌํฐ ์ธ์ด (Interpreted Language) |
---|---|---|
๋ฒ์ญ ๋ฐ ์คํ ๋ฐฉ์ | ์ปดํ์ผ ํ์์ ์์ค์ฝ๋๋ฅผ ์ ์ฒด์ ์ผ๋ก ํ ๋ฒ์ ๋จธ์ ์ฝ๋๋ก ๋ณํ ํ ์คํ | ๋ฐํ์์ ๋ฌธ ๋จ์๋ก ํ ์ค์ฉ ์ค๊ฐ ์ฝ๋(๋ฐ์ดํธ์ฝ๋)๋ก ๋ณํ ํ ์ฆ์ ์คํ |
์คํ ํ์ผ ์์ฑ | ์คํ ํ์ผ ์์ฑ | ์คํ ํ์ผ ์์ฑ ์์ |
๋จ๊ณ ๋ถ๋ฆฌ | ์ปดํ์ผ ๋จ๊ณ์ ์คํ ๋จ๊ณ๊ฐ ๋ถ๋ฆฌ๋จ | ์ธํฐํ๋ฆฌํธ ๋จ๊ณ์ ์คํ ๋จ๊ณ๊ฐ ๋ถ๋ฆฌ๋์ง ์์ |
์คํ ํ์ | ์ปดํ์ผ์ ๋จ ํ ๋ฒ ์ํ๋จ | ์ธํฐํ๋ฆฌํฐ๋ ํ ์ค์ฉ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํํ๊ณ ์ฆ์ ์คํ, ์ด ๊ณผ์ ์ด ๋ฐ๋ณต๋จ |
์ฝ๋ ์คํ ์๋ | ์ฝ๋ ์คํ ์๋๊ฐ ๋น ๋ฆ (์ปดํ์ผ๊ณผ ์คํ ๋จ๊ณ๊ฐ ๋ถ๋ฆฌ๋์ด ์์) | ์ฝ๋ ์คํ ์๋๊ฐ ๋๋ฆผ |
๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ๋๋ ์ธํฐํ๋ฆฌํฐ๋ ์ ํต์ ์ธ ์ปดํ์ผ๋ฌ ์ธ์ด์ฒ๋ผ ๋ช ์์ ์ธ ์ปดํ์ผ ๋จ๊ณ๋ฅผ ๊ฑฐ์น์ง ์์ง๋ง, ์คํ ์ค์ ์ผ๋ถ ์ฝ๋๋ฅผ ๋์ ์ผ๋ก ์ปดํ์ผํ์ฌ ์คํํ๋ค. ์ด ๊ณผ์ ์์๋ ์์ฃผ ์ฌ์ฉ๋๋ ์ฝ๋๋ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ ๋ถ๋ถ์ ๋ฏธ๋ฆฌ ์ปดํ์ผํด ๋์ด, ๋ค์์ ๊ฐ์ ์ฝ๋๊ฐ ์คํ๋ ๋ ๋ ๋น ๋ฅด๊ฒ ๋์ํ ์ ์๋๋ก ํ๋ค. ์ด๋ฅผ ํตํด ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ ๋์ ๊ธฐ๋ฅ ์ง์์ด๋ผ๋ ์ฅ์ ์ ์ ์งํ๋ฉด์๋, ์คํ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ ๊ทน๋ณตํ๋ค.
2.6 ES6 ๋ธ๋ผ์ฐ์ ์ง์ ํํฉ
- https://compat-table.github.io/compat-table/es6/
- ๋ธ๋ผ์ฐ์ ์์ ์์ง ์ง์ํ์ง ์๋ ์ต์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฑฐ๋ ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด ๋ฐ๋ฒจ(Babel)๊ณผ ๊ฐ์ ํธ๋์คํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํด ES5 ์ดํ์ ์ฌ์์ผ๋ก ๋ค์ด๊ทธ๋ ์ด๋ ํด์ผ ํจ.
๐ ์ง๋ฌธ: ๋ฐ๋ฒจ์ด ๋ฌด์์ธ๊ฐ์? ์ด๋ค ์ํฉ์์ ์ฌ์ฉํ๋์?
ใ๋ชจ๋์๋ฐ์คํฌ๋ฆฝํธ Deep Diveใ ๋ฅผ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๊ธฐ๋ก์ ๋๋ค.
728x90