Medium - Top 5 Reasons Javascript Developers Prefer Deno Over Node.
in Trend
Trend 파악을 위한 Medium 기고문 포스팅 - 자바스크립트 개발자가 노드보다 디노를 선호하는 이유 탑 파이브
노드JS를 만든 라이언 달은 최근 Node의 부족한 점을 해결하는 것을 목표로한 새로운 런타임을 공개했습니다. 여러분의 반응은 “아.. 그냥 또 다른 자바스크립트 프레임워크 인가?” 할 수도 있겠죠. 그렇지만 장점들을 이해하고 나시면 디노는 2020년 자바스크립트 백엔드 개발자에게 정확히 필요한 것이라는 것을 알 수 있습니다. 그러면 디노가 어떤 점에서 노드보다 더욱 좋은 경험을 제공해주는지 알아보겠습니다.
1: Modern Javascript - ES Modules
만약 여러분이 저처럼 리액트 개발자라면 여러분은 패키지 임포팅 문법이 Node와는 달라진 것을 알 수 있으실 겁니다. 이것은 노드가 2009년에 만들어 졌기 때문에 그 이후로 자바스크립트에 엄청난 업데이트가 많이 발생했기 때문입니다. 리액트 ( 그리고 디노 )에서 우리는 기존의 const package = require("package")
대신에 최신 문법인 import package from 'package'
를 사용할 수 있습니다.
ES 모듈 임포트는 우수한 점이 두가지 있습니다.
import
를 사용해서 패키지 중에 우리가 필요한 것만 로드할 수 있기 때문에 메모리를 절약할 수 있습니다.require
은 동기방식으로 로딩을 하지만import
는 비동기로 모듈을 로딩하기 때문에 성능이 더욱 좋습니다.
만약 위의 이미지에 나와있는 걸 알고 계시다면 디노에서는 URL에서 패키지를 임포트 할 수 있는 장점이 있습니다.
2: Decentralized Packages
디노에서는 더이상 NPM에 의존하지 않으셔도 됩니다. 그렇습니다. 더이상 package.json
이 없는 것입니다. 모든 패키지는 URL에서 로딩됩니다.
노드에서 패키지를 사용할려면 처음에 NPM으로 부터 설치해야 합니다.
npm i moment
설치가 끝나고나면 앱에 포함시켜야 합니다.
const moment = require("moment")
또한 여러분의 노드 저장소를 로컬에서 실행하고 싶어한다고 해도 그들은 NPM에서 모든 의존성들을 설치해야 하죠.
디노에서는 패키지가 URL에서 임포팅되기 때문에 moment를 사용하고 싶다면 그냥 import “https://deno.lan/x/moment/moment.ts”를 하면 됩니다.
다른 큰 장점으로 디노는 모든 패키지가 설치되고 난뒤에 하드디스크에 캐시가 된다는 것입니다. 이것은 모든 패키지 설치가 오직 한번만 일어난다는 것이죠. 만약 의존성을 다시 임포트하고 싶다면 다운로드 할 필요없이 언제 어디서나 할 수 있습니다.
3: TypeScript works natively, no configuration needed
노드에서 타입스크립트를 쓰는 것은 좀 부차저인 프로세스입니다. 타입스크립트를 설치하고 package.json을 업데이트하고 tsconfig.json을 설정하고 여러분의 모듈이 @types
를 지원해야 합니다. 디노에서는 그냥 파일을 .ts로 저장하면 타입스크립트 컴파일러가 알아서 해줍니다.
4: Top level await - Use await outside of an async function
노드에서 await
키워드는 비동기 함수에서만 사용이 가능합니다. 디노에서는 async 함수로 감싸지 않아도 어디서나 사용할 수 있습니다. 거의 모든 자바스크립트 앱들은 많은 비동기 함수들을 가지고 있습니다. 이 업그레이드는 많은 코드들을 깔끔하고 간단하게 해줄겁니다.
5: Access to the Browser API (Window, Fetch)
자바스크립트에서 HTTP 리퀘스트를 만들기 위해서 Fetch API를 사용할 수 있습니다. 노드에서는 브라우저 API에 접근할 수 없기 때문에 fetch 함수를 natively 하게 호출할 수 없습니다. 그래서 우리는 패키지를 설치해야 하죠
npm i node-fetch
그리고 나서 임포트도 해야 합니다.
const fetch = require("node-fetch")
그렇게 하고 나서야 fetch를 호출할 수 있습니다. 디노는 기본적으로 window
객체에 접근할 수 있기 때문에 라이브러리 설치 없이 그냥 fetch("https://somthing.com")
라고 하면 브라우저 API를 호출할 수 있습니다.
await를 그냥 쓸 수 있는 것과 더불어서 디노의 코드를 노드 코드보다 훨씬 깔끔하게 만들어주는 점이죠.
A more 2020 way of writing Javascript code
It doesn’t end there
디노는 그 밖에도 많은 장점들이 있습니다. 기본적으로 더 보안이 좋고 Wasm 바이너리를 실행할 수 있으며 많은 라이브러리가 내장되어 있고 등등이 있죠. 여기서 언급한 모든 것들이 한데 어우려져 2020 백엔드 개발자에게 필요한 자바스크립트 런타임이 되는 것입니다. 리액트 개발자로서 저는 디노에게 감명받았습니다. import
문법을 쓰고 await
를 원하는 곳에 언제나 쓸 수 있으며 설정을 하지않고 기본으로 타입스크립트를 쓰고 패키지를 설치하지 않아도 fetch
를 호출할 수 있는 것이죠. 그냥 너무나 쉽습니다.
디노가 노드를 대체하게 될까요? 그럴거라 생각합니다. 몇년이 걸리겠죠. 노드 생태계는 아주 크고 디노가 그걸 따라잡는데 시간이 걸릴겁니다. 그러나 자바개발자들은 요즘 새로운 프로젝트에 디노를 사용하기 시작했으며 여러분도 새로운 프로젝트를 하게 된다면 디노를 한번 사용해보세요. 더욱 많은 정보가 필요하다면 deno.land를 방문해 보세요.
Summary
- 디노를 쓰면 좋은 이유들