
Deno๊ฐ Node.js๋ฅผ ๋์ฒดํ ์ ์์๊น?
Deno๊ฐ Node.js๋ฅผ ๋์ฒดํ ์ ์์๊น? ๊ด๋ จ
JavaScript ๋ฐํ์์ ์๋ก์ด ํจ๋ฌ๋ค์์ ์ ์ํ๋ Deno๊ฐ 2024๋ 10์, 2.0 ๋ฒ์ ์ ์ถ์ํ์ต๋๋ค. 2018๋ ์ฒซ ๊ณต๊ฐ ์ดํ ์ฝ 6๋ ๋ง์ ์ฃผ์ ์ ๋ฐ์ดํธ์ ๋๋ค.
ํฅ๋ฏธ๋กญ๊ฒ๋ ํ์ฌ JavaScript ๋ฐํ์์ ์ ๋ ์ฃผ์์ธ Node.js์ Deno๋ ๋ชจ๋ ๊ฐ๋ฐ์ ๋ผ์ด์ธ ๋ฌ(Ryan Dahl)์ด ๊ฐ๋ฐํ์์ต๋๋ค.
๋ผ์ด์ธ ๋ฌ์ Deno๋ฅผ ์ฒ์ ๊ณต๊ฐํ ๋น์ โNode.js์ ๋ํ 10๊ฐ์ง ํํ(10 Things I Regret About Node.js)โ ๋ผ๋ ๋ฐํ๋ฅผ ํฉ๋๋ค. ์ด ๋ฐํ์์ ๊ทธ๋ Node.js์ ์ด๊ธฐ ์ค๊ณ์์ ๋์ณค๋ ์ ๋ค๊ณผ ๊ทธ๋ก ์ธํด ๋ฐ์ํ ๋ฌธ์ ๋ค์ ์ธ๊ธํ์ต๋๋ค. ๋ฌ์ ์ด๋ฌํ ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Deno๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์์ํ๋ค๊ณ ๋ฐํ์ฃ . ๊ฐ๋ฐ์๊ฐ ์์ ์ด ๋ง๋ ํ๋ก์ ํธ๋ฅผ ๊ณต๊ฐ์ ์ธ ์๋ฆฌ์์ ํ๊ณ ํ๊ณ ๋นํํ๋ฉฐ ์ด๋ฅผ ๊ฐ์ ํ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ํํ ๊ด๊ฒฝ์ ์๋๋๋ค.
๊ทธ๋ ๋ค๋ฉด, Node.js๋ ์ด๋ค ์ ์์ ํ์์ ํ๊ณ๋ฅผ ๊ฐ์ก์๊น์? Deno๊ฐ ์ด๋ฅผ ์ด๋ป๊ฒ ํ์ด๋ผ ์ ์์์๊น์? ์ด ๊ธ์์๋ Deno ๊ฐ ๋ฌด์์ธ์ง๋ถํฐ, Deno 1.0๊ณผ Deno 2.0์ ์ฃผ์ ํน์ง์ ๋ํด ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.

