๊ด€๋ฆฌ ๋ฉ”๋‰ด

Ming's develop story

2์žฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€? ๋ณธ๋ฌธ

D E V E L O P ๐Ÿ’ป/์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

2์žฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€?

Ming 2022. 2. 17. 10:51

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

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

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” 1996๋…„ 3์›”, ๋„ท์Šค์ผ€์ดํ”„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ฆˆ์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์ธ ๋„ท์Šค์ผ€์ดํ”„ ๋‚ด๋น„๊ฒŒ์ดํ„ฐ2์— ํƒ‘์žฌ๋˜์—ˆ๊ณ  "๋ชจ์นด"๋กœ ๋ช…๋ช…๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๊ทธํ•ด 9์›” "๋ผ์ด๋ธŒ์Šคํฌ๋ฆฝํŠธ"๋กœ ์ด๋ฆ„์ด ๋ฐ”๋€Œ์—ˆ๋‹ค๊ฐ€ 12์›”์— "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ"๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ตœ์ข… ๋ช…๋ช…๋˜์—ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํƒ„์ƒํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ˜„์žฌ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์˜ ํ‘œ์ค€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž๋ฆฌ ์žก์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ˆœํƒ„ํ•˜๊ฒŒ ์„ฑ์žฅํ–ˆ๋˜ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํƒ„์ƒํ•œ ๋’ค ์–ผ๋งˆ ์ง€๋‚˜์ง€ ์•Š์•„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŒŒ์ƒ ๋ฒ„์ „์ธ JScript๊ฐ€ ์ถœ์‹œ๋˜์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์œ„๊ธฐ๋ฅผ ๋งž๋Š”๋‹ค.

 

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

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

์ด๋กœ ์ธํ•ด ๋ธŒ๋ผ์šฐ์ €์— ๋”ฐ๋ผ ์›นํŽ˜์ด์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ , ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž˜ ์ž‘๋™ํ•˜๋Š” ์›นํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ๊ฐ€ ๋ฌด์ฒ™ ์–ด๋ ค์›Œ์กŒ๋‹ค.

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

์ดํ›„ 1997๋…„ 7์›” ํ‘œ์ค€ํ™”๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ดˆํŒ ์‚ฌ์–‘์ด ์™„์„ฑ๋˜์—ˆ๊ณ , ์ƒํ‘œ๊ถŒ ๋ฌธ์ œ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ECMAScript๋กœ ๋ช…๋ช…๋˜์—ˆ๋‹ค.

๋ฒ„์ „๋ณ„ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋ฒ„์ „ ์ถœ์‹œ ์—ฐ๋„ ํŠน์ง•
ES1 1997 ์ดˆํŒ
ES2 1998 ISO/IEC 16262 ๊ตญ์ œ ํ‘œ์ค€๊ณผ ๋™์ผํ•œ ๊ทœ๊ฒฉ์„ ์ ์šฉ
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.valuesObject.entriesObject.getOwnPropertyDescriptors)
ES9(ECMAScript 2018) 2018 Object rest/spread ํ”„๋กœํผํ‹ฐ, Promise.prototype.finally,
async generator, for await ... of
ES10(ECMAScript 2019) 2019 Object.fromEntries, Array.prototype.flat, Array.prototype.flatMap, optional catch binding
ES11(ECMAScript 2020) 2020 String.prototype.matchAll, BigInt, globalThis,
Promise.allSettled, null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž, ์˜ต์…”๋„ ์ฒด์ด๋‹ ์—ฐ์‚ฐ์ž,
for ... in enumeration order

 

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

์ดˆ์ฐฝ๊ธฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์›นํŽ˜์ด์ง€์˜ ๋ณด์กฐ์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•œ์ •์ ์ธ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค. ์ด ์‹œ๊ธฐ์— ๋Œ€๋ถ€๋ถ„์˜ ๋กœ์ง์€ ์ฃผ๋กœ ์›น ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜์—ˆ๊ณ , ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ HTML๊ณผ CSS๋ฅผ ๋‹จ์ˆœํžˆ ๋ Œ๋”๋ง*ํ•˜๋Š” ์ˆ˜์ค€์ด์—ˆ๋‹ค.

