이번 시간에는 가장 쉽고 안전한 런타임 언어
Deno에 대해서 알아보도록 하겠습니다.
Deno의 탄생
Deno는 2018년 네트워크 애플리케이션 개발언어인
Node.js의 개발자 Ryan Dahl(라이언 달)이라는
개발자를 통해 개발된 언어입니다.
Deno는 자바스크립트 V8 엔진 및
Rust 프로그래밍 언어를 기반으로 하는
Javscript 및 TypeScript 용 런타임 언어로서
생산성에 중심을 두는 언어입니다.
Deno의 개발자 Dahl은 2018년
"Node.js에 관한 후회 10가지"강연에서
Deno를 발표했습니다.
Deno는 별도 패키지 관리 프로그램이
필요 없는 언어로써, 단일 실행 파일 내에서
런타임 및 패키지 관리자의 역할을
명시적으로 수행하기 때문 입니다.
Deno의 역사
Ryan Dahl(라이언 달)은 JSconf EU 2018에서
"Node.js에 관한 후회 10가지"중
Node.js의 초기 디자인을 결정할 때
다음과 같은 후회를 했습니다.
- API 디자인에서 promise를 사용하지 않는 선택
- 레거시 빌드 시스템인 GYP 사용
- node_modules 및 package.json 사용
- 파일 확장자 비포함
- index.js를 사용한 매지컬 모듈 해석(magical module resolution)
- V8의 샌드박스 환경 깨뜨림
이에 대한 해결방안으로 Protocol Buffers(프로토콜 버퍼)
와 같은 직렬화 도구로 메시지 전달을 통해
시스템 호출 바인딩을 달성하고
접근 제어를 위해 명령 줄 플래그를 제공하는
Deno의 프로토타입을 발표했습니다.
Deno의 초기 언어
Deno는 처음에 Go언어를 통해 작성되었고
권한있는 쪽(Go, 시스템 호출 엑세스 포함)과
권한이 없는 쪽(V8) 간의 직렬화를 위해
Protocol Buffer(프로토콜 버퍼)를 사용했습니다.
하지만 Go는 이중 런타임과 Garbage collection
부담에 대한 우려로 곧 Rust언어로 대체되었습니다.
Deno와 Node.js의 차이
Deno와 Node.js의 차이를 알아보기 전에
먼저 Deno와 Node.js의 공통점을
알아보도록 하겠습니다.
Deno의 공통점
Deno와 Node.js는 구글 크롬의 엔진
V8 Javascript 엔진 기반으로 구축된
런타임 환경 언어입니다.
둘 다 내부 Event loop(이벤트 루프)가 있고,
스크립트와 광범위한 시스템 유틸리티를
실행하기 위한 명령 줄 인터페이스를 제공합니다.
Node.js와 차이점
- ES 모듈 사용 (CommonJS 사용X)
- require를 사용 X
- 브라우저처럼 URLs(원격) / 파일 경로(로컬)로
모듈 의존성 불러오기 - npm을 사용하지 X
- URLS / file paths 로 모듈 래퍼런스 함
- package.json 모듈 해석 알고리즘을 사용하지 X
- 모든 비동기 액션은 Promise를 통해 반환
- 파일, 네트워크, 환경(변수) 접근에 대한 명시적
권한 설정이 필요함 - 예상치 못한 error(에러) 발생 시 서버 측이 바로 죽음
- 내장 타입스크립트 지원
Deno의 장점
Deno의 최고 장점을 소개하자면
바로 Node.js를 뛰어넘는 최고의
HTTP 서버 속도를 자랑하는 언어입니다.
Deno의 공식문서를 참고하면
현재 까지 Deno는 지금까지 구축된
JavScript 웹 서버 중 가장 빠른
JS-WebServer(자바스크립트-웹서버)입니다.
Deno는 위에서 설명했듯 크롬의 V8을
기반으로 하고 있으며 가장 빠르고
가장 완벽한 Javscript 엔진 위에
구축된 언어입니다.
Deno는 기본적으로 I/O 엑세스를
제공하지 않고 신뢰할 수 없는 코드는
실행하지 않으며 새로운 타사 코드를
감시 하는데 적합한 언어입니다.
Deno는 특정 파일 시스템 디렉터리
네트워크 호스트 및 변수에만
엑세스가 가능하도록 허용 목록을
제공하고 더 안전한 NPM 패키지를
설치할 수 있도록 도와줍니다.
요약
위 설명을 요약하면 다음과 같습니다.
- Deno는 2018년 Ryan Dahl이라는 개발자를 통해
개발된 언어로 Node.js와 같이 크롬의 V8 엔진을 기반으로 하고있다. - Deno와 Node.js의 차이점으로는 ES 모듈을 사용하며
npm을 사용하지 않는다 또한 package.json 모듈을 해석하지 않고
모든 비동기 액션이 Promise로 반환된다.
참고 자료
'백엔드 > deno' 카테고리의 다른 글
[deno] deno 설치와 환경변수 설정하기 (0) | 2023.02.03 |
---|