๐Ÿฆ•๋ฆผํ”„์ข… ๊ตํ™˜ํ•˜๋Ÿฌ ๊ฐˆ๊นŒ์š”?๋ณด์ƒ: Deno๋ฅผ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

4889 ๋‹จ์–ด denonodejavascripttypescript

์ฒซ๋ฒˆ์งธ ์ผ


๋ฐ๋…ธ๋Š” ์•„์ง ์ƒ์‚ฐ ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค.์ด ๊ธ€์„ ์“ธ ๋•Œ, ๊ทธ๊ฒƒ์˜ ํŒ๋ณธ์€ 1.0.0-rc2์ด๋‹ค.์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์†Œํ™€ํžˆ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?์•„๋‹ˆ, ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ๋ถ€ํ„ฐ ๊ทธ๊ฒƒ์„ ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ์€ 1๋…„์—์„œ 2๋…„์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋น„๊ทน์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊ทธ๊ฒƒ์€ ๋…ธ๋“œ๋ฅผ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜, ์ ์–ด๋„ ๋…ธ๋“œ์ฒ˜๋Ÿผ ํ™˜์˜๋ฐ›์„ ๊ฒƒ์ด๋‹ค.
๋…ธ๋“œ๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ์•ผ.๋‚˜๋Š” ๋…ธ๋“œ๋ฅผ ์ข‹์•„ํ•œ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์„ ๋„์™”๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ๋•Œ๋กœ๋Š” ๋…ธ๋“œ์˜ ๋ฐœ์ „๋„ ๋งค์šฐ ๋Š๋ฆฌ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋“ˆ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ณ  ECMAScript(javascript) ํ‘œ์ค€์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋˜ NPM์€ ์—‰๋ง์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ „์ฒด์ ์œผ๋กœ ๊ณต์ •ํ•œ ์˜์กด ๊ด€๋ฆฌ๋Š” ์‰ฝ์ง€ ์•Š๋‹ค.๋˜ํ•œ ๋…ธ๋“œ๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ๋„๊ตฌ๋Š” ์„ค์ •ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ดwebpack ๋˜๋Š”eslint/prettier.๋‚˜๋Š” ํ•ญ์ƒ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์—…๋ฐ์ดํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค.์ž, Node/Npm์— ๊ด€ํ•ด์„œ๋Š” ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์ด ๋“œ๋…ธ์ž…๋‹ˆ๊นŒ?


Deno ์›น ์‚ฌ์ดํŠธ์— ๋”ฐ๋ฅด๋ฉด:

A secure runtime for JavaScript and TypeScript
Okay, so what we know is that we can run Javascript and Typescript on bare metal.


๋ฌธ์„œ๋ฅผ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ž์„ธํžˆ ์ฝ์œผ๋ฉด ์šฐ๋ฆฌ๋Š” ์•„๋ž˜์˜ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
ํ•˜๋‚˜๋Š” Deno์ด๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”๊ฐ€?
๊ธฐ๋ณธ์ ์œผ๋กœ Deno๋Š” ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์‹คํ–‰๋˜๋ฉฐ ์‹œ์Šคํ…œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.์‹ค์ œ๋กœ, Deno ํ”„๋กœ์ ํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.๊ทธ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๊ฒฝํƒ„์„ ์ž์•„๋‚ธ๋‹ค.๋”ฐ๋ผ์„œ ์˜์กด ํ•ญ๋ชฉ์ด ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ์ ‘๊ทผํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค๋ฉด, ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋…ธ๋“œ๋Š” C++๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœํ•  ๋•Œ C++๊ฐ€ ์ตœ์„ ์˜ ์„ ํƒ์ž…๋‹ˆ๋‹ค.๊ทธ๋•Œ๋ถ€ํ„ฐ ์šฐ๋ฆฌ๋Š” Rust์™€ ๊ฐ™์€ ๋” ๊ฐ„๋‹จํ•˜๊ณ  ์•ˆ์ „ํ•œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋””๋…ธ๊ฐ€ ๋…น์œผ๋กœ ์“ด ์ด์œ ๋‹ค.Rust๋Š” Webassambly๋ฅผ ์ง€์›ํ•˜๋Š” ์‹ ๊ธฐํ•œ ์–ธ์–ด๋‹ค.๊ธฐ๋ณธ์ ์œผ๋กœ ๊ทธ๊ฒƒ๋„ ์•ˆ์ „ํ•˜๋‹ค.
๋‹ค๋ฅธ ๋ฉ‹์ง„ ๊ฒƒ๋“ค์€ ๋””๋…ธ๊ฐ€ ํ…์ŠคํŠธ ์ƒ์ž์— ๋Œ€ํ•œ Typescript ์ง€์›์„ ๋ง๋ถ™์—ฌ์„œ ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋ฌถ์„ ์ˆ˜ ์žˆ๊ณ  ํ…Œ์ŠคํŠธ์™€ ์ฝ”๋“œ ํ˜•์‹์˜ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.๊ทธ๊ฒƒ์€ ๋‚ด์žฅ๋œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋„ ์žˆ๋‹ค.๊ทธ๋ž˜์„œ ๋นจ๋ฆฌ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜, ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”!๋•๋…ธ๋ฐ–์— ์—†์–ด.
๋” ๋งŽ์€ ์ฐจ์ด๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ๊ฒƒ๋“ค์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹คhere

