Deno를 배우고 Node.js를 뛰어넘으세요
게시 됨: 2023-04-20Node.js는 여전히 가장 많이 사용되는 서버 측 JavaScript 런타임이지만 Deno 및 Bun과 같은 대체 런타임은 Node.js 개념을 개선하려고 시도하면서 주목을 받았습니다.
두 가지 새로운 런타임 중 더 인기 있는 Deno는 Node.js에 내재된 일부 보안 문제를 해결하고 TypeScript 및 WebAssembly와 같은 기술에 대한 보다 포괄적인 지원을 제공합니다.
이 기사에서는 Deno 기본 사항을 탐색하고 Node.js 및 Bun과 비교하는 방법을 알아보고 Deno를 사용하여 간단한 HTTP 웹 서버를 구축하는 실습 데모를 따릅니다.
데노란?
개발자는 JavaScript에 익숙해지면서 로컬 시스템에서 프로그래밍할 수 있는 가능성을 보았습니다. 그래서 그들은 브라우저를 사용하지 않고 컴퓨터에서 JavaScript 코드를 실행할 수 있는 환경인 서버 측 런타임을 만들었습니다.
Ryan Dahl은 이 목적을 위해 Node.js를 개발했고 나중에 Deno를 만들어 원래 Node.js 디자인에서 발생한 몇 가지 문제를 해결했습니다. 몇 가지 주목할만한 결함에는 npm과 같은 중앙 집중식 패키지 관리자에 대한 의존성, 표준 라이브러리의 부족 및 느슨한 기본 보안 설정이 포함됩니다.
Deno의 주요 이점 중 일부는 다음과 같습니다.
- 기본 보안 — 사용자는 코드가 네트워크, 파일 시스템 또는 환경에 액세스할 수 있는 권한을 명시적으로 부여해야 합니다.
- TypeScript 및 WebAssembly에 대한 기본 지원 — Deno에서 TypeScript 및 WebAssembly 프로그램을 실행하는 것은 JavaScript 프로그램을 실행하는 것만큼 쉽습니다. 런타임은 JavaScript와 마찬가지로 언어를 컴파일합니다.
- 중앙 집중식 패키지 관리자 — npm이나 Bun의 패키지 관리자와 같은 패키지 저장소에 의존하는 대신 Deno는 URL에서 직접 코드를 가져올 수 있습니다. 이 기능은 GitHub 리포지토리, 서버 또는 CDN을 포함하여 호스팅되는 모든 곳에서 종속성을 로드할 수 있음을 의미합니다. Deno는 또한 더 쉽게 액세스할 수 있도록 스크립트 호스팅 서비스를 제공합니다.
- 웹 표준 준수 — Deno는 브라우저와 동일한 API를 따르는 것을 목표로 합니다. 즉, 브라우저용으로 작성된 코드를 런타임으로 쉽게 변환할 수 있습니다.
대기업과 Slack, Netlify, Supabase와 같은 주요 업계 참여자들은 Deno를 채택했지만 웹 개발자들 사이에서 Deno 채택은 덜 널리 퍼졌습니다. 2022년 Stack Overflow 설문조사에 따르면 설문조사에 응답한 전문 개발자의 1.47%만이 Deno를 사용하고 있는 반면 46.31%는 Node.js를 사용하고 있다고 보고했습니다.
데노는 무엇을 합니까?
다른 JavaScript 런타임과 마찬가지로 Deno를 사용하면 개발자가 서버 측에서 JavaScript를 실행할 수 있습니다. 결과적으로 Deno를 사용하여 다양한 프로그래밍 작업을 수행할 수 있습니다.
Deno는 웹 기반 사용자 요청에 응답하는 서버 응용 프로그램 개발과 같은 작업에서 가장 뛰어납니다. 예를 들어 온라인 서점을 만드는 경우 Deno를 사용하여 PostgreSQL 데이터베이스에서 정보를 가져오고 사용자가 보고자 하는 페이지를 빌드한 다음 렌더링을 위해 브라우저로 보내는 앱을 빌드할 수 있습니다.
터미널을 통해 할 일을 관리하는 명령줄 도구 구축과 같은 저수준 프로그래밍 작업에 Deno를 사용할 수도 있습니다. 즉, Deno를 사용하여 Python이나 Ruby와 같은 언어를 사용하여 달성하는 것과 동일한 목표를 달성할 수 있습니다.
데노 vs 노드
Deno는 Node.js보다 개선되는 것을 목표로 하며 몇 가지 핵심 영역에서 그 약속을 이행합니다. Deno는 다양한 코드 모듈에 대한 보다 세분화된 액세스 구성을 활성화하여 보안을 향상시킵니다. 또한 개발자가 브라우저와 서버 측 모두에서 동일한 코드를 사용할 수 있도록 하는 웹 표준 API 준수에 중점을 둡니다.
서버 측 JavaScript 프로젝트에서 작업하는 팀의 경우 Deno는 Node의 실행 가능한 대안이 되었습니다. 유사한 기능으로 인해 일부 개발자는 Deno가 Node.js를 대체할 수 있다고 확신했지만 몇 가지 중요한 이유 때문에 이러한 가능성은 거의 없습니다.
Node.js는 가장 인기 있는 JavaScript 런타임이며 미리 작성된 패키지의 방대한 생태계와 대규모의 활동적인 사용자 커뮤니티를 모았습니다. 이러한 귀중한 리소스는 Node.js를 매우 매력적인 런타임으로 유지하는 데 도움이 됩니다.
대조적으로 Deno는 새롭습니다. 버전 1.0은 2020년 5월에 출시되었으므로 비교적 적은 수의 개발자가 이를 사용해 볼 시간이 있었습니다. 새로운 도구를 배우면 개발 일정이 길어집니다. 또한 Deno가 많은 단순한 프로젝트에 상당한 이점을 가져다줄지 확실하지 않습니다.
그러나 금융과 같이 보안이 필수적인 영역에서 애플리케이션을 구축하는 경우 Deno의 보안 기능이 가치 있는 전환이 될 수 있습니다.
데노 vs 번
전 Stripe 엔지니어인 Jarred Sumner는 베타 테스트를 위해 2022년 7월에 Bun을 처음 출시했습니다. Bun은 Deno보다 실험적인 런타임이며 Deno와 달리 Node.js와 광범위하게 호환되도록 설계되었습니다.
Bun은 또한 Node.js와 Deno를 능가하는 엄청나게 빠른 성능을 자랑합니다. 주요 기능은 다음과 같은 기능을 가능하게 합니다.
- 더 나은 엔진 — Google의 V8 JavaScript 및 웹 어셈블리 엔진 대신 Bun은 더 빠르고 효율적인 JavaScriptCore를 기본 JavaScript 엔진으로 사용합니다.
- 더 많은 코드 제어 — Bun은 코드 실행에 대해 JavaScript보다 더 강력한 제어를 제공하는 저수준 언어인 Zig로 작성되었습니다.
- 세밀하게 조정된 효율성 — Bun에서 작업하는 팀은 코드 효율성을 보장하기 위해 개발 중에 프로파일링, 벤치마킹 및 최적화에 우선순위를 두었습니다.
Bun은 너무 새롭기 때문에 문제 해결에 도움이 되는 커뮤니티 지원이 상대적으로 적습니다. 그럼에도 불구하고 Bun은 실험하기에 재미있을 수 있습니다. 특히 성능 향상이 필요한 팀은 Bun이 프로젝트에 유용하다는 것을 알 수 있지만 웹 개발은 종종 성능 이외의 요소를 우선시합니다.
데노 시작하기
Deno에 대해 조금 배웠고 다른 인기 있는 JavaScript 런타임과 비교하는 방법을 배웠으므로 이제 Deno가 어떻게 작동하는지 확인할 차례입니다. 이 섹션에서는 "Hello from the server!"로 HTTP 요청에 응답하는 간단한 서버를 Deno에서 만드는 방법을 배웁니다.
데노 설치
공식 문서의 설치 지침을 사용하여 컴퓨터에 Deno를 바이너리 실행 파일로 설치할 수 있습니다. 예를 들어 macOS에서는 brew install deno
명령을 사용하여 Deno를 설치할 수 있습니다.
Deno 작업을 시작하는 또 다른 방법은 다음과 같이 npm 패키지로 설치하는 것입니다.
프로젝트용 폴더를 만들고( deno_example 일 수 있음) 그 안에서 npm init
명령을 실행합니다. (기본 package.json 파일을 생성하므로 init
에서 제안하는 모든 기본 옵션을 수락할 수 있습니다.)
애플리케이션을 초기화한 후 npm install deno-bin
실행하여 Deno 바이너리 패키지를 설치합니다. 이제 npm start
로 애플리케이션을 시작할 수 있도록 package.json 파일을 업데이트할 수 있습니다. 기본 package.json 파일의 "scripts" 개체 속성에 아래의 굵은 줄을 추가합니다.
"scripts": { "start": "deno run --allow-net app.ts", "test": "echo \"Error: no test specified\" && exit 1" },
이 스크립트 추가를 통해 Deno는 네트워크 권한( --allow-net
)으로 app.ts 모듈을 실행할 수 있습니다. Deno로 작업할 때 네트워크 또는 파일 시스템에 대한 액세스를 명시적으로 허용해야 합니다.
이제 포트에서 수신하고 사용자 요청을 처리하는 app.ts 모듈을 만들 준비가 되었습니다.
App.ts 모듈 생성
Deno에서 기본 서버를 만드는 것은 매우 간단합니다. 먼저 app.ts 파일을 만들고 다음 코드를 붙여넣습니다.
import { serve } from "https://deno.land/[email protected]/http/server.ts"; serve((_req) => new Response("Hello from the server!"), { port: 8000 });
이 코드는 공식 Deno.land 웹사이트에 저장된 server.ts Deno library
의 serve
함수를 사용합니다. 이 코드는 들어오는 요청에 대한 기능 serve
를 제공합니다. 핸들러 함수는 "Hello from the server!"로 모든 요청에 응답합니다.
serve
함수는 서비스하려는 포트 번호와 같은 선택적 매개변수도 사용합니다. 여기서 코드 예제는 이러한 매개변수를 사용하여 포트 8000에서 서비스를 제공합니다.
다음으로 npm start
실행하여 서버를 시작합니다. 이렇게 하면 localhost:8000
에서 수신하는 서버가 시작되고 인사말로 요청에 응답합니다.
서버를 완전한 API로 확장하려면 데이터베이스 연결을 추가해야 할 것입니다. Deno 커뮤니티가 MariaDB/MySQL, PostgreSQL, MongoDB 등과 같은 인기 있는 데이터베이스를 지원하는 드라이버를 만들었기 때문에 쉽게 할 수 있습니다.
Node.js 및 Bun요약
런타임은 일반적이고 신뢰할 수 있는 것부터 매우 실험적인 것까지 다양합니다. 프로젝트에 적합한 것을 선택하는 것은 프로젝트와 런타임이 목표를 달성하는 데 어떻게 도움이 되기를 원하는지에 따라 다릅니다.
Node.js는 대부분의 프로젝트에서 잘 작동합니다. 광범위한 문제 해결 시나리오에 도움이 될 수 있는 대규모 생태계와 대규모 커뮤니티가 있습니다.
Deno는 추가 보안과 더 나은 개발자 경험이라는 이점이 있습니다. 동시에 익숙하지 않은 런타임을 배우는 데 드는 시간과 인건비보다 이점이 더 크기 때문에 숙련된 팀에게 가장 적합합니다.
마지막으로 Bun은 대부분의 전문적인 프로젝트에는 너무 실험적이지만 개인 프로젝트를 위해 선택하거나 확장하기에는 독특하고 재미있는 런타임입니다.
대체로 Deno는 Node.js의 이점과 Bun의 실험적 가능성 간의 균형을 제공합니다. Node.js는 대부분의 프로젝트에서 유용한 선택이지만 Deno는 미래에 웹 개발이 어떻게 발전할 것인지에 대한 최전선에 있을 수 있습니다.
한편 Kinsta의 Application Hosting Hobby Tier에 가입하여 지금 코딩하고 나중에 확장하여 Deno 기술을 연습하세요.