๐ŸŒธ02์žฅ. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€?

โœ…2.1 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํƒ„์ƒ

1995๋…„, ์›น ๋ธŒ๋ผ์šฐ์ € ์‹œ์žฅ ์ ์œ ์œจ 90%๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๋„ท์Šค์ผ€์ดํ”„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ฆˆ๊ฐ€ ์›นํŽ˜์ด์ง€์˜ ๋ณด์กฐ์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด๋ฅผ ๋„์ž…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ • ํ›„ ๋ธŒ๋ Œ๋˜ ์•„์ดํฌ๊ฐ€ ๊ฐœ๋ฐœํ•˜์˜€๋‹ค.

โœ…2.2 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ‘œ์ค€ํ™”

1996๋…„ 8์›” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ƒ๋ฒ„์ „ "JScript"๋ฅผ ์ต์Šคํ”Œ๋กœ๋Ÿฌ 3.0์— ํƒ‘์žฌํ–ˆ๋Š”๋ฐ, JScript์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ˜ธํ™˜์ด ์™„๋ฒฝํžˆ ๋˜์ง€ ์•Š์•„ ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๋น„์˜๋ฆฌ ํ‘œ์ค€ํ™” ๊ธฐ๊ตฌ์ธ ECMA ์ธํ„ฐ๋„ค์…”๋„์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œ์ค€ํ™”๋ฅผ ์š”์ฒญํ•˜๊ณ , ์ƒํ‘œ๊ถŒ ๋ฌธ์ œ๋กœ ECMAScript๋กœ ๋ช…๋ช…๋˜์—ˆ๋‹ค.

ํŠนํžˆ, 2015๋…„์— ๊ณต๊ฐœ๋œ ECMAScript 6(ECMAScript 2015, ES6)๋Š” let/const ํ‚ค์›Œ๋“œ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, ํด๋ž˜์Šค, ๋ชจ๋“ˆ ๋“ฑ๊ณผ ๊ฐ™์ด ๋ฒ”์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ์„œ ๊ฐ–์ถฐ์•ผ ํ•  ๊ธฐ๋Šฅ๋“ค์„ ๋Œ€๊ฑฐ ๋„์ž…ํ•˜๋Š” ํฐ ๋ณ€ํ™”๊ฐ€ ์žˆ์—ˆ๋‹ค.

*๏ผ ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ์ด์Šˆ : ๋ธŒ๋ผ์šฐ์ €์— ๋”ฐ๋ผ ์›น ํŽ˜์ด์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ*

์ฃผ์š” ECMAScript ๋ฒ„์ „๋ณ„ ํŠน์ง•

๋ฒ„์ „
์ถœ์‹œ์—ฐ๋„
ํŠน์ง•

ES1

1997

์ดˆํŒ

โ€ฆ

โ€ฆ

...

ES3

1999

์ •๊ทœ ํ‘œํ˜„์‹, try - catch

ES5

2009

HTML5์™€ ํ•จ๊ป˜ ์ถœํ˜„ํ•œ ํ‘œ์ค€์•ˆ, JSON, strict mode, ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ ,ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ œ์–ด ,ํ–ฅ์ƒ๋œ ๋ฐฐ์—ด ์กฐ์ž‘ ๊ธฐ๋Šฅ(forEach, map, filter, reduce, some, every)

ES6(ECMAScript 2015)

2015

let/const, ํด๋ž˜์Šค, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด, ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น, ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•, rest ํŒŒ๋ผ๋ฏธํ„ฐ, ์‹ฌ๋ฒŒ, ํ”„๋กœ๋ฏธ์Šค, Map/Set, ์ดํ„ฐ๋Ÿฌ๋ธ” , for - of, ์ œ๋„ˆ๋ ˆ์ดํ„ฐ, Proxy, ๋ชจ๋“ˆ import/export

ES7(ECMAScript 2016)

2016

์ง€์ˆ˜(**)์—ฐ์‚ฐ์ž, Array.prototype.includes, String.prototype.includes

ES8(ECMAScript 2017)

2017

async/await, Object ์ •์  ๋ฉ”์„œ๋“œ (Object.values, Object.entriesm Object.getOwnPropertyDescriptors)

โ€ฆ

โ€ฆ

...

ES11

2020

โ€ฆ

โœ…2.3 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์„ฑ์žฅ์˜ ์—ญ์‚ฌ

๐Ÿง์ดˆ๊ธฐ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

- ์›น ํŽ˜์ด์ง€์˜ ๋ณด์กฐ์  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•œ์ •์ ์ธ ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉ
  • ๋Œ€๋ถ€๋ถ„์˜ ๋กœ์ง์€ ์ฃผ๋กœ ์›น ์„œ๋ฒ„์—์„œ ์‹คํ–‰

  • ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ HTML๊ณผ CSS๋ฅผ ๋‹จ์ˆœํžˆ ๋ Œ๋”๋งํ•˜๋Š” ์ˆ˜์ค€

@๋ Œ๋”๋ง : HTML, CSS, Javascript๋กœ ์ž‘์„ฑ๋œ ๋ฌธ์„œ๋ฅผ ํ•ด์„ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €์— ์‹œ๊ฐ์ ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ*

๐ŸงAjax(Asynchronous Javascript and XML)

- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋น„๋™๊ธฐ(Asynchronous)๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต์‹  ๊ธฐ๋Šฅ
- XMLHttpRequest ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋“ฑ์žฅ
  • ์ด์ „์˜ ์›นํŽ˜์ด์ง€ ์™„์ „ํ•œ HTML ์ฝ”๋“œ(html ํƒœ๊ทธ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋๋‚˜๋Š” ์ฝ”๋“œ)๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „์†ก๋ฐ›์•„ ์›น ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜์˜€๋‹ค.

    • ํ™”๋ฉด ์ „ํ™˜ โ†’ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด HTML์„ ์ „์†ก๋ฐ›์•„ ์›นํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ฆฌ๋ Œ๋”๋ง

    • ๋ณ€๊ฒฝํ•  ํ•„์š” ์—†๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ๋ฆฌ๋ Œ๋”๋ง โ†’ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ํ†ต์‹  ๋ฐœ์ƒ โ†’ ์„ฑ๋Šฅ ๋ฉด์—์„œ๋„ ๋ถˆ๋ฆฌ โ†’ ํ™”๋ฉด์ด ์ˆœ๊ฐ„์ ์œผ๋กœ ๊นœ๋นก์ด๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒ

  • Ajax์˜ ๋“ฑ์žฅ ์ดํ›„ ์›นํŽ˜์ด์ง€ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์€ ๋‹ค์‹œ ๋ Œ๋”๋ง ํ•˜์ง€ ์•Š๊ณ , ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ „์†ก๋ฐ›์•„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ํ•œ์ •์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

    • ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์œ ์‚ฌํ•œ ๋น ๋ฅธ ์„ฑ๋Šฅ๊ณผ ๋ถ€๋“œ๋Ÿฌ์šด ํ™”๋ฉด ์ „ํ™˜์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

๐ŸงJQuery

- DOM(Document Object Model)์„ ๋”์šฑ ์‰ฝ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ณ , ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ์ด์Šˆ๋„ ์–ด๋А ์ •๋„ ํ•ด๊ฒฐํ•ด์ค€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
๐ŸงV8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„

- V8์˜ ๋“ฑ์žฅ์œผ๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์œ ์‚ฌํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ •์ฐฉ๋˜์—ˆ์Œ
๐ŸงNode.js

- V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ
- ๋ธŒ๋ผ์šฐ์ € ์ด์™ธ์˜ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋…๋ฆฝ์‹œํ‚จ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ
  • Node.js๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๊ณ , ๋ชจ๋“ˆ, ํŒŒ์ผ์‹œ์Šคํ…œ, HTTP ๋“ฑ ๋นŒํŠธ์ธ(built-in, ๋‚ด์žฅ) API๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ์˜์—ญ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋™ํ˜•์„ฑ์€ ๋ณ„๋„์˜ ์–ธ์–ด๋ฅผ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•œ ์‹œ๊ฐ„์„ ๋œ ์ˆ˜ ์žˆ๊ณ ,

  • ๋น„๋™๊ธฐ I/O๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•จ์œผ๋กœ์จ ์š”์ฒญ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.

  • ๋”ฐ๋ผ์„œ, ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด I/O๊ฐ€ ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•˜๋Š” SPA(Single Page Application)์— ์ ํ•ฉํ•˜๋‹ค.

  • ๋˜ํ•œ, ํฌ๋กœ์Šค ํ”Œ๋žซํผ์„ ์œ„ํ•œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์–ธ์–ด๋กœ ์ฃผ๋ชฉ๋ฐ›๊ณ  ์žˆ๋‹ค.

๐ŸงSPA ํ”„๋ ˆ์ž„์›Œํฌ

- ๋ณ€๊ฒฝ์ด ์œ ์—ฐํ•˜๋ฉด์„œ ํ™•์žฅํ•˜๊ธฐ ์‰ฌ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ณ ๊ตฌ์ถ•์„ ์–ด๋ ต๊ฒŒ ํ–ˆ๊ณ , ํ•„์—ฐ์ ์œผ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜๋Š”๋ฐ,
- ์ด๋Ÿฌํ•œ ์š”๊ตฌ์— ๋ฐœ๋งž์ถฐ CBD(Component based development) ๋ฐฉ๋ฒ•๋ก ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” SPA๊ฐ€ ๋Œ€์ค‘ํ™”๋˜์—ˆ์Œ

โœ…2.4 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ECMAScript

ECMAScript๋ž€,
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œ์ค€์œผ๋กœ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ฐ’, ํƒ€์ž…, ๊ฐ์ฒด์™€ ํ”„๋กœํผํ‹ฐ, ํ•จ์ˆ˜, ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด ๋“ฑ ํ•ต์‹ฌ ๋ฌธ๋ฒ•์„ ๊ทœ์ •ํ•œ ๊ฒƒ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ = ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

  • ๊ธฐ๋ณธ ๋ผˆ๋Œ€๋Š” ECMAScript๋ฅผ ์ค€์ˆ˜ํ•˜๊ณ , ์ถ”๊ฐ€๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณ„๋„๋กœ ์ง€์›ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ Web API(DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web Worker ๋“ฑ)๋ฅผ ์•„์šฐ๋ฅด๋Š” ๊ฐœ๋…

โœ…2.5 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์ง•

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ช…๋ นํ˜•(imperative), ํ•จ์ˆ˜ํ˜•(functional), ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜(prototype-based)๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋Š” **๋ฉ€ํ‹ฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด**๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” ์œ ์ผํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋‹ค.

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„์˜ ์ปดํŒŒ์ผ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์ด๋‹ค.

  • ๋ช…๋ นํ˜•, ํ•จ์ˆ˜ํ˜•, ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋Š” ๋ฉ€ํ‹ฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋‹ค.

  • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋ณด๋‹ค ํšจ์œจ์ ์ด๋ฉด์„œ ๊ฐ•๋ ฅํ•œ ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋‹ค.

Last updated