์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
๋””๋…ธ
Deno
์ข…๋ฅ˜
JavaScript ๋ฐ TypeScript ๋Ÿฐํƒ€์ž„[1]
๋ผ์ด์„ ์Šค
๊ฐœ๋ฐœ
Ryan dahl
๋ฒ„์ „
1

1. ์ด๋ฆ„2. Node.js์™€์˜ ์ฐจ์ด์ 
2.1. Promise2.2. ๋ณด์•ˆ ๋ฌธ์ œ2.3. ๋นŒ๋“œ ์‹œ์Šคํ…œ2.4. ๋ชจ๋“ˆ ์‹œ์Šคํ…œ2.5. ๋ชจ๋“ˆ ๋กœ๋”ฉ ์‹œ์Šคํ…œ2.6. ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด


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๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

2.2. ๋ณด์•ˆ ๋ฌธ์ œ[ํŽธ์ง‘]

Node.js์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” V8์€ ํฌ๋กฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ทธ๊ฒƒ๊ณผ ๋™์ผํ•˜๋ฉฐ, ๊ทธ ์ž์ฒด๋กœ ํ›Œ๋ฅญํ•œ ์ƒŒ๋“œ๋ฐ•์Šค ๋ชจ๋ธ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ Node.js๋Š” ์ด๊ฑธ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์žˆ๊ณ , ํŒŒ์ผ ์ž…์ถœ๋ ฅ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ๊ฐ™์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์™ธ๋ถ€์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ๋ณ„๋‹ค๋ฅธ ์ œํ•œ์„ ๋‘์ง€ ์•Š๋Š”๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ๊ทธ๋Ÿญ์ €๋Ÿญ ํฐ ๋ฌธ์ œ๋Š” ์•„๋‹ ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž ๋ชจ๋ฅด๊ฒŒ ๋จธ์‹ ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ์ž์›์„ ์‚ฌ์šฉํ•  ์šฐ๋ ค๊ฐ€ ์žˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ๊ทธ๋Ÿฐ ์‚ฌ๋ก€๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค)
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์„ ์ž„ํฌํŠธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

2.5. ๋ชจ๋“ˆ ๋กœ๋”ฉ ์‹œ์Šคํ…œ[ํŽธ์ง‘]

๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ์ฝ”๋“œ์—์„œ .js ํ™•์žฅ์ž๊ฐ€ ์ƒ๋žต ๊ฐ€๋Šฅํ•ด์ง€๊ณ , ํŠน์ • ํด๋”์˜ index.js ํŒŒ์ผ์€ ํด๋”๊นŒ์ง€๋งŒ ๊ฒฝ๋กœ๋ช…์„ ์“ฐ๋ฉด ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์ด ์žˆ๋Š”๋ฐ, ์ด๋Š” .ts์™€ ๊ฐ™์€ .js๊ฐ€ ์•„๋‹Œ ํ™•์žฅ์ž๋ฅผ ์“ฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋ชจ๋“ˆ ๋กœ๋”๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฝ๋กœ ๋‚ด ํŒŒ์ผ์„ ์Šค์บ”ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋งŽ์€ ์—ฐ์‚ฐ์„ ํ•„์š”๋กœ ํ•œ๋‹ค.
Deno์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ž์ž˜ํ•œ ๊ฒฝ๋กœ ์ƒ๋žต ๊ธฐ๋Šฅ์ด ์‚ฌ๋ผ์ ธ ๋ชจ๋“ˆ์˜ ๊ฒฝ๋กœ๋ช…๊ณผ ์‹ค์ œ ํ•ด๋‹น ๋ชจ๋“ˆ์˜ ์œ„์น˜์˜ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ๋” ๋ช…ํ™•ํ•ด์กŒ๋‹ค.

2.6. ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด[ํŽธ์ง‘]

Node.js๋Š” C++๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐฉ์–ธ์€ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ณ  Babel๊ณผ ๊ฐ™์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ฒˆ์—ญ๋œ ๋’ค ์‹คํ–‰๋œ๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋• ์‚ฌ์‹ค์ƒ ์ปดํŒŒ์ผ ์–ธ์–ด์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ˜๋ฉด Deno๋Š” Rust๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์™ธ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋„ ๋„ค์ดํ‹ฐ๋ธŒํ•˜๊ฒŒ ์‹คํ–‰ํ•œ๋‹ค ๋„ค์ดํ‹ฐ๋ธŒ์ฒ˜๋Ÿผ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์‚ผ๊ณ  ์žˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง๋˜์–ด ๋˜์–ด V8์—”์ง„์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์€ ๋…ธ๋“œ์™€ ๊ฐ™์ง€๋งŒ, ๊ฐ์ข… ์ตœ์ ํ™”๋ฅผ ๊ฑฐ์ณ์„œ ํผํฌ๋จผ์Šค๋„ ํ›จ์”ฌ ์ข‹๊ณ  ๋ณ„๋„๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ ์„ธํŒ…์„ ํ•  ํ•„์š”๋„ ์—†๋‹ค. ๋˜ํ•œ ์—ฌ๊ธฐ์— ๊ณต์‹ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ์ธ tsc ๋Œ€์‹  Rust๋กœ ์ž‘์„ฑ๋œ ์ปดํŒŒ์ผ๋Ÿฌ์ธ swc๋ฅผ ์ด์šฉํ•˜์—ฌ ํผํฌ๋จผ์Šค๋ฅผ ๋”์šฑ ๋Œ์–ด์˜ฌ๋ฆฌ๋ ค๋Š” ์‹œ๋„๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ์ค‘์ด๋‹ค. # ๋ณธ๋ž˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋งŒ ์ง€์›๋˜๋„๋ก ํ•  ์˜ˆ์ •์ด์—ˆ์œผ๋‚˜, ์‹œ์Šคํ…œ ๋ฐ”์ธ๋”ฉ ๊ณผ์ •์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ์™„์ „ํžˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒํŠธ๋ฅผ ์—†์• ์ง€๋Š” ๋ชปํ–ˆ๋‹ค.
[1] ์‹คํ–‰ ํ™˜๊ฒฝ