티스토리 뷰

안녕하세요. 한장현입니다.

Deno와 Node.js를 간단하게 비교해 본 글이 있어서 번역해 봤습니다.

원문: www.hiddenbrains.com/blog/deno-vs-nodejs-development.html

 


 

 

 최근 Deno v1이 릴리즈 되면서 큰 이슈가 되었습니다.
 어떤 사람들은 이제 Node.js의 시대가 끝났다고 이야기하기도 했습니다. 하지만 이런 의견은 너무 과장되었으며 지나치게 낙관적인 시각입니다.
 Deno는 Node.js와 비교될 수밖에 없습니다. 무엇보다도 Deno를 개발하고 있는 사람이 Node.js를 개발한 Ryan Dahl이기 때문입니다.

Deno

 Deno는 V8 JavaScript 엔진과 Rust 언어로 개발된 JavaScript, TypeScript 실행환경입니다.

Deno의 강점

  • 잘 설계된 모듈 시스템을 갖추고 있습니다.
  • 보안이 핵심입니다.
  • TypeScript를 바로 실행할 수 있습니다.
  • 의존성 없이 실행할 수 있는 파일 하나로 배포됩니다.
  • 의존성 검사기(dependency inspector)와 코드 포매터(code formatter)를 내장하고 있습니다.

보안

 Node.js는 파일 시스템, 외부로 나가는 요청, 환경변수 등에 제한 없이 접근할 수 있습니다. 물론 이렇게 접근하는 방식이 편하지만 안좋은 점도 있습니다. 개발 환경이나 운영중인 환경에서 심각한 보안 문제를 초래할 수도 있습니다.

  • Deno에서는 --alow-net 옵션을 사용해야 네트워크를 사용할 수 있습니다.
  • 권한을 허용/제한할 때 커맨드라인 옵션을 사용합니다.
  • 예외를 적용하면 폴더에서 코드를 읽을 수 있습니다.
  • 커맨드라인에서 스크립트 파일을 실행할 때 권한을 허용하려면 플래그를 사용해야 합니다.

 Deno에서는 사용자가 명확하게 허용해야 권한이 부여되기 때문에, 프로그램 마음대로 파일을 삭제할 수 없습니다. Deno에서는 보안을 특히 신경 썼습니다. 명시적으로 권한을 허용하지 않으면 하드 드라이브에 접근할 수 없으며, 악성 코드도 마음대로 실행할 수 없습니다.

패키지 관리

 벌써부터 머리가 복잡해지나요?

 Node.js는 npm으로 패키지를 관리했습니다. 하지만 Deno는 패키지를 설치하거나 외부 링크로 패키지를 로드할 때 모두 URL을 사용합니다. 그래서 이제는 패키지를 관리할 package.json 파일이 없으며 node_modules 폴더도 없습니다. Deno의 장점 중 가장 대단한 것이 이것입니다.

 그러면 Deno는 어떻게 패키지를 관리할까요? Deno에서는 아무 곳에서나 모듈을 로드해서 사용할 수 있습니다. 이제는 패키지를 중앙에서 관리할 필요가 없습니다. 다만, 취약점이 확인되지 않은 서드 파티 모듈을 사용할 때에도 제한이 없기 때문에 가장 논란이 많은 부분이기도 합니다.

표준 라이브러리

 Node.js 첫 버전이 릴리즈될 때부터 JavaScript는 계속 변화하고 있었고 라이브러리도 개선되고 있었습니다. Deno는 개발자가 표준화된 방법으로 라이브러리와 공식 툴을 사용하려면 표준 라이브러리를 어떻게 제공해야 하는지 고민하고 있습니다.

모듈

 Node.js가 개발되는 시점에 JavaScript 모듈은 CommonJS가 표준이었으며, npm도 이 방식을 지원했습니다. 이제는 ES Module이 새로운 표준이 되었으며, jspm이 이 형식을 지원합니다.

Deno는 ES 모듈을 지원합니다.

 Node.js에서는 require 키워드로 CommonJS 모듈을 로드할 수 있으며, 표준 모듈, 서드파티 모듈, npmjs.com에서 제공되는 모듈은 모두 이 형식입니다.
 Deno에서는 import 키워드에 URL을 지정하는 방식으로 모듈을 로드합니다. Deno 모듈은 어느 곳에서 호스팅되더라도 관계없으며, 한 곳에서 관리되지 않지만 로컬에 캐싱되고 컴파일되기도 합니다. 따라서 개발자가 의도하지 않는 이상 자동으로 업데이트되지도 않습니다.

 Deno 프로그램에 필요한 라이브러리를 처음 캐싱하고 나면 언제든 바로 실행할 수 있습니다.

Node.js의 설계 한계

 Node.js를 만들었고 지금은 Deno를 만들고 있는 Ryan Dahl에 따르면, Node.js에는 설계 이슈가 몇가지 있습니다:

  • 모듈 시스템 설계에 문제가 있었음. 패키지를 중앙에서 관리함
  • 오래된 API를 지원해야 함
  • 보안 관리 기능이 없음

 Deno는 이런 문제들을 해결했습니다.

Node.js와 다른 점

  • Deno는 안정성을 강조하는 Rust와 Tokio를 기반으로 작성되었습니다. Node.js는 C++로 개발되었습니다.
  • 코드가 실행되기 전에 발생할 수 있는 에러를 미리 검출하게 위해 TypeScript를 활용합니다.
  • TypeScript는 대규모 어플리케이션에 특히 유리합니다.
  • 의존성 패키지를 로드할 때 ES6 import 구문을 사용합니다.
  • npm 같은 패키지 매니저를 사용하지 않습니다. package.json 파일도 없습니다.
  • Deno에서 예외가 발생하면 프로그램이 종료됩니다. NodeJS에서는 아니었습니다.
  • Deno에서 파일 시스템, 네트워크, 환경변수에 접근하려면 권한을 명시적으로 허용해야 합니다.

Deno가 Node.js를 대체할까요?

 아직은 모릅니다.
 Node.js는 이미 거대한 생태계를 형성했습니다. Deno는 아직 초기 단계이며 Node.js를 따라잡기에는 아직 갈 길이 멉니다.

 지금은 TypeScript로 작은 프로젝트를 만드는 정도로는 아주 멋진 환경입니다.
 Ryan Dahl에 따르면 Deno는 Node.js의 인기에 도전하는 프로젝트가 아니라고 하지만, Deno가 충분히 성숙하고 나면 대규모 프로젝트에 도입할 수 있는 선택지가 될 수는 있을 것입니다.

결론

 Deno가 개발자들에게 인기를 얻을지는 시간이 지나 봐야 알 수 있습니다. 지금도 그렇지만 나중에도 Node.js는 제 갈 길을 갈 것입니다.


"Node는 갑자기 없어지거나 하지 않습니다." - Ryan Dahl

댓글
댓글쓰기 폼
공지사항
Total
457,828
Today
80
Yesterday
94
링크
«   2021/12   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
글 보관함