Deno

Deno ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ Deno ์ž์ฒด๋Š” ์•„์ง ๋ฏธ์ˆ™ํ•˜๋ฉฐ, ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
Deno์˜ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„์„ ๊ณ ๋ คํ–ˆ์„ ๋•Œ, Deno ํŒ€์˜ ์„ฑ๊ณผ๋Š” ์ข‹์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ๊ฒฐ๊ณผ Node.js๋Š” Deno์˜ ๊ธฐ๋Šฅ์„ ์ ์ฐจ ๋”ฐ๋ผ์žก๊ณ  ์žˆ์œผ๋ฉฐ, Bun๊ณผ ๊ฐ™์€ ๋™์ผํ•œ ์ƒํƒœ๊ณ„ ๊ฒฝ์Ÿ์ž๋„ ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.
Deno์˜ ๋ฏธ๋ž˜์— ๋Œ€ํ•œ ํ™•์‹ ์„ ๊ฐ–๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  • Rust๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • API๋Š” ์›น ํ™˜๊ฒฝ๊ณผ ์ตœ๋Œ€ํ•œ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.
  • ์ฃผ๊ด€์ ์ธ deno fmt, deno lint, deno test, =deno bench=๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ˆ์ „ํ•˜๋ฉฐ, ์„ธ๋ถ„ํ™”๋œ ๊ถŒํ•œ ์‹œ์Šคํ…œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋™์  ๊ถŒํ•œ ์š”์ฒญ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    ํ˜„์žฌ Deno์—๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ•„๋“œ๊ฐ€ ๋งŽ์•„ ์„ธ๋ถ„ํ™”๋œ ๊ถŒํ•œ ์‚ฌ์šฉ์ด ๋งค์šฐ ๋ถˆํŽธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฒฐ๊ตญ์€ ๊ฑฐ์นœ ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • TypeScript๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜๋ฉฐ, JavaScript ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ TypeScript๋กœ ์ „ํ™˜ํ•จ์— ๋”ฐ๋ผ ์ด ์ ์€ ์ ์  ๋” ์ค‘์š”ํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • Node.js ํ˜ธํ™˜์„ฑ.
