์๋ฐ์คํฌ๋ฆฝํธ์ ์งํ ๊ณผ์ ๊ณผ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ฑํ๋์ด ์ ์ธ๊ณ ์น ๊ฐ๋ฐ์ ๋ฏธ์น๋ ์ํฅ์ ํ์ํฉ๋๋ค. ์ด ํ์ ๊ธฐ์ ์ ์ด์ , ๊ณผ์ , ๋ฏธ๋ ๋ํฅ์ ์ดํดํ์ธ์.
์น ํ๋ซํผ์ ์งํ: ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด ๊ธฐ๋ฅ ์ฑํ
์น ํ๋ซํผ์ ์ฌ์ฉ์์ ๊ฐ๋ฐ์์ ๋์์์ด ๋ณํํ๋ ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ ์ํด ์ง์์ ์ผ๋ก ๋ฐ์ ํ๋ ์ญ๋์ ์ธ ์ํ๊ณ์ ๋๋ค. ์ด ์งํ์ ์ค์ฌ์๋ ์น์ ์ํธ์์ฉ์ฑ๊ณผ ์ญ๋์ฑ์ ๊ตฌ๋ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฌ์ ์ ํ๊ตฌํ๋ฉฐ, ์๋ก์ด ์ธ์ด ๊ธฐ๋ฅ์ ์ฑํ๊ณผ ๊ทธ๊ฒ์ด ์ ์ธ๊ณ ์น ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฏธ์น๋ ์ํฅ์ ์ด์ ์ ๋ง์ถฅ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ECMAScript์ ๊ธฐ์
1995๋ ๋ธ๋ ๋ ์์ดํฌ๊ฐ ์ฒ์ ๋ง๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋น ๋ฅด๊ฒ ์น์ ํ์์ ์ธ ๋ถ๋ถ์ด ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ค์ ์ ์ ์ธ HTML ํ์ด์ง์ ์ํธ์์ฉ์ฑ๊ณผ ๋์ ์ธ ํ๋์ ์ถ๊ฐํ ์ ์์์ต๋๋ค. ํ์ง๋ง ์ด๊ธฐ ๋ฒ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์์ ์ผ๊ด์ฑ์ด ๋ถ์กฑํ์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๋ฝ ์ปดํจํฐ ์ ์กฐ์ ์ฒด ํํ(ECMA)๊ฐ ์ด ์ธ์ด๋ฅผ ํ์คํํ๊ธฐ ์ํด ์ค๋ฆฝ๋์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ก ๋์จ ํ์ค์ธ ECMAScript(ES)๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํ ์ผ๊ด๋ ์ฌ์์ ์ ๊ณตํ์ต๋๋ค.
ECMAScript๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฒญ์ฌ์ง ์ญํ ์ ํฉ๋๋ค. ๋งค๋ ECMAScript ํ์ค์ ์๋ก์ด ๊ธฐ๋ฅ, ๊ฐ์ ์ฌํญ, ์ฑ๋ฅ ์ต์ ํ์ ํจ๊ป ๋ฐ์ ํฉ๋๋ค. ์ด๋ฌํ ์ ๋ฐ์ดํธ๋ ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด(์: Chrome, Firefox, Safari, Edge)์ ๋ฐํ์ ํ๊ฒฝ(์: Node.js)์ ์ํด ๊ตฌํ๋ฉ๋๋ค. ์ด๋ฌํ ์๋ก์ด ๊ธฐ๋ฅ์ ์ฑํ์ ๊ธฐ์ ํ์ ์ด ์ ์ธ๊ณ ์น์ ์ด๋ป๊ฒ ํผ์ง๊ณ ์์ฉ๋๋์ง์ ๋ํ ํฅ๋ฏธ๋ก์ด ์ฌ๋ก ์ฐ๊ตฌ๋ฅผ ์ ์ํฉ๋๋ค.
ECMAScript์ ์งํ: ์ฃผ์ ๊ธฐ๋ฅ ํ์๋ผ์ธ
ECMAScript ํ์ค์ ์ฌ๋ฌ ์ฐจ๋ก์ ์ฃผ์ ๊ฐ์ ์ ๊ฑฐ์ณค์ผ๋ฉฐ, ๊ฐ ๊ฐ์ ๋ง๋ค ์ธ์ด์ ์๋นํ ํฅ์์ ๊ฐ์ ธ์์ต๋๋ค. ์ด๋ฌํ ์ด์ ํ๋ฅผ ์ดํดํ๋ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ ์ฑํ์ ๊ถค์ ์ ํ์ ํ๋ ๋ฐ ์ค์ํ ๋งฅ๋ฝ์ ์ ๊ณตํฉ๋๋ค.
ES5 (ECMAScript 2009)
ES5๋ ๊ฐ๋ฐ์๊ฐ ๋ ๊นจ๋ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋๋ 'strict mode'์ ๊ฐ์ ๊ธฐ์ด์ ์ธ ๊ฐ์ ์ฌํญ์ ๊ฐ์ ธ์์ต๋๋ค. ๋ํ ๋ด์ฅ๋ ํ์ฑ ๋ฐฉ๋ฒ์ผ๋ก JSON(JavaScript Object Notation)์ ๋์ ํ์ฌ ๋ฐ์ดํฐ ๊ตํ์ ๊ฐ์ํํ์ต๋๋ค.
ES6/ES2015 (ECMAScript 2015)
ES6๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ฅ์ ์์ด ์๋นํ ๋์ฝ์ ๋ํ๋ด๋ ์ฃผ์ ์ ํ์ ์ด์์ต๋๋ค. ์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- `let`๊ณผ `const` ํค์๋: ๋ธ๋ก ์ค์ฝํ ๋ณ์ ์ ์ธ์ ๋์ ํ์ฌ ์ฝ๋ ๊ตฌ์ฑ์ ๊ฐ์ ํ๊ณ ์ ์ฌ์ ๋ฒ๊ทธ๋ฅผ ์ค์์ต๋๋ค.
- ํ์ดํ ํจ์: ํจ์ ์ ์๋ฅผ ์ํ ๋ ๊ฐ๊ฒฐํ ๊ตฌ๋ฌธ์ ์ ๊ณตํ์ต๋๋ค.
- ํด๋์ค: ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ๋ ์น์ํ ๊ตฌ๋ฌธ์ ์ ๊ณตํ์ต๋๋ค.
- ๋ชจ๋: ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋๋ก ๊ตฌ์กฐํํ ์ ์๊ฒ ํ์ฌ ์ฝ๋ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ํฅ์์์ผฐ์ต๋๋ค.
- ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด: ๋ ์ฌ์ด ๋ฌธ์์ด ๋ณด๊ฐ๊ณผ ์ฌ๋ฌ ์ค ๋ฌธ์์ด์ ํ์ฉํ์ต๋๋ค.
- ํ๋ก๋ฏธ์ค(Promises): ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ๋ ๊น๋ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ณ ์ฝ๋ฐฑ ์ง์ฅ์ ๋น ์ง ๊ฐ๋ฅ์ฑ์ ์ค์์ต๋๋ค.
ES6๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์์ฑ๋๋ ๋ฐฉ์์ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฐ๊พธ์๊ณ , ๋ ๋ณต์กํ๊ณ ๊ฒฌ๊ณ ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธธ์ ์ด์์ต๋๋ค.
ES2016 - ESNext (์ฐ๊ฐ ์ ๋ฐ์ดํธ)
ES6 ์ดํ, ECMAScript๋ ์ฐ๊ฐ ์ถ์ ์ฃผ๊ธฐ๋ฅผ ์ฑํํ์ต๋๋ค. ์ดํ ๋งค๋ ์ ์ง์ ์ด์ง๋ง ๊ฐ์น ์๋ ์ ๋ฐ์ดํธ๊ฐ ์ด๋ฃจ์ด์ก์ต๋๋ค:
- ES2016: `Array.prototype.includes()` ๋ฉ์๋์ ๊ฑฐ๋ญ์ ๊ณฑ ์ฐ์ฐ์(`**`)๋ฅผ ํฌํจํ์ต๋๋ค.
- ES2017: async/await๋ฅผ ๋์ ํ์ฌ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๋์ฑ ์ฝ๊ฒ ๋ง๋ค์์ต๋๋ค.
- ES2018: ๋๋จธ์ง/์ ๊ฐ ์์ฑ(rest/spread properties) ๋ฐ ๋น๋๊ธฐ ๋ฐ๋ณต๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.
- ES2019: `Array.prototype.flat()`, `Array.prototype.flatMap()` ๋ฐ ๊ธฐํ ๊ฐ์ ์ฌํญ์ ๋์ ํ์ต๋๋ค.
- ES2020: ์ต์ ๋ ์ฒด์ด๋(`?.`), ๋ ๋ณํฉ ์ฐ์ฐ์(`??`) ๋ฑ์ ํฌํจํ์ต๋๋ค.
- ES2021: `String.prototype.replaceAll()`, `Promise.any()`, `WeakRef`์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.
- ES2022: ํด๋์ค ํ๋, ๋น๊ณต๊ฐ ํด๋์ค ๋ฉค๋ฒ, `async` ํจ์ ์ธ๋ถ์์์ `await` ํค์๋๋ฅผ ๋์ ํ์ต๋๋ค.
- ES2023: `toSorted()`, `toReversed()`, `toSpliced()`, `with()`์ ๊ฐ์ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ณ , ์ฌ๋ณผ๊ณผ ํด์๋ฑ ์ ๋ํ ์ง์์ ๊ฐ์ ํ์ต๋๋ค.
์ด๋ฌํ ์ง์์ ์ธ ์งํ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์น ๊ฐ๋ฐ์ ์ต์ ์ ์ ๋จธ๋ฌผ๋ฉด์ ๊ฐ๋ฐ์์ ๋์์์ด ๋ณํํ๋ ์๊ตฌ์ ์น์ ์์์ ์ ์ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ฑํ ๊ณผ์ : ๊ธ๋ก๋ฒ ๊ด์
์๋ก์ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ์ฑํ์ ์ฆ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง์ง ์์ต๋๋ค. ์ด๋ ๋ค์ํ ์์ธ์ ์ํด ์ํฅ์ ๋ฐ๋ ์ ์ง์ ์ธ ๊ณผ์ ์ ๋๋ค:
๋ธ๋ผ์ฐ์ ํธํ์ฑ
์ค์ํ ์์๋ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๋๋ค. ๊ฐ ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด๊ฐ ์ต์ ECMAScript ์ฌ์์ ๊ตฌํํจ์ ๋ฐ๋ผ ๊ฐ๋ฐ์๋ ๋์ ๊ณ ๊ฐ์ด ์ด๋ค ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋์ง ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ๋๋ฆฌ ์ง์๋์ง ์๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๊ฐ ๋ค์ํ ์ฌ์ฉ์ ํ๊ฒฝ์์ ์ํํ๊ฒ ์๋ํ๋๋ก ๋ณด์ฅํ๊ธฐ ์ํด ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ ์ ๋ต์ ์ฑํํด์ผ ํฉ๋๋ค.
CanIUse.com๊ณผ ๊ฐ์ ๋๊ตฌ๋ ํน์ ๊ธฐ๋ฅ์ ๋ํ ๋ธ๋ผ์ฐ์ ์ง์์ ๋ํ ์ต์ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ฌ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ์๋ก์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํด ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ณ ์ ์ฌ์ ์ธ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ตฌํ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ์ฌ์ฉ ๋น์จ์ด ๋์ ๊ตญ๊ฐ์ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ํ๋ ๊ฐ๋ฐ์๋ ์ต์ ๊ธฐ๋ฅ์ ์ ์ํ๊ฒ ์ฑํํ๋ ๋ฐ ๋ ์ ์คํด์ผ ํ ์ ์์ต๋๋ค.
ํธ๋์คํ์ผ๋ง: ๊ฒฉ์ฐจ ํด์
์ต์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์๋ก์ด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ ๋๋ฆฌ ์ง์๋๋ ๊ตฌํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํํ๋ ๊ณผ์ ์ธ ํธ๋์คํ์ผ๋ง์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ์ด์์ ๋๋ค. Babel๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ์ด ๋ชฉ์ ์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ํธ๋์คํ์ผ๋ง์ ํตํด ๊ฐ๋ฐ์๋ ๊ด๋ฒ์ํ ๋ธ๋ผ์ฐ์ ์ง์์ ๋ํด ๊ฑฑ์ ํ์ง ์๊ณ ์ต์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ์ฆ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ด์ ์ ๋๋ฆด ์ ์๊ฒ ํ๋ฏ๋ก ์๋ก์ด ๊ธฐ๋ฅ์ ์ฑํ์ ํฌ๊ฒ ๊ฐ์ํํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์ํ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ๊ฐ์ง ๋ค์ํ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ์ธ๋์ ๊ฐ๋ฐํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ํํ๊ฒ ์คํ๋๋๋ก ๋ณด์ฅํ๊ธฐ ์ํด ํธ๋์คํ์ผ๋ง์ ํฌ๊ฒ ์์กดํ ์ ์์ต๋๋ค.
ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ์ํฅ๋ ฅ ๋ฐ ์ฑํ ๋์ธ
์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ฑํ์ ์ํฅ์ ๋ฏธ์น๊ณ ๊ฐ์ํํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. React, Angular, Vue.js์ ๊ฐ์ ์ธ๊ธฐ ์๋ ํ๋ ์์ํฌ๋ ์ข ์ข ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ ํ์ฉํ๋ ๊ธฐ๋ฅ์ ๋์ ํ์ฌ ๊ฐ๋ฐ์๋ค์ด ํด๋น ๊ธฐ๋ฅ์ ์ฑํํ๋๋ก ์ฅ๋ คํฉ๋๋ค. ํ๋ ์์ํฌ๋ ๋ํ ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ์ฌ ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ํธ๋์คํ์ผ๋ง์ด๋ ํด๋ฆฌํ์ ๊ด๋ฆฌํ์ง ์๊ณ ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
์ ์ ํ์ดํ์ ์ถ๊ฐํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ์งํฉ์ธ ํ์ ์คํฌ๋ฆฝํธ์ ๋ถ์์ ์๊ฐํด๋ณด์ญ์์ค. ํ์ ์คํฌ๋ฆฝํธ ์์ฒด๋ ์ต์ ECMAScript ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ๊ฐ๋ฐ์๋ค์ด ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ ๊ณตํ๋ ๋ ๊ตฌ์กฐํ๋๊ณ ํ์ -์์ ํ ํ๊ฒฝ์ ์ต์ํด์ง์ ๋ฐ๋ผ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉ์ด ๊ฐ์ํ๋๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ ์คํฌ๋ฆฝํธ์ ์ฑํ์ ๋ ๊ฒฌ๊ณ ํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์๊ตฌํ๋ ์ ์ธ๊ณ ๊ธฐ์ ํ๊ฒฝ์์ ํนํ ๊ฐํฉ๋๋ค.
์ปค๋ฎค๋ํฐ์ ๊ต์ก
์๋ฐ์คํฌ๋ฆฝํธ ์ปค๋ฎค๋ํฐ๋ ๋ฐฉ๋ํ๊ณ ๊ธ๋ก๋ฒํ๋ฉฐ, ๊ฐ๋ฐ์๋ค์ ์ง์์ ๊ณต์ ํ๊ณ ์ง์์ ์ ๊ณตํ๋ฉฐ ๊ต์ก ์๋ฃ๋ฅผ ๋ง๋ญ๋๋ค. ์จ๋ผ์ธ ํํ ๋ฆฌ์ผ, ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ, ์คํ ์์ค ํ๋ก์ ํธ๋ ๊ฐ๋ฐ์๋ค์๊ฒ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ต์กํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฌํ ์๋ฃ๊ฐ ์์ฑ๋๊ณ ๊ณต์ ๋๋ ์๋๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ฑํ๋ฅ ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ฌด๋ฃ๋ก ์ ๊ทผ ๊ฐ๋ฅํ ํ์ต ์๋ฃ์ ๊ด๋ฒ์ํ ๊ฐ์ฉ์ฑ์ ํนํ ์ ํฅ ์์ฅ์ ๊ฐ๋ฐ์๋ค์ด ์ต์ ๋ํฅ์ ๋ฐ๋ผ๊ฐ๋ ๋ฐ ์ค์ํฉ๋๋ค.
์ํ๊ณ: Node.js์ ๊ทธ ์ด์
์๋ก์ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ์ฑํ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋๋ฌ์ผ ์ํ๊ณ, ํนํ ๋ธ๋ผ์ฐ์ ์ธ๋ถ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํ ๋ฐํ์ ํ๊ฒฝ์ธ Node.js์ ์ํด ์ฃผ๋๋๊ธฐ๋ ํฉ๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ ์ข ์ข ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์์ ํ ์ง์๋๊ธฐ ์ ์ Node.js์์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์๋ฒ ์ธก ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ํ๋ ๊ฐ๋ฐ์๋ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์์ํ๊ณ ์คํํ ์ ์์ต๋๋ค. Node.js๋ฅผ ์ฌ์ฉํ ์๋ฒ๋ฆฌ์ค ์ปดํจํ ๊ณผ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๋ถ์์ ์๋ก์ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ์ฑํ์ ๋์ฑ ๊ฐ์ํํ๊ณ ์์ต๋๋ค.
๊ณผ์ ๋ฐ ๊ณ ๋ ค์ฌํญ
์๋ก์ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ์ฑํ์ ์๋ง์ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๋ช ๊ฐ์ง ๊ณผ์ ์ ๊ณ ๋ ค์ฌํญ์ด ์กด์ฌํฉ๋๋ค:
๋ ๊ฑฐ์ ์ฝ๋๋ฒ ์ด์ค
๋ง์ ์กฐ์ง์๋ ๊ตฌ๋ฒ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ํฌ๊ณ ์ค๋๋ ์ฝ๋๋ฒ ์ด์ค๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ ๊ฑฐ์ ์์คํ ์ ์๋ก์ด ๊ธฐ๋ฅ์ ํตํฉํ๋ ๊ฒ์ ๋ณต์กํ๊ณ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ์ด๋ ์ข ์ข ์๋ก์ด ๊ธฐ๋ฅ์ ์ ์ง์ ์ผ๋ก ๋์ ํ๊ณ ๊ธฐ์กด ์ฝ๋์ ํจ๊ป ํ ์คํธํ๋ ๋จ๊ณ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ํํธํ
๋ธ๋ผ์ฐ์ ํ์ค์ ๋ฐ์ ์๋ ๋ถ๊ตฌํ๊ณ ๋ธ๋ผ์ฐ์ ํํธํ๋ ์ฌ์ ํ ๊ณผ์ ์ ๋๋ค. ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ฒ์ ๊ณผ ์ฌ์ฉ์ ์์ด์ ํธ๋ ๋ถ์ผ์น๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ์ฅ์น์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์ผ๊ด๋๊ฒ ์๋ํ๋์ง ํ ์คํธํ๊ณ ๋ณด์ฅํ๋ ๊ฒ์ ์ง์์ ์ธ ๋ ธ๋ ฅ์ ๋๋ค.
๋ณด์์ ์ํฅ
์๋ก์ด ๊ธฐ๋ฅ์ ์ฑํํ๋ ๊ฒ์ ์ ์คํ๊ฒ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋๋๋ก ๋ณด์ ์ทจ์ฝ์ ์ ๋์ ํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ ์ฌ์ ์ธ ๋ณด์ ์ํ์ ์ธ์งํ๊ณ ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS)๊ณผ ๊ฐ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์์ ํ ์ฝ๋ฉ ๊ดํ์ ๋ฐ๋ผ์ผ ํฉ๋๋ค. ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ์ ์ฝ๋ ๋ฆฌ๋ทฐ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ฑ๋ฅ ์ค๋ฒํค๋
์๋ก์ด ๊ธฐ๋ฅ, ํนํ ๊ณผ๋ํ๊ฒ ์ฌ์ฉ๋๊ฑฐ๋ ์ค์ฉ๋ ๊ฒฝ์ฐ ๋๋๋ก ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋์ ์ฑ๋ฅ ์ํฅ์ ์ ์คํ๊ฒ ๊ณ ๋ คํ๊ณ ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ต์ ํํด์ผ ํฉ๋๋ค. ๋ฒค์น๋งํน ๋ฐ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ํด๊ฒฐํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
ํ์ต ๊ณก์
์๋ฐ์คํฌ๋ฆฝํธ์ ์ง์์ ์ธ ๋ฐ์ ์ ๊ฐ๋ฐ์๋ค์ด ๋์์์ด ๋ฐฐ์ฐ๊ณ ์ ์ํ ๊ฒ์ ์๊ตฌํฉ๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ต๋ํ๋ ๋ฐ๋ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ์ต์ ๋ฐ์ ์ ๋ํ ์ต์ ์ ๋ณด๋ฅผ ์ ์งํ๋ ๊ฒ์ ํนํ ์๊ฐ์ด๋ ์์์ด ์ ํ๋ ๊ฐ๋ฐ์์๊ฒ๋ ์๋นํ ๋์ ์ด ๋ ์ ์์ต๋๋ค.
๋ฏธ๋ ๋ํฅ ๋ฐ ์์ธก
์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ๋ฏธ๋๋ ๋ฐ์ผ๋ฉฐ, ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ๋ํฅ๊ณผ ์์ธก์ด ์์ต๋๋ค:
ECMAScript์ ์ง์์ ์ธ ์งํ
ECMAScript ํ์ค์ ๋งค๋ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์ฌํญ์ด ์ถ๊ฐ๋๋ฉด์ ๊ณ์ํด์ ๋ฐ์ ํ ๊ฒ์ ๋๋ค. ๊ฐ๋ฐ์๋ ์ด๋ฌํ ์ ๋ฐ์ดํธ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์งํ๊ณ ๊ฒฝ์๋ ฅ์ ์ ์งํ๊ธฐ ์ํด ์ต์ ๊ธฐ๋ฅ์ ์์ฉํด์ผ ํฉ๋๋ค.
์น์ด์ ๋ธ๋ฆฌ์ ๋ํ ๊ด์ฌ ์ฆ๊ฐ
์น์ด์ ๋ธ๋ฆฌ(Wasm)๋ ์น ๋ธ๋ผ์ฐ์ ์์ ๋ค๋ฅธ ์ธ์ด(์: C++ ๋๋ Rust)๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ถ์ง๋ ฅ์ ์ป๊ณ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฌ์ ํ ์ค์ํ๊ฒ ์ง๋ง, ์น์ด์ ๋ธ๋ฆฌ๋ ์ฑ๋ฅ์ด ์ค์ํ ์์ ์์ ์ ์ฐจ ๋ ํฐ ์ญํ ์ ํ์ฌ ์น ๊ฐ๋ฐ์ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค ๊ฒ์ ๋๋ค.
์๋ฒ๋ฆฌ์ค ์๋ฐ์คํฌ๋ฆฝํธ
๊ฐ๋ฐ์๊ฐ ์๋ฒ๋ฅผ ๊ด๋ฆฌํ์ง ์๊ณ ์ฝ๋๋ฅผ ๋ฐฐํฌํ๋ ์๋ฒ๋ฆฌ์ค ์ปดํจํ ์ด ์ ์ ๋ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ, ํนํ Node.js๋ ์๋ฒ๋ฆฌ์ค ์ํคํ ์ฒ์ ํต์ฌ ํ๋ ์ด์ด์ ๋๋ค. ์ด ์ถ์ธ๋ ๊ณ์๋์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ทธ ๊ธฐ๋ฅ์ ์ฑํ์ ๋์ฑ ๊ฐ์ํํ ๊ฒ์ ๋๋ค.
๋ก์ฐ์ฝ๋/๋ ธ์ฝ๋ ํ๋ซํผ์ ๋ถ์
๋ก์ฐ์ฝ๋/๋ ธ์ฝ๋ ํ๋ซํผ์ ๋น๊ฐ๋ฐ์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๋๋ก ๋ง๋ค๊ณ ์์ต๋๋ค. ์ด๋ฌํ ํ๋ซํผ์ ์ข ์ข ๋ด๋ถ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ทธ ์ํ๊ณ์ ๋ฒ์๋ฅผ ๋์ฑ ํ์ฅํฉ๋๋ค.
์ ๊ทผ์ฑ๊ณผ ์ฑ๋ฅ์ ๋ํ ๊ฐ์กฐ ์ฆ๊ฐ
์น ์ ๊ทผ์ฑ๊ณผ ์ฑ๋ฅ์ด ์ ์ ๋ ์ค์ํด์ง๊ณ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ด๋ฌํ ์ธก๋ฉด์ ์ฐ์ ์ํ์ฌ ๋ชจ๋ ์ฌ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์๊ณ ๋ชจ๋ ์ฅ์น์์ ํจ์จ์ ์ผ๋ก ์๋ํ๋๋ก ๋ณด์ฅํด์ผ ํฉ๋๋ค.
๊ฒฐ๋ก : ์๋ฐ์คํฌ๋ฆฝํธ ์ฌ์ ๋ฐ์๋ค์ด๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ์ ์งํ๋ ์น ๊ฐ๋ฐ ์ธ๊ณ์์์ ์ ์์ฑ๊ณผ ์ค์์ฑ์ ์ฆ๋ช ํฉ๋๋ค. ์ด๋ผํ ์์์์๋ถํฐ ์ ๊ตํ๊ณ ๊ฐ๋ ฅํ ์ธ์ด๋ก ์ฑ์ฅํ์ผ๋ฉฐ, ์ ์ธ๊ณ ์น์ ๋์์์ด ๋ณํํ๋ ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ ์ํด ์ง์์ ์ผ๋ก ๊ฐ์ ๋๊ณ ๊ฐํ๋๊ณ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ํธํ์ฑ๊ณผ ํธ๋์คํ์ผ๋ง์์๋ถํฐ ์ปค๋ฎค๋ํฐ ์ง์๊ณผ ํ๋ ์์ํฌ์ ์ํฅ์ ์ด๋ฅด๊ธฐ๊น์ง ์๋ก์ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ์ฑํ์ ์ํฅ์ ๋ฏธ์น๋ ์์ธ์ ์ดํดํ๋ ๊ฒ์ ๋ชจ๋ ์น ๊ฐ๋ฐ์์๊ฒ ํ์์ ์ ๋๋ค.
์ต์ ECMAScript ํ์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ ์งํ๊ณ , ํ๋์ ์ธ ๊ฐ๋ฐ ๊ดํ์ ์์ฉํ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ ์ปค๋ฎค๋ํฐ์ ์ ๊ทน์ ์ผ๋ก ์ฐธ์ฌํจ์ผ๋ก์จ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ ํ์ฉํ์ฌ ๋ชจ๋ ์ฌ๋์ ์ํ ํ์ ์ ์ด๊ณ ๋งค๋ ฅ์ ์ด๋ฉฐ ์ ๊ทผ ๊ฐ๋ฅํ ์น ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฏธ๋๋ ๋ฐ์ผ๋ฉฐ, ์๋ก์ด ๊ธฐ๋ฅ์ ์ฑํํ๋ ์ฌ์ ์ ๊ณ์ํด์ ํฅ๋ฏธ๋กญ๊ณ ๋ณด๋ ์๋ ์ผ์ด ๋ ๊ฒ์ ๋๋ค.