๊ทธ๋์ Deno๊ฐ ์ ํํ ๋ญ๋ฐ?
Deno is the open-source JavaScript runtime for the modern web.
Deno๋ ํ๋ ์น์ ์ํ ์คํ ์์ค ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ ๋๋ค.
๊ณต์ ํํ์ด์ง์์๋ Deno๋ฅผ ์ด๋ ๊ฒ ์๊ฐํ๊ณ ์์ต๋๋ค. ์ด ๋ฌธ์ฅ์ ์ดํดํ๊ธฐ ์ํด์๋ 4๊ฐ์ง ์ฉ์ด๋ฅผ ๋จผ์ ์ดํด๋ด์ผ ํ๋๋ฐ์, ๋ฐ๋ก ์น(Web), ์คํ ์์ค(Open source), ์๋ฐ์คํฌ๋ฆฝํธ(JavaScript), ๊ทธ๋ฆฌ๊ณ ๋ฐํ์(run-time)์ ๋๋ค.
ํ๋ ์น
๋จผ์ ์น์ ์ธํฐ๋ท์ ํตํด ์ ๊ทผํ ์ ์๋ ์ํธ ์ฐ๊ฒฐ๋ ๊ณต๊ฐ ์นํ์ด์ง๋ค์ ์์คํ ์ ๋๋ค. ์ด ์์คํ ์ ์ ๋ณด ๊ฒ์, ์ํต, ์์ ๋ฑ ๋ค์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ ํ๋ ์ํ์ ํ์ ์์๊ฐ ๋์์ต๋๋ค. ๋๋ ธ๊ฐ โํ๋ ์นโ์ ์ํ ๋ฐํ์์ด๋ผ๋ ๊ฒ์ ์ต๊ทผ ์น์ ๋ณํ์ ๋ฐ๋ฅธ ํ๊ฒฝ์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด ์ค๊ณ๋์์์ ๋ปํฉ๋๋ค.
์ฌ๊ธฐ์ โ์ต์ ์น ํ๊ฒฝ์ ์๊ตฌโ๋ผ๋ ํํ์ด ๋ชจํธํ ์ ์์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. Node.js๋ 2024๋ 8์ ์ถ์๋ v22.7.0์์์ผ TypeScript ๋ฌธ๋ฒ์ ์คํ์ ์ผ๋ก ์ง์ํ๊ธฐ ์์ํ์ต๋๋ค. ๋ฐ๋ฉด Deno๋ 2018๋ ์ฒซ ๊ณต๊ฐ ๋๋ถํฐ ์ด๋ฏธ JavaScript, TypeScript, ๊ทธ๋ฆฌ๊ณ WebAssembly๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๊ณ ์์์ต๋๋ค.
์ด ๋ฐ์๋ Deno๋ ์ฌ๋ฌ ๊ฐ์ง ๊ฒ์ฆ๋ ํน์ง์ ๊ฐ์ถ๊ณ ์์ต๋๋ค. ๋จ์ผ ์คํ ํ์ผ(Single execution file), ์ ํ์ ์ ๊ทผ ๊ถํ(ํ์ผ ์์คํ , ๋คํธ์ํฌ, ํ๊ฒฝ๋ณ์ ๋ฑ), Promise ๊ธฐ๋ฐ์ API, ESM(ECMAScript Modules) ๊ธฐ๋ณธ ์ง์, ๊ทธ๋ฆฌ๊ณ URL์ ์ด์ฉํ ๋ชจ๋ ๊ด๋ฆฌ ๋ฑ์ด ๊ทธ ์์ ๋๋ค.
์ด ์์๋ค์ด ๋ชจ๋ ์๋กญ๊ฑฐ๋ ํ์ ์ ์ธ ๊ฒ์ ์๋๋๋ค. URL์ ์ด์ฉํ ๋ชจ๋ ๊ด๋ฆฌ๋ ์ด๋ฏธ Go์์, ์ ํ์ ์ ๊ทผ ๊ถํ์ ์ด๋ฏธ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ๋๊ณ ์์์ต๋๋ค. ํ์ง๋ง Deno๋ ์ด์ฒ๋ผ ๊ฒ์ฆ๋ ๊ธฐ๋ฅ๋ค์ JavaScript ๋ฐํ์์ ํตํฉํ์ฌ ์ ๊ณตํ๋ค๋ ํน์ง์ ๊ฐ์ง๋๋ค. ์ด๋ Deno๊ฐ โํ๋ ์นโ์ ์๊ตฌ์ฌํญ์ ์ ๋ฐ์ํ๋ฉฐ ์น ๊ฐ๋ฐ์๋ค์๊ฒ ๋ ์์ ํ๊ณ ํจ์จ์ ์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํ๊ณ ์์์ ๋ณด์ฌ์ค๋๋ค.
์คํ ์์ค
์คํ ์์ค๋ โ์คํ ์์ค ์ํํธ์จ์ด(Open Source Software, OSS)โ๋ฅผ ์ผ์ปฌ์ผ๋ฉฐ ๊ณต๊ฐ์ ์ผ๋ก ์ก์ธ์คํ ์ ์๋๋ก ์ค๊ณ๋์ด ๋๊ตฌ๋ ์ ํฉํ๋ค๊ณ ์๊ฐํ๋ ๋๋ก ์ฝ๋๋ฅผ ๋ณด๊ณ , ์์ ํ๊ณ , ๋ฐฐํฌํ ์ ์๋ ์ฝ๋๋ฅผ ๋งํฉ๋๋ค.
์คํ ์์ค์ ๋ํด ๋ ์์ธํ ์๊ณ ์ถ๋ค๋ฉด ๋ค์์ ๊ธ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์: โ[IT ์์์ฌ์ ] ์ ๋ณด ์์ ํ์ ํต์ฌ, ์คํ์์ค ์ด๋โ
JavaScript
JavaScript๋ ๊ฒฝ๋์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด(๋๋ ์ฆ์ ์ปดํ์ผ ์ธ์ด)๋ก, ์ผ๊ธ ํจ์(First-Class Function)๋ฅผ ์ง์ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค. ์ฃผ๋ก ์น ํ์ด์ง์ ์คํฌ๋ฆฝํธ ์ธ์ด๋ก ๋๋ฆฌ ์๋ ค์ ธ ์์ง๋ง, Node.js, Apache CouchDB, Adobe Acrobat๊ณผ ๊ฐ์ ๋น๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐํ์
์ด๋ฌํ ์ธ์ด์ ์คํ ํ๊ฒฝ์ ๋ฐํ์(Runtime)์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๊ธฐ์ JavaScript์ ๋ฐํ์ ํ๊ฒฝ์ ์ฃผ๋ก ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ ๊ตญํ๋์ด ์์์ต๋๋ค. ๊ทธ๋ฌ๋ Node.js์ ๋ฑ์ฅ์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ฐ์์๋ ์คํํ ์ ์๋ ์ธ์ด๋ก ๋ฌ๋ผ์ก๊ณ , ์ง๊ธ์ ์๋ฒ ์ฌ์ด๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก์์ ์์น๋ฅผ ํ๊ณ ํ ํ์์ต๋๋ค.
Node.js์ Deno
Node.js๋ ์ ํต์ ์ผ๋ก ์ฐ์ฌ์จ ์คํ์์ค ํฌ๋ก์ค-ํ๋ซํผ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ๋ง์ ํ๋ก์ ํธ๋ค์ด Node.js๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์์ต๋๋ค. ๋ ธ์ ์ด๋ ์ฌ๋ ๊ฐ์ ๋ฐ์คํฌํฑ ์ฑ(Electron), ๊ฑฐ์ ๋๋ถ๋ถ์ ํ๋ ํ๋ ์์ํฌ(React, Vue.js, Angular, Svelte), ํฌ๋กค๋ง ์์คํ (Nest.js) ๋ฑ ์๋ง์ ๋ถ์ผ์์ ์ฌ์ฉ๋๊ณ ์์ง์.
ํ์ง๋ง ์ด๋ฌํ Node.js๋ฅผ ๊ฐ๋ฐํ ๋ผ์ด์ธ ๋ฌ์กฐ์ฐจ ๊ทธ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ด๋ ค์ Deno๋ฅผ ๋ด๋์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด Node.js๊ฐ ์ง๋ ํ๊ณ๋ ๋ฌด์์ผ๊น์?
Node.js๊ฐ ๋์น ๊ฒ๋ค
Promise
JavaScript ๊ฐ๋ฐ์๋ผ๋ฉด ํํ๋ค โ์ฝ๋ฐฑ ์ง์ฅโ์ด๋ผ๋ ํํ์ ๋ค์ด๋ณด์์ ๊ฒ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ค์ฒฉ๋ ์ฝ๋ฐฑ์ผ๋ก ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ ๋๋ฉด, ์ฝ๋ ๊ฐ๋ ์ฑ์ด ๊ธ๊ฒฉํ ๋จ์ด์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
function getUser(userId, callback) {
setTimeout(() => {
console.log(`User ${userId} fetched`)
callback({ id: userId, name: 'Alice' })
}, 1000)
}
function getPosts(userId, callback) {
setTimeout(() => {
console.log(`Posts for user ${userId} fetched`)
Node.js์ ์ด๊ธฐ ๋ฒ์ ์๋ ์ด๋ฅผ ๋์ฒดํ Promise๊ฐ ํ๋ ์๊ฒผ์ง๋ง, ๋ค์ ์ ๊ฑฐ๋์์ต๋๋ค. ๋ฐ๋ผ์ ์ค๋๋ ๋๋ฆฌ ์ฐ์ด๋ Async/Await ๋ฌธ๋ฒ๋ ์ง์๋์ง ์์์ต๋๋ค. ์ด ๋๋ฌธ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ์ฃผ๋ก ์ฝ๋ฐฑ ํจ์๋ฅผ ํ์ฉํด์ผ ํ๊ณ , ์ด๋ ์ฝ๋ฐฑ ์ง์ฅ ๋ฌธ์ ๋ฅผ ์ด๋ํ๊ณค ํ์ต๋๋ค.
๋ณด์(Security)
V8 ์์ฒด๋ ๋งค์ฐ ๊ฐ๋ ฅํ ๋ณด์ ์๋๋ฐ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ Node.js์ ์ค๊ณ ๊ณผ์ ์์ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ์ด ๋ณด์ ๋ชจ๋ธ์ ์ ์งํ๋ ๋ฐฉ๋ฒ์ ๋ ๊น์ด ๊ณ ๋ฏผํ๋ค๋ฉด, Node.js๋ ๋ค๋ฅธ ์ธ์ด์์๋ ์ ๊ณตํ์ง ์์ ๋งํผ ๊ฐ๋ ฅํ ๋ณด์์ ๋ณด์ฅํ ์๋ ์์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ฆฐํฐ(linter)์ ๊ฐ์ ๋๊ตฌ๊ฐ ์ปดํจํฐ์ ๋คํธ์ํฌ์ ์์ ํ ์ ๊ทผ์ ๊ฐ์ง ํ์๋ ์์ต๋๋ค. ํ์ง๋ง, ๊ธฐ์กด Node.js ํ๊ฒฝ์์๋ ๋ชจ๋ ์คํฌ๋ฆฝํธ๊ฐ ํ์ผ ์์คํ ๊ณผ ๋คํธ์ํฌ์ ์์ ๋กญ๊ฒ ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ณง ๋ณด์ ์ธก๋ฉด์์ ๋ถํ์ํ ์ํ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด๋ ์ฐ๋ฆฌ๊ฐ iOS๋ macOS์ ๊ฐ์ ํ๋์ ์ธ OS์์ ๊ฒฝํํ๋ ์ธ๋ถํ๋ ๊ถํ ์ ์ด(fine-grained permission control)์ ๋ค๋ฅธ ๋ชจ์ต์ ๋๋ค. ์ต๊ทผ์ OS๋ ๋จ์ํ ์๋น ๋๊ธฐ ์ฑ์ ๋ง์ดํฌ ๊ถํ์ ๋ถ์ฌํ๊ฑฐ๋, ๋ฉ๋ชจ ์ฑ์ด ์์น ์ ๋ณด๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์ด๋ฅผ ํ์ฉํ ์ง ์ ํํ ์ ์์ต๋๋ค. ์ด์ฒ๋ผ ํน์ ๊ธฐ๋ฅ์ด ๋ถํ์ํ ๊ถํ์ ๊ฐ์ง์ง ์๋๋ก ์ ํํ๋ ๊ฒ์ ๋๋ค.
๋น๋ ์์คํ (The Build System)
Node.js์ ๋น๋ ์์คํ ์ ํ ์ญ์ ์์ฌ์์ผ๋ก ๋จ์์ต๋๋ค.
V8์ด ํฌ๋กฌ(Chrome)์ ํตํด GYP๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด์, Node.js๋ ์์ฐ์ค๋ฝ๊ฒ ์ด๋ฅผ ๋ฐ๋์ต๋๋ค. ๊ทธ๋ฌ๋ ์ดํ ํฌ๋กฌ์ GYP๋ฅผ ๋ฒ๋ฆฌ๊ณ GN์ผ๋ก ์ ํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ Node.js๋ง์ด GYP๋ฅผ ๊ณ์ ์ฌ์ฉํ๊ฒ ๋์์ฃ . ์ ์ง๋ณด์๊ฐ ํ๋ฐํ์ง ์์ ์์คํ ์ ๋ ์๊ฒ ๋ ์ ์ ๋๋ค.
๋ฌธ์ ๋ GYP๋ผ๋ ๊ฒ์ด ๋จ์ํ ๋ด๋ถ ๋๊ตฌ๊ฐ ์๋๋ ์ ์ ๋๋ค. V8๊ณผ ๋ฐ์ธ๋ฉ์ ์๋ํ๋ ๋ชจ๋ ๊ฐ๋ฐ์๋ ์ด๋ฅผ ์ง์ ๋ค๋ค์ผ ํ๋๋ฐ, GYP๋ JSON๊ณผ ์ ์ฌํด ๋ณด์ฌ๋ ์ฌ์ค์ ํ์ด์ฌ(Python) ๊ธฐ๋ฐ ๋ณํ ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ์ง๊ด์ ์ด์ง ์๊ณ , ์์ฑํ๊ธฐ๋ ์ด๋ ค์ฐ๋ฉฐ, ์ฌ์ฉ์ ๊ฒฝํ์ด ์ข๋ค๊ณ ํ ์๋ ์์ฃ .
์ด๋ ๋ง์น ํ๋์ ์ธ ๋น๋ ์์คํ ์ด ์๋, ์ด๋๊ฐ ์ด์ํ ๋ฐฉ์์ผ๋ก ๋ง๋ค์ด์ง DSL์ ๊ฐ์ ๋ก ์ฌ์ฉํด์ผ ํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ฒ์๋ถํฐ ๋ ๋์ ๋น๋ ์์คํ ์ ์ ํํ๊ฑฐ๋, ํฌ๋กฌ์ด GN์ผ๋ก ์ ํํ ๋ ํจ๊ป ์์ง์๋ค๋ฉด ์ด๋ ์๊น์?
package.json
Node.js ์ํ๊ณ์์ package.json
์ ํ์์ ์ธ ์ญํ ์ ํ์ง๋ง, ์๊ฐ์ด ์ง๋๋ฉด์ ๋ถํ์ํ ์ ๋ณด๋ค์ด ์ ์ ๋ ์ถ๊ฐ๋์์ต๋๋ค.
์๋ฅผ ๋ค์ด, license, repository, description ๊ฐ์ ํญ๋ชฉ๋ค์ ํจํค์ง ์คํ๊ณผ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์์ผ๋ฉฐ, ๊ฒฐ๊ตญ ๋ณด์ผ๋ฌํ๋ ์ดํธ ๋ ธ์ด์ฆ(boilerplate noise)๋ก ์์ฌ๋ง ๊ฐ์ต๋๋ค. ์ฒ์์๋ ํ์ ์ ๋ณด๋ง์ ๋ด์๋ ํ์ผ์ด ์ ์ ๋ฌด๊ฑฐ์์ง๊ณ , ๋ถํ์ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ ํด ๋ฒ๋ฆฐ ๊ฒ์ ๋๋ค.
๋ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ ์์กด์ฑ ๊ด๋ฆฌ ๋ฐฉ์์ ๋๋ค. ๋ชจ๋์ ์ค์ํ๋ ์ ์ฅ์์์ ๊ด๋ฆฌํ๋๋ก ์ค๊ณ๋ ์ ์ด ๋ฌธ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ ์ฅ์๊ฐ ๋ฏผ๊ฐ ๊ธฐ์ ์ ์ํด ์ด์๋๋ ์ฌ์ ์๋น์ค๋ผ๋ ์ ์์ ๊ทผ๋ณธ์ ์ธ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ์คํ ์์ค ์ํ๊ณ์ ํต์ฌ ์ฒ ํ์ ๋ถ์ฐ๊ณผ ์์จ์ฑ์ธ๋ฐ, ํจํค์ง ๊ด๋ฆฌ ์์คํ ์ ์คํ๋ ค ๋จ์ผ ์กฐ์ง์ ์ข ์๋ ํํ๋ก ์๋ฆฌ ์ก์์ฃ .
๋ง์ฝ ์๋ ๊ฒฝ๋ก์ URL์ ๊ธฐ๋ฐ์ผ๋ก ์ง์ ๋ชจ๋์ ๋ถ๋ฌ์ค๋ ๋ฐฉ์์ด ์ฑํ๋์๋ค๋ฉด, ํ์ผ ๊ฒฝ๋ก๊ฐ ๊ณง ๋ฒ์ ์ ์๋ฏธํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ค๋ฉด ๊ตณ์ด dependencies ๋ชฉ๋ก์ ์ ์งํ ํ์๋ ์์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ์ package.json
๊ตฌ์กฐ์์๋ ์์กด์ฑ ๋ชฉ๋ก์ ์ผ์ผ์ด ๋์ดํด์ผ ํ๋ฉฐ, ์ด๋ ์ง์์ ์ธ ์ ์ง๋ณด์ ๋ถ๋ด์ ์ด๋ํฉ๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ ํจํค์ง์ ๊ฐ์ฉ์ฑ, ์ง์ ๊ฐ๋ฅ์ฑ, ๊ทธ๋ฆฌ๊ณ ์ํ๊ณ์ ๋ ๋ฆฝ์ฑ์ ์ํํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๋ง์ฝ ์ด๊ธฐ ์ค๊ณ์์ ๋ถ์ฐํ ํจํค์ง ๊ด๋ฆฌ ๋ฐฉ์์ด ๊ณ ๋ ค๋์๋ค๋ฉด, ์ง๊ธ๊ณผ๋ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ ํ์์ง๋ ๋ชจ๋ฆ ๋๋ค.
node_modules

node_modules
์ ํ์ ์ด์์ผ๋ก ๊ฑฐ๋ํ ํฌ๊ธฐ๋ฅผ ํ์ํ ๊ทธ๋ฆผ<์ถ์ฒ: TekForge>
Node.js์ node_modules
๊ตฌ์กฐ ์ญ์ ์๋๋ ์ข์์ง๋ง, ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ง์ ๋ณต์ก์ฑ์ ์ด๋ํ์ต๋๋ค.
๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ๋ชจ๋ ํด์ ์๊ณ ๋ฆฌ์ฆ(module resolution algorithm)์ ์ง๋์น๊ฒ ๋ณต์กํ๊ฒ ๋ง๋ ๊ฒ์
๋๋ค. node_modules
๊ฒฝ๋ก๋ฅผ ๊ณ์ธต์ ์ผ๋ก ํ์ํ๋ ๋ฐฉ์์ ๋จ์ํ ๋ชจ๋ ๋ก๋ฉ์ ์ด๋ ต๊ฒ ๋ง๋ค์๊ณ , ํ๋ก์ ํธ๊ฐ ์ปค์ง์๋ก ๊ด๋ฆฌ๊ฐ ๊น๋ค๋ก์์ก์ฃ .
๋ชจ๋์ ํ๋ก์ ํธ ๋ด์ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจํ๋ vendored-by-default ๋ฐฉ์์ ์์กด์ฑ ๊ด๋ฆฌ์ ์์ ์ฑ์ ๋์ด๋ ค๋ ์๋๋ก ๋์์ง๋ง, ์ฌ์ค $NODE_PATH ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ผ ์ ์์์ต๋๋ค.
๋ํ, Node.js์ ๋ชจ๋ ๋ก๋ฉ ๋ฐฉ์์ ๋ธ๋ผ์ฐ์ ์ ํ๊ฒฝ๊ณผ๋ ํฌ๊ฒ ๋ฌ๋ผ์ก์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์์๋ URL์ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋์ ๋ก๋ํ๋ ๋ฐ๋ฉด, Node.js๋ node_modules
๋ก ๋ณต์กํ ๊ฒฝ๋ก ํ์์ ์ํํด์ผ ํฉ๋๋ค. ์ด๋ก ์ธํด ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ชจ๋ ๋ก๋ฉ ๋ฐฉ์์ด ์ผ๊ด๋์ง ์๊ฒ ๋์๊ณ , ์ด๋ ESM ๋์
์ดํ์๋ ์ฌ์ ํ ํผ๋์ ์ผ์ผํค๊ณ ์์ต๋๋ค.
์ด์ ์์ ์ด ๊ตฌ์กฐ๋ฅผ ๋๋๋ฆฌ๋ ๊ฒ์ ์ฌ์ค์ ๋ถ๊ฐ๋ฅํ์ง๋ง, ๋ง์ฝ ์ด๊ธฐ์ ๋ ๋จ์ํ ๋ฐฉ์์ด ๋์ ๋์๋ค๋ฉด ์ด๋ ์๊น์? ์ง๊ธ๋ณด๋ค ํจ์ฌ ๋ ๊น๋ํ ๋ชจ๋ ์์คํ ์ ๊ฐ์ง ์ ์์ง ์์์๊น์?
require(โmoduleโ)
์์ .js ํ์ฅ์ ์๋ต
Node.js์์ require(โmoduleโ)์ ์ฌ์ฉํ ๋, .js ํ์ฅ์๋ฅผ ์๋ตํ ์ ์๊ฒ ํ ๊ฒ ์ญ์ ๊ฒฐ๊ตญ ๋ถํ์ํ ๋ชจํธ์ฑ์ ์ด๋ํ ์ ํ์ด์์ต๋๋ค.
์ด๋ ๋ธ๋ผ์ฐ์ ์ JavaScript ๋์ ๋ฐฉ์๊ณผ๋ ๋ค๋ฆ
๋๋ค. ๋ธ๋ผ์ฐ์ ์์๋ <script>
ํ๊ทธ src
์์ฑ์ .js ํ์ฅ์๋ฅผ ์๋ตํ ์ ์์ต๋๋ค. ์ด์ฒ๋ผ ๋ช
์์ ์ธ ๊ฒฝ๋ก๋ฅผ ์๊ตฌํ๋ ๊ฒ์ด ๋ ์ง๊ด์ ์ด์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ Node.js๋ ํ์ฅ์๋ฅผ ์๋ตํ๋ ๋ฐฉ์์ ํ์ฉํ์๊ณ , ์ด๋ก ์ธํด ๋ชจ๋ ๋ก๋๊ฐ ํ์ผ ์์คํ
์ ์ฌ๋ฌ ๊ฒฝ๋ก์์ ์กฐํํ๋ฉฐ ์ฌ์ฉ์๊ฐ ์๋ํ ํ์ผ์ ์ถ์ธกํด์ผํ๋ ๋นํจ์จ์ ์ธ ๊ณผ์ ์ด ์๊ฒจ๋ฌ์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก, ๋จ์ํ .js ํ์ฅ์๋ฅผ ๋ช ์ํ์ง ์๋ ๊ฒ๋ง์ผ๋ก ๋ถํ์ํ ํ์ผ ์์คํ ์ ๊ทผ์ด ์ฆ๊ฐํ๊ณ , ์์์น ๋ชปํ ๋ชจ๋ ํด์ ๋ฐฉ์์ด ๋ฐ์ํ ๊ฐ๋ฅ์์ด ์๊ธด ๊ฒ์ด์ฃ . ์ด๊ธฐ์ ๋ ๋ช ํํ ๊ท์น์ ๋์ ํ๋๋ผ๋ฉด, ์ด๋ฌํ ๋ฌธ์ ์ญ์ ํผํ ์ ์์์ ๊ฒ์ ๋๋ค.
index.js
Node.js๋ ํน์ ๊ฒฝ๋ก๋ฅผ ๋ถ๋ฌ์ฌ ๋ index.js
๋ฅผ ๊ธฐ๋ณธ ์ง์
์ (entry file)์ผ๋ก ๊ฐ์ฃผํ๋ ๊ท์น์ ๋์
ํ์ง๋ง, ์ด๋ ๊ฒฐ๊ตญ ๋ชจ๋ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ๋ ๋ณต์กํ๊ฒ ๋ง๋ค์์ต๋๋ค. ๊ฒฝ๋ก ๋ด์์ index.js
๋ฅผ ์๋์ผ๋ก ์ฐพ๋๋ก ํ๋ฉด์, ๋ชจ๋ ๋ก๋๊ฐ ์ถ๊ฐ์ ์ธ ํ์ผ ์์คํ
ํ์์ ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๋๊ตฐ๋ค๋ require๊ฐ package.json
์ main ์์ฑ์ ์ง์ํ ์ดํ๋ก๋ index.js
๊ฐ ํ์ ๊ธฐ๋ฅ์ด ์๋๊ฒ ๋์์ต๋๋ค. ์ ์ด์ package.json
์ด ์กด์ฌํ๋ ํ๊ฒฝ์์๋ ๋ถํ์ํ ๊ท์น์ด ๋์ด๋ฒ๋ฆฐ ๊ฒ์ด์ฃ .
๊ฒฐ๊ตญ index.js
๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ํ ๊ฒ์ ํฐ ์ด์ ์์ด, ๋ชจ๋ ๋ก๋ฉ ๊ณผ์ ๋ง ๋ณต์กํ๊ฒ ๋ง๋ ์ ํ์ด์์ต๋๋ค.
Deno์ ํ์
์ด๋ฌํ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ํ์ํ ๊ฒ์ด ๋ฐ๋ก Deno์ ๋๋ค. ๋ผ์ด์ธ ๋ฌ์ด ์ง์ ์ง์ ํ Node.js์ ๋ฌธ์ ๋ค์ ๊ตฌ์กฐ์ ์ ์ฝ์ผ๋ก ์์ฉํ๊ณ ์์ต๋๋ค. ๊ทธ์ค ๋ง์ ๋ถ๋ถ์ด ์ด์ ๋ ๋์ดํค๊ธฐ ์ด๋ ค์ด ์ ํ๋ค์ด์์ฃ .
Deno๋ Node.js๊ฐ ๊ฐ๊ณ ์๋ ํ์์ ์ธ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๋ ค๊ณ ํฉ๋๋ค. ์ฆ, ๋ ํ๋์ ์ด๊ณ ์์ ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ ํ์ ์คํฌ๋ฆฝํธ ๋ฐํ์ ํ๊ฒฝ์ ์ ๊ณตํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ ํ๋ก์ ํธ๋ผ๋ ๋ป์ ๋๋ค.
Deno 1.0; (๋น์๋ก์ ) ํ์ ์ ์ธ ํด๊ฒฐ์ฑ
Deno๋ ์ด๊ธฐ Node.js์ ๋ฌธ์ ์ ์ ๊ทผ๋ณธ์ ์ผ๋ก ์ฌํด์ํ๋ฉฐ, ์ฌ๋ฌ ์ธก๋ฉด์์ ๊ฐ์ ๋ ํด๊ฒฐ์ฑ ์ ์ ์ํฉ๋๋ค.
Promise ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ง์
๊ฐ์ฅ ๋จผ์ Promise ๊ธฐ๋ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ง์์ ์๊ผฝ์ ์ ์์ต๋๋ค. Deno์ ๋ชจ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ์ฒ์๋ถํฐ Promise์ ๊ธฐ๋ฐํ๊ธฐ ๋๋ฌธ์ EventEmitter
์ ์ฝ๋ฐฑ ํจํด์ ์์กดํ๋ Node.js์๋ ํฌ๊ฒ ์ฐจ์ด๋ฅผ ๋ณด์
๋๋ค.
์๋ฅผ ๋ค์ด, Node.js์์๋ ํ์ผ์ ์ฝ๊ธฐ ์ํด ์ ํต์ ์ธ fs ๋ชจ๋๊ณผ Promise ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ fs/promises ๋ชจ๋์ด ํผ์ฌ๋์ด ๊ฐ๋ฐ์๊ฐ ํผ๋์ ๊ฒช์ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, Deno๋ ์ฒ์๋ถํฐ Promise ๊ธฐ๋ฐ API๋ฅผ ์ ๊ณตํด ์ฝ๋์ ์ผ๊ด์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ํฌ๊ฒ ํฅ์์์ผฐ์ต๋๋ค.
const data = await Deno.readTextFile('example.txt')
console.log(data)
๋ณด์: ๋ฐํ์ ์ค๊ณ์ ์์น
๋ํ, Deno๋ Secure-by-Default ์ฒ ํ์ ์ฑํํ๋ฉฐ, ๋ณด์์ ๋ฐํ์ ์ค๊ณ์ ํต์ฌ ์์น์ผ๋ก ์ผ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Deno ํ๋ก๊ทธ๋จ์ ํ์ผ ์์คํ , ๋คํธ์ํฌ, ๊ทธ๋ฆฌ๊ณ ๊ธฐํ ๋ฏผ๊ฐํ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ ์ํ๋ก ์์ํฉ๋๋ค. ์ด๋ฌํ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ค๋ฉด ๋ช ์์ ์ผ๋ก ๊ถํ ํ๋๊ทธ๋ฅผ ๊ฑฐ์ณ ํ์ฉํด์ผ ํ์ฃ .
์ด ๊ฐ์ ์ ๊ทผ ๋ฐฉ์์ ์ ํ๋ฆฌ์ผ์ด์
๋ฟ๋ง ์๋๋ผ ์์กด์ฑ์๋ ๋์ผํ๊ฒ ์ ์ฉ๋์ด, ํ๋ก๊ทธ๋จ ์คํ ์ ์ด๋ค ๋ฆฌ์์ค์ ์ ๊ทผํ๋์ง ์์ฐ์ค๋ฝ๊ฒ ํ์ธํ๋๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, --allow-read
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ฉด, ํด๋น ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ผ ์์คํ
์ ์ฝ์ ์ ์์ต๋๋ค.
Rust ํฌ๋ ์ดํธ๋ก ๊ตฌํํ ๋ชจ๋ํ
Deno์ ๋ ๋ค๋ฅธ ํ์ ์ ๋ด๋ถ ๊ตฌ์ฑ ์์ ๋ชจ๋ํ๋ฅผ Rust ํฌ๋ ์ดํธ๋ก ๊ตฌํํ ์ ์ ๋๋ค. ์์ ์ธ๊ธํ GYP ๋์ , Deno๋ Rust์ ๋น๋ ์ํ๊ณ๋ฅผ ํ์ฉํ์ฌ ๋ณด๋ค ํ๋์ ์ด๊ณ ์ ์ฐํ ๋ชจ๋ํ๋ฅผ ์คํํ์ต๋๋ค. ํนํ, rusty_v8 ํฌ๋ ์ดํธ๋ V8 ์์ง๊ณผ์ ํตํฉ์ ๋ด๋นํ๋ ์ค์ํ ๊ตฌ์ฑ ์์๋ก, V8์ C++ API์ ์ต๋ํ ์ ์ฌํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ฉด์๋ Rust์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ๊ทธ๋๋ก ์ ์งํ ์ ์๊ฒ ์ค๊ณ๋์์ต๋๋ค.
๊ทธ ์ธ ์์กด์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด Deno๋ ์น ๋ธ๋ผ์ฐ์ ์ฒ๋ผ URL์ ํตํด ์ธ๋ถ ์ฝ๋๋ฅผ ์ง์ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ์ ๋ด์ฅํ๊ณ ์์ต๋๋ค. ๊ทธ ๋๋ถ์ ํ๋์ ํ์ผ๋ง์ผ๋ก๋ ๋ณต์กํ ๋์์ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ํ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ง์ํ๊ธฐ ๋๋ฌธ์, Node.js ์์๋ ์ถ๊ฐ์ ์ผ๋ก ์ค์นํ๊ฑฐ๋ ์ค์ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ต๋๋ค. ์ต์ ํ์ ์คํฌ๋ฆฝํธ์ ์ ์ ํ์ ๊ฒ์ฌ ๊ธฐ๋ฅ์ ๋ฐ๋ก ํ์ฉํ ์ ์์ฃ .
Deno 2.0
Deno 2.0์ ์ด๋ฌํ ์ฒ ํ์ ์ ์งํ๋ฉด์๋ ํ ๊ฑธ์ ๋ ๋์๊ฐ ๋ชจ์ต์ ๋ณด์ฌ์ค๋๋ค.
๋ํ์ ์ธ ์
๋ฐ์ดํธ๋ก๋ Node.js ๋ฐ npm๊ณผ์ ํธํ์ฑ ๊ฐํ, package.json
๋ฐ node_modules
์ ๋ํ ๋ค์ดํฐ๋ธ ์ง์, ์๋ก์ด ํจํค์ง ๊ด๋ฆฌ ๋ช
๋ น์ด ๋์
, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ํ, ํ๋ผ์ด๋น npm ๋ ์ง์คํธ๋ฆฌ์ ๋ํ ์ง์, ์ํฌ์คํ์ด์ค ๋ฐ ๋ชจ๋
ธ๋ ํฌ ์ง์, LTS ๋ฆด๋ฆฌ์ฆ ์ ๊ณต, ๊ทธ๋ฆฌ๊ณ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ธฐ ์ํ ํ๋์ ์ธ ๋ ์ง์คํธ๋ฆฌ์ธ JSR ๋์
๋ฑ์ด ์์ต๋๋ค.
์ธ๋ถ ์ฌํญ์ ํ๋์ฉ ์์ธํ ํ์ธํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.

<์ถ์ฒ: deno.com>
Node.js ๋ฐ npm ํธํ์ฑ ๊ฐํ
๊ธฐ์กด Deno๋ Node.js ๋ฐ npm๊ณผ์ ํธํ์ฑ์ด ์ ํ์ ์ด์ด์, ํ๋ถํ Node.js ์ํ๊ณ๋ฅผ ํ์ฉํ๋ ๋ฐ ์ด๋ ค์์ด ์์์ต๋๋ค.
Deno 2.0์์๋ ์ด๋ฌํ ํธํ์ฑ์ ๋ํญ ๊ฐ์ ํ์ต๋๋ค. package.json
๊ณผ node_modules
๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฉฐ, npm ์ํฌ์คํ์ด์ค๊น์ง ํ์ฉํ ์ ์๊ฒ ๋ ๊ฒ์ด์ฃ .
๋ค๋ง ์ด๋ฌํ ๋ณํ๋ก ์ผ๋ถ ๊ฐ๋ฐ์๋ค์ Deno์ ์ด๊ธฐ ์ค๊ณ ์ฒ ํ์ด ํฌ์๋ ๊ฒ์ ์ฐ๋ คํ๊ณ ์๊ธฐ๋ ํฉ๋๋ค. Node.js์ ํธํ์ ์ํด ๋์ ๋ ๊ธฐ๋ฅ์ด Deno์ ๊ฐ๊ฒฐํจ๊ณผ ๋ณด์์ฑ์ ์ ํดํ ์ ์๋ค๋ ๊ฑฑ์ ์ด ๋์จ ๊ฑฐ์ฃ . ์ด์ ๋ํ ์์ธํ๊ณ ๊ธด ๋ต๋ณ์ Deno ๋ธ๋ก๊ทธ์์ ํ์ธํ ์ ์์ต๋๋ค.
์์กด์ฑ ๊ด๋ฆฌ ๊ฐ์
๊ธฐ์กด Deno์๋ ๊ณต์์ ์ธ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ๊ฐ ์์๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ์๋ค์ ์ธ๋ถ ๋ชจ๋์ ์ง์ URL๋ก ๊ฐ์ ธ์ ์์กด์ฑ์ ๊ด๋ฆฌํ์ต๋๋ค. ์ด๋ฌํ ์ ๊ทผ๋ฒ์ ๋ชจ๋์ ๋ฒ์ ๊ด๋ฆฌ์ ์์กด์ฑ ํด๊ฒฐ์ ์ด๋ ค์์ ๋ถ๋ฅด๊ณค ํ์ต๋๋ค.
์ด๋ฅผํ ๋ฉด, ๊ฐ ํ์ผ์์ ๋ชจ๋์ ๊ฐ์ ธ์ฌ ๋๋ง๋ค ์ ํํ ๋ฒ์ ์ ๋ช ์ํด์ผ ํ๊ณ , ํ๋ก์ ํธ ์ ๋ฐ์ ๋์ผํ ๋ชจ๋์ ๋ฒ์ ์ ์ผ๊ด๋๊ฒ ์ ์งํ๊ธฐ๋ ๊น๋ค๋ก์ ์ต๋๋ค. ๋ํ ๋ชจ๋ ์ ๋ฐ์ดํธ ์ ๊ฐ ํ์ผ์ ์๋์ ์ผ๋ก ์์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์, ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ์ด๋ฌํ ์์ ์ด ๋นํจ์จ๊ณผ ์ค๋ฅ๋ฅผ ์ ๋ฐํ ๊ฐ๋ฅ์ฑ์ด ๋์์ต๋๋ค.
Deno 2.0์ ์๋ก์ด ๋ช ๋ น์ด๋ก ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ๊ฐ์ํํฉ๋๋ค.
- deno install: ํ๋ก์ ํธ์
deno.json
๋๋package.json
ํ์ผ์ ์ ์๋ ์์กด์ฑ์ ์ค์นํฉ๋๋ค. - deno add, deno remove:
deno.json
๋๋package.json
ํ์ผ์ ์์กด์ฑ์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ํฌ์คํ์ด์ค ์ง์
์์ฆ ๊ฐ๋ฐ ํ๋ก์ ํธ์์๋ ์ํฌ์คํ์ด์ค์ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ํ์ฉํ์ฌ ์ฌ๋ฌ ํจํค์ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋จ์ผ ์ ์ฅ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
Deno 2.0๋ ์ด๋ฌํ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด ์ํฌ์คํ์ด์ค์ ๋ชจ๋ ธ๋ ํฌ ์ง์์ ๋์ ํ์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ์ฝ๋ ๋ฒ ์ด์ค ๊ด๋ฆฌ๋ฅผ ์ฝ๊ฒ ๋ง๋ค์ด ํ์ ์ ๋์ต๋๋ค.
๊ฐ๋ฐ์ ๊ฒฝํ ํฅ์
Deno 2.0์ ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฅ์์ํค๊ธฐ ์ํด ๋ค์ํ ๋๊ตฌ์ ๊ธฐ๋ฅ์ ํตํฉํ์ต๋๋ค. ๋ํ์ ์ผ๋ก ๊ธฐ์กด์ ์๋ํํฐ๋ก ์ฌ์ฉํ๋ Prettier๋ฅผ ๋์ ํ๋ ๋ด์ฅ ์ฝ๋ ํฌ๋งทํฐ, ESLint๋ฅผ ๋์ ํ๋ ๋ฆฐํฐ, ํ ์คํธ ํ๋ ์์ํฌ, ๋ฌธ์ ์์ฑ๊ธฐ ๋ฑ์ด ์์ต๋๋ค. ๋ณ๋์ ์ค์ ์ด๋ ์ถ๊ฐ ํจํค์ง ์์ด๋ ์ด๋ค ๋๊ตฌ๋ฅผ ์ฆ์ ํ์ฉํ ์ ์๊ธฐ์, ๊ฐ๋ฐ์๋ค์ด ์ฝ๋ ์์ฑ์ ์ง์คํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
๋ํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ ํ๋ก ๊ฐ๋ฐ์๋ค์๊ฒ ์ ๋ขฐํ ์ ์๋ ๋ชจ๋์ ์ ๊ณตํฉ๋๋ค. ์์ ์๊ฐํ ์ฝ๋ ํฌ๋งทํ ์ด๋ ํ ์คํ ๋ชจ๋ ์ธ์๋ CLI ์ ํธ๋ฆฌํฐ, ๋คํธ์ํฌ ๋๊ตฌ, ๋ฐ์ดํฐ ์กฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์ปฌ๋ ์ ์ ํธ๋ฆฌํฐ ๋ฑ์ด ์์ต๋๋ค.
๋ง์น๋ฉฐ
Deno 2.0์ด ๋์จ ์ง๋ ๋ฒ์จ 3๋ฌ์ด ํ์ฉ ์ง๋ฌ์ต๋๋ค. Deno๊ฐ ์ถ์๋ ์ด๋ ๊ฐ์ฅ ํฐ ๋ณํ๋ฅผ ๊ฒช๊ณ ๋ ํ๋ผ JavaScript ์ปค๋ฎค๋ํฐ์ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ๋ง์ ๋ ผ์๊ฐ ์ด์ด์ง๊ณ ์์ต๋๋ค. ํนํ Node.js์์ ํธํ์ฑ์ ๊ฐํํ๋ฉด์๋, ์ด๊ธฐ Deno๊ฐ ์ถ๊ตฌํ๋ ๋ณด์์ฑ๊ณผ ๊ฐ๊ฒฐํจ์ ์ ์งํ๋ ค๋ ๋ ธ๋ ฅ์ด ํฐ ๊ด์ฌ์ ๋ฐ๋ ๋ฏํฉ๋๋ค.
์ธ์ดํ์ ์ ๊ณตํ ์ ๊ฒ๋ ํฅ๋ฏธ๋กญ๊ฒ๋, Deno๋ผ๋ ์ด๋ฆ์ Node์ ์ฒ ์๋ฅผ ์ฌ๋ฐฐ์ดํ ์ด๊ตฌ์ ์ฒ (่ชๅฅ่ฝ็ถด, Anagram)์ ๋๋ค. ์ด๋ Node.js์ ์์ด๋์ด์ ์ฒ ํ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์๋ ์๋ก์ด ๋ฐฉํฅ์ฑ์ ์ ์ํ๋ ค๋ Deno์ ์๋๋ฅผ ๋ํ๋ ๋๋ค. ์ด์ Deno๋ ๋จ์ํ Node.js์ ๋์ฒด์ ๊ฐ ์๋๋ผ, Node.js๊ฐ ํด๊ฒฐํ์ง ๋ชปํ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ, ํ๋์ ์ธ ์น ๊ฐ๋ฐ ํ๊ฒฝ ๋ง์ถคํ ๋ฐํ์์ ๋ชฉํ๋ก ํ๊ณ ์์ต๋๋ค.
์ด๋ฒ Deno 2.0์ ๋ ๋์ ํธํ์ฑ๊ณผ ํธ์์ฑ์ ์ ๊ณตํ๋ฉด์๋, ๊ฐ์ ๋ ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฐ ๋งํผ ์์ผ๋ก Deno๊ฐ ์ ์ฐจ ๋ง์ ํ๋ก์ ํธ์์ ์ฑํ๋ ๊ฐ๋ฅ์ฑ๋ ์ฌ๋ผ๊ฐ์ต๋๋ค. (์์ฆIT์ ํ๋ก ํธ์๋๋ Deno๋ก ๊ฐ๋ฐํด ๋ณด๋ฉด ์ฌ๋ฐ๊ฒ ๋ค์.) ์์ผ๋ก Deno๊ฐ ์น ๊ฐ๋ฐ ์ํ๊ณ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น ์ง ๊ธฐ๋๊ฐ ๋ฉ๋๋ค.
ยฉ๏ธ์์ฆIT์ ๋ชจ๋ ์ฝํ ์ธ ๋ ์ ์๊ถ๋ฒ์ ๋ณดํธ๋ฅผ ๋ฐ๋ ๋ฐ, ๋ฌด๋จ ์ ์ฌ์ ๋ณต์ฌ, ๋ฐฐํฌ ๋ฑ์ ๊ธํฉ๋๋ค.