Deno์˜ ๋‚ด์žฅ ๊ธฐ๋Šฅ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์—„๊ฒฉํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉฐ, ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”ผ๋“œ๋ฐฑ์— ์˜์กดํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
LTS๊ฐ€ ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์ ์  ์งง์•„์ง€๋Š” ์ถ”์„ธ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , Deno 2 ์ถœ์‹œ ์‹œ 6๊ฐœ์›”์„ LTS๋กœ ์„ ์–ธํ•œ ๊ฒƒ์€ ์‹ค์†Œ๋ฅผ ์ž์•„๋ƒ…๋‹ˆ๋‹ค.
Deno Land Inc.๋Š” ๋‹ค๋ฅธ ์ƒํƒœ๊ณ„ ์ œํ’ˆ์˜ ๋ณต์ œ/๋Œ€์ฒดํ’ˆ ๊ฐœ๋ฐœ์— ์—ด์„ฑ์ ์ž…๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์ œํ’ˆ๋“ค์€ ๋ช…๋ฐฑํžˆ ๊นŠ์€ ๊ณ ๋ฏผ์ด ๋ถ€์กฑํ•˜๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅ์„ฑ์— ์˜๋ฌธ์ด ๋“ญ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ฒฝํ–ฅ์€ Deno ์ž์ฒด์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์ณค์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Node.js ํ˜ธํ™˜์„ฑ์€ ๋งˆ์ผ€ํŒ… ๊ณผ์žฅ์ด ์‹ค์ œ ๊ฒฐ๊ณผ๋ฌผ๋ณด๋‹ค ์šฐ์„ ํ•˜๋Š” ์ „ํ˜•์ ์ธ ์˜ˆ์ž…๋‹ˆ๋‹ค:
https://docs.deno.com/runtime/reference/node_apis/#fully-supported-modules
์กฐ๊ธˆ ๊ทœ๋ชจ๊ฐ€ ์žˆ๋Š” Deno ํ”„๋กœ์ ํŠธ๋Š” LSP์˜ ์‘๋‹ต ์†๋„๋ฅผ ๋А๋ฆฌ๊ฒŒ ํ•˜์—ฌ, Deno๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฐœ๋ฐœ์ž๋“ค์„ ์‰ฝ๊ฒŒ ์ดํƒˆ์‹œํ‚ต๋‹ˆ๋‹ค.
์ด์— ๋น„ํ•ด, Node.js ๋ฐ TypeScript ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ๋Š” ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.
Deno์˜ LSP ๊ธฐ๋ณธ ์„ค์ •์€ ์ƒ๋‹นํžˆ ๋ณด์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, =documentPreloadLimit=์˜ ๊ธฐ๋ณธ๊ฐ’์€ 1000์ด๋ฉฐ, ์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ๋Š” ์‰ฝ๊ฒŒ ์ดˆ๊ณผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
WHATWG ์ŠคํŠธ๋ฆผ ๋ชจ๋ธ์˜ ์„ค๊ณ„๋Š” ์ƒ๋‹นํžˆ ์กฐ์•…ํ•˜๋ฉฐ, Node.js์˜ ์ŠคํŠธ๋ฆผ์— ํ›จ์”ฌ ๋ฏธ์น˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๋Š” ์ŠคํŠธ๋ฆผ์ด ๋‹ซํ˜”๋Š”์ง€, ์–ธ์ œ ๋‹ซํ˜”๋Š”์ง€์กฐ์ฐจ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ชจ๋“ˆ์€ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ํ”„๋กœํ† ์ฝœ์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
๋ชจ๋“ˆ์ด ๋กœ์ปฌ ๋ชจ๋“ˆ๋กœ ๊ฐ€์ ธ์™€์งˆ ๋•Œ, ๋ชจ๋“ˆ์˜ =import.meta.url=์€ file ํ”„๋กœํ† ์ฝœ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
๋ชจ๋“ˆ์ด ์›๊ฒฉ ๋ชจ๋“ˆ๋กœ ๊ฐ€์ ธ์™€์งˆ ๋•Œ, ํ•ด๋‹น =import.meta.url=์€ http/https ํ”„๋กœํ† ์ฝœ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
๋ฌธ์ œ๋Š” ์ƒ๋‹น์ˆ˜์˜ API๊ฐ€ ํ•œ ๊ฐ€์ง€ ํ”„๋กœํ† ์ฝœ๋งŒ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด =Deno.readFile=์€ file ํ”„๋กœํ† ์ฝœ๋งŒ ์ง€์›ํ•˜๋ฉฐ, http/https ํ”„๋กœํ† ์ฝœ์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ =import.meta.url=์„ ์‚ฌ์šฉํ•  ๋•Œ ๋” ๋งŽ์€ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.
๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” Deno๊ฐ€ ๊ฐ€์ ธ์˜จ ๋ชจ๋“ˆ(์บ์‹œ)์˜ ๋กœ์ปฌ ๊ฒฝ๋กœ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋ฉฐ, ์ด๋Š” ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
https://github.com/denoland/deno/issues/5987
์ƒ๋‹นํžˆ ๋น„๊ทน์ ์œผ๋กœ, Deno๋Š” fetch ํ•จ์ˆ˜๊ฐ€ file ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๊ฒŒ ํ•˜์—ฌ ํŒŒ์ผ ์ฝ๊ธฐ ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
https://github.com/denoland/deno/issues/3196
TypeScript๋Š” .ts ํ™•์žฅ์ž์˜ ๋ชจ๋“ˆ ๊ฒฝ๋กœ๋ฅผ .js ํ™•์žฅ์ž๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ,
Deno์˜ ๋ชจ๋“ˆ ๊ฒฝ๋กœ๋Š” ํ•ญ์ƒ .ts ํ™•์žฅ์ž์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ, Node.js ๋ชจ๋“ˆ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ TypeScript ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๋Š” Deno์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
TypeScript 5๋ถ€ํ„ฐ allowImportingTsExtensions ์„ค์ • ํ•ญ๋ชฉ์„ ์ง€์›ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์—์„œ .ts ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์ง€๋งŒ,
์ด ์„ค์ • ํ•ญ๋ชฉ์€ noEmit ๋˜๋Š” emitDeclarationOnly๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.
์ด๋Š” .ts ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ Node.js์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
Deno ๊ณต์‹์ด ์ถ”์ง„ํ•˜๋Š” JavaScript ํŒจํ‚ค์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
JSR์€ ํ˜„๋Œ€์ ์ธ JavaScript ํŒจํ‚ค์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ž„์„ ํ‘œ๋ฐฉํ•˜์ง€๋งŒ, ์—ฌ์ „ํžˆ Deno ๋ฒ„์ „์˜ npm์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.
JSR์€ TypeScript๊ฐ€ JavaScript์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ด ์•„๋‹ˆ๋“ฏ์ด, npm์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ด ์•„๋‹™๋‹ˆ๋‹ค.
์ด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” Deno์— ์กด์žฌํ•˜๋Š” ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฌธ์ œ(Ryan Dahl์ด 2018๋…„์— ๋˜์ง„ ๋ถ€๋ฉ”๋ž‘์ด ๋งˆ์นจ๋‚ด ์ž์‹ ์—๊ฒŒ ๋Œ์•„์˜ด)๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํฌ๊ฒŒ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋ชจ๋“ˆ์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์˜์กด์„ฑ์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜, SemVer ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด ๋™์ผํ•œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์˜์กด์„ฑ์˜ ๋‹ค๋ฅธ ํ•˜์œ„ ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ํ”„๋กœ์ ํŠธ์˜ ๋ณผ๋ฅจ ํŒฝ์ฐฝ(LSP ๋ถ€ํ•˜ ์ฆ๊ฐ€)์„ ์•ผ๊ธฐํ•˜๊ณ , ๊ฐ€์ ธ์˜จ ์˜์กด์„ฑ ๊ฐ„์˜ ์ฐธ์กฐ ๋™๋“ฑ์„ฑ ๋ถ€์กฑ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.
Deno ๊ณต์‹์€ ๊ธฐ์กด ํŒจํ‚ค์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ธ deno.land/x๋Š” ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ฃผ์žฅํ•˜์ง€๋งŒ,
๊ณต์‹ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ std๊ฐ€ deno.land/x์—์„œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ค‘๋‹จ๋œ ๊ฒƒ์„ ๊ณ ๋ คํ•  ๋•Œ, deno.land/x์— ํŒจํ‚ค์ง€๋ฅผ ๊ณ„์† ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.
์ด์ œ (Deno 1.28์— ์ถ”๊ฐ€๋œ npm ๋ชจ๋“ˆ ์ง€์›๊ณผ ๊ฐ™์ด) ์ „์šฉ ์ ‘๋‘์‚ฌ =jsr:=๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ URL์„ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/oakserver/oak
https://fresh.deno.dev/
Deno ๊ณต์‹์ด 2022๋…„์— ์ถœ์‹œํ•œ ํ’€์Šคํƒ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, Next.js๋ฅผ ๋Œ€ํ•ญ๋งˆ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:
  • React ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ Deno ์ง€์›์„ ํ…Œ์ŠคํŠธํ•œ ๊ฒƒ์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ React์˜ ๊ฒฝ๋Ÿ‰ ๋ณ€ํ˜•์ธ Preact๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋Š” ๋ฏธ๋ž˜๊ฐ€ ์—†๋Š” ๊ธฐ์ˆ  ๋…ธ์„ ์ž…๋‹ˆ๋‹ค.