ํ…œํ”Œ๋ฆฟ ์ž‘์„ฑ


Deno๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
#Unix
curl -fsSL https://deno.land/x/install/install.sh | sh
์ด์ œ deno ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.์ผ๋ฐ˜์ ์œผ๋กœ Unix์™€ ์œ ์‚ฌํ•œ ์šด์˜ ์ฒด์ œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.WSL์€ Windows๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ git์™€ make๋„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ๋ฅผ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
git clone https://github.com/lampewebdev/deno-boilerplate
์ด ๊ฐ•์ขŒ์—์„œ VS ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ํ…Œ๋‹ˆ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹คDeno VS Code Extension
VS ์ฝ”๋“œ์—์„œ ํ•ญ๋ชฉ์„ ์—ด๋ฉด ๋‹ค์Œ ํŒŒ์ผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„œ๋ฅ˜๋ฅผ ์ดํ•ดํ•ด ๋ด…์‹œ๋‹ค..vscode ํด๋”์—๋Š” Deno๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š” settings.json ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
{
    "deno.enable": true
}
์šฐ๋ฆฌ๊ฐ€ ์‚ดํŽด๋ด์•ผ ํ•  ๋‹ค์Œ ํŒŒ์ผ์€ makefile ์ด๋‹ค.makefile์—์„œ๋Š” ๋‹ค์Œ ๋ช…๋ น์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • make run: ์‹คํ–‰index.ts
  • make test: ํ…Œ์ŠคํŠธ ์‹คํ–‰
  • make format: ๋ชจ๋“  ํŒŒ์ผ ํฌ๋งท
  • make debug: index.ts๋ถ€ํ„ฐ ๋””๋ฒ„๊ฑฐ ์‹คํ–‰
  • make bundle: ํ•ญ๋ชฉ์„ build/index์˜ ๋‹จ์ผ ํŒŒ์ผ์— ๋ฒˆ๋“ค
  • ์ด ๋ชจ๋“  ๋ช…๋ น์— ๋Œ€ํ•ด, ์šฐ๋ฆฌ๋Š” ์–ด๋– ํ•œ ์ถ”๊ฐ€ ๋„๊ตฌ๋‚˜ ์˜์กดํ•ญ๋„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค.๋ชจ๋‘ ๋‚ด์žฅ๋œ Deno์ž…๋‹ˆ๋‹ค.๋‚˜๋Š” ์ด๊ฒƒ์ด ๋งค์šฐ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๊ฒƒ์€ ๋„ˆ์˜ ๊ฐœ๋ฐœ์ž ์ƒํ™œ์„ ํ›จ์”ฌ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•œ๋‹ค.๊ธฐ๋ณธ์ ์œผ๋กœ Deno์— --watch ๋กœ๊ณ ๊ฐ€ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ๋ฐ”๋€Œ๋ฉด ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    ๋˜ ๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ๋ฌธ๊ฑด์€ deps.ts ๋ฌธ๊ฑด์ด๋‹ค.์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ Typescript ํŒŒ์ผ์ผ ๋ฟ์ด์ง€๋งŒ, ๊ด€๋ก€์— ๋”ฐ๋ฅด๋ฉด, ์ด ํŒŒ์ผ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์™ธ๋ถ€ ๋ชจ๋“ˆ/ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.
    import * as Log from "https://deno.land/std/log/mod.ts";
    
    export {
      Log,
    };
    
    ์ „ํ™”๋ฒˆํ˜ธdeps.ts์ž…๋‹ˆ๋‹ค.๋„ˆ์˜ ์†Œํฌ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•ด๋ผ.json.
    ๊ทธ๊ฒƒ์€ ์ €์žฅ ์˜์กด ํ•ญ๋ชฉ์˜ ์ค‘์‹ฌ ์œ„์น˜๋‹ค.ํ•œ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์€ ๊ฐœ๋ฐœ ์˜์กดํ•ญ์ด ์–ด๋””๋กœ ๊ฐ€์•ผ ํ•˜๋Š”์ง€ ๋ณด๋Š” ๊ฒƒ์ด๋‹ค.๋‚˜๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ๋ณธ ์ ์ด ์žˆ๋‹คdev-deps.ts.๋‚˜๋Š” deps.<ENV>.ts์„ ๋” ์ข‹์•„ํ•œ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด deps.prod.ts,deps.dev.ts ๋“ฑ๋“ฑ.
    ํ˜„์žฌconfigs.ts๋Š” ๋น„์–ด ์žˆ๋‹ค.๋‚˜๋Š” dotenv ํŒŒ์ผ์„ ์ข‹์•„ํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ๋””๋…ธ์—์„œ ๋ฌด์—‡์ด ์ด๊ธธ์ง€ ๋ณผ ๊ฒƒ์ด๋‹ค.
    ๊ทธ ๋‹ค์Œindex.ts.์ด๊ฒƒ์€ ์›น ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ €๋Š” index์„ ์ข‹์•„ํ•˜์ง€๋งŒ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ ๋งค์šฐ ํ‘œ์ค€์ ์ธ ๋ฌผ๊ฑด์ด๋‹ค.
    ์šฐ๋ฆฌ๋Š” main.ts ๋ฌผ๊ฑด์„ ์‹คํ˜„ํ•˜๊ธฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ณ , Deno์—์„œ ์–ด๋–ป๊ฒŒ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œlogger์„ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์˜ ์˜ˆ๋„ ์žˆ๋‹ค.
    ํ…Œ์ŠคํŠธ์™€ ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.๋‘˜ ๋‹ค ๋‚ด์žฅ๋œ Deno์ด๋ฉฐ ์ถ”๊ฐ€ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    ๋„์›€์ด ํ•„์š”ํ•˜์‹œ๋ฉด ์ €์—๊ฒŒ ์—ฐ๋ฝํ•˜๊ฑฐ๋‚˜ GitHub Repo์— ์งˆ๋ฌธ์ด๋‚˜ ์š”์ฒญ์„ ๋งŒ๋“œ์‹ญ์‹œ์˜ค
    ๋” ๋งŽ์€ ๋””๋…ธ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณด๊ณ  ์‹ถ์œผ์„ธ์š”?์•Œ๋ ค์ฃผ์„ธ์š”!์ €๋Š” ๋””๋…ธ์— ๋Œ€ํ•œ ๋Œ“๊ธ€๊ณผ ๋‚ด์šฉ์„ ๋” ๋งŽ์ด ๋ฐœํ‘œํ•˜๊ณ  ์‹ถ์–ด์š”!
    ๐Ÿ‘‹์ธ์‚ฌํ•˜๋‹คMedium | |

    ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