๋ Œ๋”๋ง์ด๋ž€ HTML, CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋œ ๋ฌธ์„œ๋ฅผ ํ•ด์„ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €์— ์‹œ๊ฐ์ ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๋•Œ๋กœ๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ HTML๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •(SSR; Server Side Rendering)์„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ๋„ ํ•œ๋‹ค. ๋‚˜์ค‘์— ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •์— ๋Œ€ํ•ด ์ž์„ธํžˆ ํฌ์ŠคํŒ… ํ•ด๋ณผ๊ฒƒ์ด๋‹ค.

2.3.1 Ajax

1999๋…„, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋น„๋™๊ธฐ(asynchronous)๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต์‹  ๊ธฐ๋Šฅ์ธ Ajax(Asynchronous JavaScript and XML)๊ฐ€ XMLHttpRequest๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋“ฑ์žฅํ–ˆ๋‹ค.

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

 

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ํฌํ•จ๋œ HTML ์ฝ”๋“œ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ „์†ก๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ๋ฐœ์ƒํ•˜๊ณ , ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ Œ๋”๋งํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ๋ฉด์—์„œ๋„ ๋ถˆ๋ฆฌํ•˜๋‹ค. ์ด๋กœ ์ธํ•ด ํ™”๋ฉด์ด ์ „ํ™˜๋˜๋ฉฐ ์ˆœ๊ฐ„์ ์œผ๋กœ ๊นœ๋ฐ•์ด๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ณ , ์ด๋Š” ์›นํŽ˜์ด์ง€์˜ ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ํ•œ๊ณ„๋กœ ๋ฐ›์•„๋“ค์—ฌ์กŒ๋‹ค.

 

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

2.3.1 jQuery

2006๋…„, jQuery์˜ ๋“ฑ์žฅ์œผ๋กœ ๋‹ค์†Œ ๋ฒˆ๊ฑฐ๋กญ๊ณ  ๋…ผ๋ž€์ด ์žˆ๋˜ DOM(Document Object Model)์„ ๋”์šฑ ์‰ฝ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ  ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ์ด์Šˆ๋„ ์–ด๋Š ์ •๋„ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค. jQuery๋Š” ๋„“์€ ์‚ฌ์šฉ์ž ์ธต์„ ์ˆœ์‹๊ฐ„์— ํ™•๋ณดํ–ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฐฐ์šฐ๊ธฐ๊ฐ€ ๋‹ค์†Œ ๊นŒ๋‹ค๋กœ์šด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ณด๋‹ค ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ  ์ง๊ด€์ ์ธ jQuery๋ฅผ ๋” ์„ ํ˜ธํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์–‘์‚ฐ๋˜๊ธฐ๋„ ํ–ˆ๋‹ค.

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

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋ ค๋Š” ์‹œ๋„๊ฐ€ ๋Š˜๋ฉด์„œ ๋”์šฑ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ํ•„์š”์„ฑ์ด ๋Œ€๋‘๋˜์—ˆ๋‹ค. 2008๋…„ ๋“ฑ์žฅํ•œ ๊ตฌ๊ธ€์˜ V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ด๋Ÿฌํ•œ ์š”๊ตฌ์— ๋ถ€ํ•ฉํ•˜๋Š” ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ์—ˆ๋‹ค. 

์ด๋กœ์จ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐ์Šคํฌํ†ฑ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์œ ์‚ฌํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX; user experience)์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ •์ฐฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 

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

2.3.1 Node.js

2009๋…„, ๋ผ์ด์–ธ ๋‹ฌ์ด ๋ฐœํ‘œํ•œ Node.js๋Š” ๊ตฌ๊ธ€ V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋‹ค.

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

 

Node.js ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐœ๋ฐœํ•œ๋‹ค.

