์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
๋๋
ธ Deno | |
์ข
๋ฅ | |
๋ผ์ด์ ์ค | |
๊ฐ๋ฐ | Ryan dahl |
๋ฒ์ | 1 |
Node.js์ ์ฐฝ๋ฆฝ์์ธ ๋ผ์ด์ธ ๋ฌ์ด ๋ง๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ ํ์ ์คํฌ๋ฆฝํธ ๋ฐํ์์ด๋ค. JS Fest 2019 Spring ์ปจํผ๋ฐ์ค์์ ๊ณต์ ๋ฐํํ์ผ๋ฉฐ, 2020๋ 5์ 13์ผ ๋ฒ์ 1.0์ด ์ถ์๋์๋ค.#
1. ์ด๋ฆ[ํธ์ง]
Node.js์ node์ ์ ๋๊ทธ๋จ์ด๋ค. ์์ ๋จ์๋ก ์๋ค๋ฅผ ๋ฐ๊พผ ๊ฒ. ์ฒ์์ผ๋ก ๊ณต์ ์๊ฐ๋์๋ JS Fest 2019 Spring ์์ [๋ฐ๋
ธ]๋ผ๊ณ ๋ฐ์ํ์์ผ๋, ์ดํ ๋ง์ ์ฌ๋๋ค์ด [๋๋
ธ]๋ผ๊ณ ์ฝ๊ธฐ๋ฅผ ๋ ์ ํธํ๋ฉฐ, ๋ก๊ณ ์ ๊ณต๋ฃก์ผ๋ก ๋ณด์ด๋ ๋๋ฌผ์ด ์๋ ์ ๋ฑ์ ๊ณ ๋ คํด์ ๋๋
ธ๋ก ๋ฐ์ํ๊ธฐ๋ก ์ ์ ์ ์ผ๋ก ํฉ์๋๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
2. Node.js์์ ์ฐจ์ด์ [ํธ์ง]
Node.js์ ๋น๊ต๋๋ Deno์ ์ฃผ์ ํน์ง์ JSConf EU ์์์์ ํ์ธํ ์ ์๋ค. ๋ฒ์ญ๋ ๋ด์ฉ
2.1. Promise[ํธ์ง]
Node.js์ ๋ด์ฅ๋ ์ฌ๋ฌ ๋น๋๊ธฐ ๋ก์ง์, ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ง์ํ๋ ๋น๋๊ธฐ API์ธ Promise๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์๋ ๋ฐฉ์์ธ ์ฝ๋ฐฑ ํจํด์ผ๋ก ์๋ํ๋ค. ์ด๋ก ์ธํด Node.js๋ก ์์ฑ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ์ฝ๋๋ ์ฝ๋ฐฑ ์ง์ฅ์ด ๋๊ฑฐ๋, ์๋๋ฉด ๊ฐ๋ฐ์๊ฐ ์ฃผ์ ๋น๋๊ธฐ ๋ก์ง๋ค์ ์ ์ ํ ๊ฐ์ธ์ ์ฌ์ฉํด์ผ ํ๋ค.
๋ฐ๋ฉด Deno๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋ ๋น๋๊ธฐ ๋ก์ง๋ค์ด ๋ชจ๋ Promise๋ก ๋ง๋ค์ด์ก๋ค.
๋ฐ๋ฉด Deno๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋ ๋น๋๊ธฐ ๋ก์ง๋ค์ด ๋ชจ๋ Promise๋ก ๋ง๋ค์ด์ก๋ค.
2.2. ๋ณด์ ๋ฌธ์ [ํธ์ง]
Node.js์์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ผ๋ก ์ฌ์ฉ๋๋ V8์ ํฌ๋กฌ์์ ์ฌ์ฉ๋๋ ๊ทธ๊ฒ๊ณผ ๋์ผํ๋ฉฐ, ๊ทธ ์์ฒด๋ก ํ๋ฅญํ ์๋๋ฐ์ค ๋ชจ๋ธ์ ๊ฐ์ง๊ณ ์๋ค. ํ์ง๋ง Node.js๋ ์ด๊ฑธ ์ ๋๋ก ์ฌ์ฉํ์ง ์๊ณ ์๊ณ , ํ์ผ ์
์ถ๋ ฅ์ด๋ ๋คํธ์ํฌ ๊ฐ์ด ์ ํ๋ฆฌ์ผ์ด์
์ธ๋ถ์ ์ก์ธ์คํ๋ ๋ฐ ๋ณ๋ค๋ฅธ ์ ํ์ ๋์ง ์๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด ๊ทธ๋ญ์ ๋ญ ํฐ ๋ฌธ์ ๋ ์๋ ์๋ ์๊ฒ ์ง๋ง, ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ๋ชจ๋ฅด๊ฒ ๋จธ์ ์ ํ์ผ ์์คํ
์ ์ ๊ทผํ๊ฑฐ๋ ๋คํธ์ํฌ ์์์ ์ฌ์ฉํ ์ฐ๋ ค๊ฐ ์๋ค. (๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ๊ทธ๋ฐ ์ฌ๋ก๊ฐ ๋ฐ์ํ๊ธฐ๋ ํ๋ค)
Deno๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณ๋ก ํน์ ๋๋ ํ ๋ฆฌ์ ๋ํ ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ถํ, ๋คํธ์ํฌ ์ ๊ทผ ๊ถํ ๋ฑ์ ์ค์ ํ ์ ์๋๋ก ๋ง๋ค์ด์ก๋ค.
Deno๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณ๋ก ํน์ ๋๋ ํ ๋ฆฌ์ ๋ํ ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ถํ, ๋คํธ์ํฌ ์ ๊ทผ ๊ถํ ๋ฑ์ ์ค์ ํ ์ ์๋๋ก ๋ง๋ค์ด์ก๋ค.
2.3. ๋น๋ ์์คํ [ํธ์ง]
์ฒ์ Node.js๋ฅผ ๋ง๋ค ๋๋, ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๊ฐ GYP๋ผ๋ ๋ฉํ ๋น๋ ์์คํ
์ ์ฌ์ฉํ๋ค๊ฐ GN์ผ๋ก ์
๊ทธ๋ ์ด๋ํ์๋๋ฐ, Node.js๋ ๊ทธ ์ฌ์ด์ ๋ฐ์ ํ Node.js ์ํ๊ณ์ ๋ํ ํธํ์ฑ ๋ฑ์ ์ด์ ๋๋ฌธ์ GN์ผ๋ก ๋ณ๊ฒฝํ์ง ๋ชปํ๋ค. ์ฐธ๊ณ ๋ก ๊ตฌ๊ธ์ GN์ ์๊ฐํ๋ ์์คํ
์์๋ 20๋ฐฐ ์ ๋ ๋น ๋ฅด๊ฒ ๋น๋๊ฐ ๋๋ค๊ณ ํ๋ค. (๋ฉํ ๋น๋ ์์คํ
์ ์ฌ๋ฌ ํ๋ซํผโ์๋์ฐ, Mac, Linuxโ์์ ์์ค ์ฝ๋๋ฅผ ๋น๋ํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ ๋น๋ ์์คํ
์ด๋ค.)
2.4. ๋ชจ๋ ์์คํ [ํธ์ง]
Node.js๋ ๋ชจ๋ ์์คํ
์ ๊ฐ์ง๊ณ ์๋ค. ์ต๊ทผ์๋ ์ด ๋ชจ๋ ์์คํ
์ ๊ด๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ ์๋ ํํฐ ํ๋ก์ ํธ๋ก ๋ผ์ด ๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ๋ฐ, ๋
ธ๋๋ npm์ด๋ผ๋ ํจํค์ง ๋งค๋์ ๊ฐ ๊ด๋ฆฌํ๋ package.json ํ์ผ์ main ํจ์์์ ์ฐพ๋๋ก ํจ์ผ๋ก์จ ์ํ๊ณ๊ฐ npm์ ์์กดํ๋๋ก ๋ฐ์ ํ๋ค. package.json๊ณผ node_modules์ ๊ธฐ๋๋ ๋ชจ๋ ์์คํ
์ ํ์ ์ด์์ผ๋ก ๋ณต์กํ๊ณ ์ด๋ ต๊ณ ๋ฌด๊ฑฐ์์ก๋ค.
Deno๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฆฌํฌ์งํ ๋ฆฌ url์ ์ํฌํธํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค.
Deno๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฆฌํฌ์งํ ๋ฆฌ url์ ์ํฌํธํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค.
2.5. ๋ชจ๋ ๋ก๋ฉ ์์คํ [ํธ์ง]
๋ชจ๋์ ๊ฐ์ ธ์ค๋ ์ฝ๋์์ .js ํ์ฅ์๊ฐ ์๋ต ๊ฐ๋ฅํด์ง๊ณ , ํน์ ํด๋์ index.js ํ์ผ์ ํด๋๊น์ง๋ง ๊ฒฝ๋ก๋ช
์ ์ฐ๋ฉด ์๋ต์ด ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ด ์๋๋ฐ, ์ด๋ .ts์ ๊ฐ์ .js๊ฐ ์๋ ํ์ฅ์๋ฅผ ์ฐ๋ ๊ฒ๊ณผ ๊ฐ์ ์ํฉ์์ ๋ชจ๋ ๋ก๋๊ฐ ์ฌ์ฉ์์ ์๋๋ฅผ ํ์
ํ๊ธฐ ์ํด ๊ฒฝ๋ก ๋ด ํ์ผ์ ์ค์บํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ง์ ์ฐ์ฐ์ ํ์๋ก ํ๋ค.
Deno์์๋ ์ด๋ฌํ ์์ํ ๊ฒฝ๋ก ์๋ต ๊ธฐ๋ฅ์ด ์ฌ๋ผ์ ธ ๋ชจ๋์ ๊ฒฝ๋ก๋ช ๊ณผ ์ค์ ํด๋น ๋ชจ๋์ ์์น์ ์๊ด๊ด๊ณ๊ฐ ๋ ๋ช ํํด์ก๋ค.
Deno์์๋ ์ด๋ฌํ ์์ํ ๊ฒฝ๋ก ์๋ต ๊ธฐ๋ฅ์ด ์ฌ๋ผ์ ธ ๋ชจ๋์ ๊ฒฝ๋ก๋ช ๊ณผ ์ค์ ํด๋น ๋ชจ๋์ ์์น์ ์๊ด๊ด๊ณ๊ฐ ๋ ๋ช ํํด์ก๋ค.
2.6. ์ฌ์ฉ๋๋ ์ธ์ด[ํธ์ง]
Node.js๋ C++๋ก ์์ฑ๋์ด ์์ผ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ๋ง์ ์คํํ ์ ์๋ค. ํ์
์คํฌ๋ฆฝํธ์ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐฉ์ธ์ ์ง์ ์คํํ์ง ๋ชปํ๊ณ Babel๊ณผ ๊ฐ์ ํธ๋์คํ์ผ๋ฌ์ ์ํด ๋ฒ์ญ๋ ๋ค ์คํ๋๋ค. ์ธํฐํ๋ฆฌํฐ ์ธ์ด์์๋ ๋ถ๊ตฌํ๊ณ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ๋ ์ฌ์ค์ ์ปดํ์ผ ์ธ์ด์ฒ๋ผ ์๋ํ๊ฒ ๋๋ ๊ฒ์ด๋ค. ๋ฐ๋ฉด Deno๋ Rust๋ก ์์ฑ๋์์ผ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ ํ์
์คํฌ๋ฆฝํธ๋ ๋ค์ดํฐ๋ธํ๊ฒ ์คํํ๋ค ๋ค์ดํฐ๋ธ์ฒ๋ผ ์คํ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ฒ์ ๋ชฉํ๋ก ์ผ๊ณ ์๋ค. ๋ด๋ถ์ ์ผ๋ก๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํธ๋์คํ์ผ๋ง๋์ด ๋์ด V8์์ง์ผ๋ก ๋์๊ฐ๋ ๊ฒ์ ๋
ธ๋์ ๊ฐ์ง๋ง, ๊ฐ์ข
์ต์ ํ๋ฅผ ๊ฑฐ์ณ์ ํผํฌ๋จผ์ค๋ ํจ์ฌ ์ข๊ณ ๋ณ๋๋ก ํ์
์คํฌ๋ฆฝํธ ์ปดํ์ผ ์ธํ
์ ํ ํ์๋ ์๋ค. ๋ํ ์ฌ๊ธฐ์ ๊ณต์ ํ์
์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ์ธ tsc ๋์ Rust๋ก ์์ฑ๋ ์ปดํ์ผ๋ฌ์ธ swc๋ฅผ ์ด์ฉํ์ฌ ํผํฌ๋จผ์ค๋ฅผ ๋์ฑ ๋์ด์ฌ๋ฆฌ๋ ค๋ ์๋๋ฅผ ํ๊ณ ์๋ ์ค์ด๋ค. # ๋ณธ๋ ํ์
์คํฌ๋ฆฝํธ๋ง ์ง์๋๋๋ก ํ ์์ ์ด์์ผ๋, ์์คํ
๋ฐ์ธ๋ฉ ๊ณผ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ฐ๋์ ํ์ํ ๋ถ๋ถ์ด ์์ด์ ์์ ํ ์๋ฐ์คํฌ๋ฆฝํธ ํํธ๋ฅผ ์์ ์ง๋ ๋ชปํ๋ค.
[1] ์คํ ํ๊ฒฝ