Deno๋Š” CDN์„ ํ†ตํ•ด JSDOM์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
import { JSDOM } from 'https://esm.sh/jsdom@22.1.0'
https://github.com/b-fuze/deno-dom
์ด ํ”„๋กœ์ ํŠธ๋Š” Rust์˜ html5ever ํŒจํ‚ค์ง€์˜ ๋ฐ”์ธ๋”ฉ์ž…๋‹ˆ๋‹ค.
Deno FFI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” SQLite.
์žฅ์ :
  • ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ better-sqlite3์™€ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ ์„ฑ๋Šฅ์ž…๋‹ˆ๋‹ค.
WASM์œผ๋กœ ์ปดํŒŒ์ผ๋œ SQLite.
์žฅ์ :
  • ์ตœ์†Œ ๊ถŒํ•œ.
  • ํฌ๋กœ์Šค ํ”Œ๋žซํผ.
๋‹จ์ :
  • Deno ํŒŒ์ผ ์‹œ์Šคํ…œ API์˜ ์ œ์•ฝ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋œ ์ปดํŒŒ์ผ ์˜ต์…˜์ด ๋งค์šฐ ์ ์–ด, ์ง์ ‘ ์ปดํŒŒ์ผํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.
Deno 1.21๋ถ€ํ„ฐ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ƒ๋‹นํ•œ ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ,
๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ํ…Œ์ŠคํŠธ๋ฅผ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Deno์˜ ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ  ์„ ํƒ์€ Node.js ํ…Œ์ŠคํŠธ์˜ ๋ฒค๋” ์ข…์†์„ฑ ๋ฌธ์ œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ”ผํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” BDD ์Šคํƒ€์ผ, mock/stub, ์Šค๋ƒ…์ƒท ๋งค์นญ, ํƒ€์ด๋จธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์ด๋ฏธ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:
https://deno.land/std@0.181.0/testing
https://github.com/denoland/deno_std/issues/1779
Deno๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹จ์ผ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ๋ฒˆ๋“ค๋งํ•˜๋Š” ๋‚ด์žฅ ๋ช…๋ น =deno bundle=์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
Ryan Dahl์€ ํ•œ๋•Œ ์ด ๋ช…๋ น์„ ์‚ญ์ œํ•  ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์ง€๋งŒ, ์ด ์•„์ด๋””์–ด๋Š” ๋‚˜์ค‘์— ์ฒ ํšŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ v1.31์—์„œ๋Š” ์ด ๋ช…๋ น์ด ์ปค๋ฎค๋‹ˆํ‹ฐ ๋…ผ์˜ ์—†์ด ๊ฐ‘์ž๊ธฐ ์‚ฌ์šฉ ์ค‘๋‹จ์œผ๋กœ ๋ถ„๋ฅ˜๋˜์—ˆ๊ณ , ๊ณต์‹ ๋งค๋‰ด์–ผ์—์„œ๋Š” esbuild ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.
v2.4์—์„œ deno bundle์€ ์•Œ ์ˆ˜ ์—†๋Š” ์ด์œ ๋กœ ๋ณต๊ท€ํ–ˆ์œผ๋ฉฐ, ๊ทธ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” esbuild๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
v2.5์—์„œ๋Š” HTML ํŒŒ์ผ์„ ๋ฒˆ๋“ค๋ง์˜ ์ง„์ž…์ ์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
deno run ๋ช…๋ น์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, TypeScript ํƒ€์ž… ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ ๋กœ๋“œ๋˜์–ด deno ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
=deno compile=์„ ํ†ตํ•ด ๋จผ์ € ์ปดํŒŒ์ผํ•œ ํ›„ ์‹คํ–‰ํ•˜๋ฉด, ์Šคํฌ๋ฆฝํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํ˜„์ €ํžˆ ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.