Node.js๋Š” ๋น„๋™๊ธฐ I/O๋ฅผ ์ง€์›ํ•˜๋ฉฐ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•จ์œผ๋กœ์จ ์š”์ฒญ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค. ๋”ฐ๋ผ์„œ SPA(Single Page Application)์— ์ ํ•ฉํ•˜์ง€๋งŒ CPU ์‚ฌ์šฉ๋ฅ ์ด ๋†’์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์ด๋กœ์จ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ๋™์ž‘ํ•˜๋Š” ๋ฐ˜์ชฝ์งœ๋ฆฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ทจ๊ธ‰์„ ๋ฐ›๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ด์ œ ํ”„๋ก ํŠธ์—”๋“œ ์˜์—ญ์€ ๋ฌผ๋ก  ๋ฐฑ์—”๋“œ ์˜์—ญ๊นŒ์ง€ ์•„์šฐ๋ฅด๋Š” ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ‘œ์ค€์œผ๋กœ ์ž๋ฆฌ ์žก์•˜๋‹ค.

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

2.3.1 SPA ํ”„๋ ˆ์ž„์›Œํฌ

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

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

 

์ด๋Ÿฌํ•œ ์š”๊ตฌ์— ๋ฐœ๋งž์ถฐ CBD(Component based development)๋ฐฉ๋ฒ•๋ก ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” SPA๊ฐ€ ๋Œ€์ค‘ํ™”๋˜๋ฉด์„œ Angular, React, Vue.js, Svelte ๋“ฑ ๋‹ค์–‘ํ•œ SPA ํ”„๋ ˆ์ž„์›Œํฌ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์ƒ๊ฒจ๋‚ฌ๋‹ค.

 

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

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

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ์„œ ๊ธฐ๋ณธ ๋ผˆ๋Œ€๋ฅผ ์ด๋ฃจ๋Š” ECMAScript์™€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณ„๋„ ์ง€์›ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ Web API, ์ฆ‰ DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web Worker ๋“ฑ์„ ํฌํ•จํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.

 

 

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

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

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„์˜ ์ปดํŒŒ์ผ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„(V8, SpiderMonkey, JavaScriptCore, Chakra ๋“ฑ)์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•ด ๋น„๊ต์  ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋Š๋ฆฐ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๋‹จ์ ์„ ํ•ด๊ฒฐํ–ˆ๋‹ค.

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

์ด๋ฅผ ํ†ตํ•ด ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์˜ ์žฅ์ ์ธ ๋™์  ๊ธฐ๋Šฅ ์ง€์›์„ ์‚ด๋ฆฌ๋ฉด์„œ ์‹คํ–‰ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์„ ๊ทน๋ณตํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๊ธฐ์ˆ ์  ๊ตฌ๋ถ„์ด ์ ์ฐจ ๋ชจํ˜ธํ•ด์ ธ ๊ฐ€๋Š” ์ถ”์„ธ๋‹ค. ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋Ÿฐํƒ€์ž„์— ์ปดํŒŒ์ผ๋˜๋ฉฐ ์‹คํ–‰ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๋„์›€ ์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ ์–ธ์–ด๋ผ๊ณ  ํ•  ์ˆ˜๋Š” ์—†๋‹ค.

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

๋น„๋ก ๋‹ค๋ฅธ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์™€์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•œ ๋…ผ์Ÿ์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋ณด๋‹ค ํšจ์œจ์ ์ด๋ฉด์„œ ๊ฐ•๋ ฅํ•œ ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋‹ค.

 

2.6 ES6 ๋ธŒ๋ผ์šฐ์ € ์ง€์› ํ˜„ํ™ฉ

์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ๋ฅผ ์ œ์™ธํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ES6๋ฅผ ์ง€์›(96~99%)ํ•˜์ง€๋งŒ 100% ์ง€์›ํ•˜๊ณ  ์žˆ์ง€๋Š” ์•Š๋‹ค.

 

๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•„์ง ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ๋‚˜ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ๋ฐ”๋ฒจ(Babel)๊ณผ ๊ฐ™์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด ES6 ์ด์ƒ์˜ ์‚ฌ์–‘์œผ๋กœ ๊ตฌํ˜„ํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ES5 ์ดํ•˜์˜ ์‚ฌ์–‘์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. 

๋‚˜์ค‘์— "Babel๊ณผ Webpack์„ ์ด์šฉํ•œ ES6+/ES.NEXT ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•"์— ๋Œ€ํ•ด ํฌ์ŠคํŒ… ํ•  ์˜ˆ์ •์ด๋‹ค.

Comments