Akashic Records

Deno(Next-generation JavaScript runtime) 본문

Library

Deno(Next-generation JavaScript runtime)

Andrew's Akashic Records 2023. 12. 1. 13:14
728x90

Next-generation JavaScript runtime

 

Deno는 Node.js의 창시자인 라이언 달이 만든 자바스크립트 및 타입스크립트 런타임입니다. 2018년 5월 13일에 처음 출시되었으며, 보안 및 생산성에 중점을 둡니다.

 

Deno의 탄생 배경은 크게 두 가지로 나눌 수 있습니다.

 

첫째, Node.js의 보안 문제입니다. Node.js는 초기에 보안이 취약하다는 지적을 받아왔습니다. 특히, Node.js는 기본적으로 모든 모듈을 로컬에서 실행하기 때문에, 악성 코드가 포함된 모듈을 실행하면 시스템에 심각한 피해를 줄 수 있습니다.

 

둘째, Node.js의 생산성 문제입니다. Node.js는 모듈 시스템이 복잡하고, 타입스크립트를 지원하지 않기 때문에 개발자가 코드를 작성하고 관리하기가 쉽지 않습니다.

 

Deno는 이러한 문제를 해결하기 위해 다음과 같은 특징을 가지고 있습니다.

  • 샌드박스: Deno는 샌드박스 방식으로 실행되기 때문에 외부로부터의 공격에 안전합니다. 또한, Deno는 모든 라이브러리를 서버에서 제공하기 때문에 사용자의 컴퓨터에 악성 코드가 설치될 위험이 없습니다.

  • TypeScript 기본 지원: Deno는 TypeScript를 기본적으로 지원하기 때문에 타입스크립트 개발자가 보다 쉽게 개발할 수 있습니다.

  • 개선된 모듈 시스템: Deno는 모듈 시스템을 개선하여 개발자가 코드를 보다 쉽게 재사용할 수 있도록 합니다.

Deno는 아직 초기 단계이지만, 빠르게 성장하고 있는 런타임입니다. Deno는 보안 및 생산성에 중점을 두고 있으며, 웹 표준을 준수하기 때문에 다양한 분야에서 활용될 가능성이 높습니다.

 

Deno는 다음과 같은 특징을 가지고 있습니다.

  • 보안: Deno는 샌드박스 방식으로 실행되기 때문에 외부로부터의 공격에 안전합니다. 또한, 데노는 모든 라이브러리를 서버에서 제공하기 때문에 사용자의 컴퓨터에 악성 코드가 설치될 위험이 없습니다.

  • 생산성: Deno는 TypeScript를 기본적으로 지원하기 때문에 타입스크립트 개발자가 보다 쉽게 개발할 수 있습니다. 또한, Deno는 모듈 시스템을 개선하여 개발자가 코드를 보다 쉽게 재사용할 수 있도록 합니다.

  • 웹 표준: Deno는 가능한 한 웹 표준을 준수하기 때문에 다양한 플랫폼에서 사용할 수 있습니다. 또한, Deno는 브라우저와 직접 통신할 수 있어 웹 애플리케이션 개발에 유용합니다.

  • 브라우저 통신: Deno는 브라우저와 직접 통신할 수 있어 웹 애플리케이션 개발에 유용합니다.

Deno의 사용 사례

  • 웹 애플리케이션 개발: Deno는 브라우저와 직접 통신할 수 있기 때문에 웹 애플리케이션 개발에 유용합니다.

  • 서버 애플리케이션 개발: Deno는 보안 및 생산성에 중점을 두고 있기 때문에 서버 애플리케이션 개발에도 유용합니다.

  • IoT 개발: Deno는 샌드박스 방식으로 실행되기 때문에 IoT 개발에도 안전하게 사용할 수 있습니다.

  • 크로스 플랫폼 개발: Deno는 웹 표준을 준수하기 때문에 다양한 플랫폼에서 사용할 수 있기 때문에 크로스 플랫폼 개발에도 유용합니다.

Deno 예시 코드

1. HTTP 서버

const port = 8000;

Deno.listen({ port: port }, (conn) => {
  conn.onMessage = (data) => {
    const decoder = new TextDecoder();
    const request = decoder.decode(data);
    const response = encoder.encode("Hello, World!");

    const responseHeaders = new Headers();
    responseHeaders.set("Content-Type", "text/plain");

    const responseMessage = new Response(response, { headers: responseHeaders });
    conn.respond(responseMessage);
  };
});

이 코드는 Deno.listen() 함수를 사용하여 간단한 HTTP 서버를 만듭니다. Deno.listen() 함수는 포트 번호를 지정하여 서버를 시작합니다. onMessage() 이벤트 핸들러는 클라이언트로부터의 요청을 처리합니다. decode() 함수를 사용하여 요청 데이터를 문자열로 디코딩합니다. encode() 함수를 사용하여 응답 데이터를 문자열로 인코딩합니다. Headers() 클래스를 사용하여 응답 헤더를 생성합니다. Response() 클래스를 사용하여 응답을 생성합니다. respond() 함수를 사용하여 응답을 클라이언트에 보냅니다.

 

이 코드를 실행하려면 다음 명령을 사용합니다.

deno run --allow-net server.ts

이 명령은 server.ts 파일을 실행하고 포트 8000에서 HTTP 서버를 시작합니다.

 

2. 파일 읽고 쓰기

const filename = "test.txt";
const content = "Hello, World!";

Deno.writeFile(filename, content);

const data = await Deno.readFile(filename);
console.log(new TextDecoder().decode(data));

이 코드는 Deno.writeFile() 함수를 사용하여 파일에 데이터를 쓰고 Deno.readFile() 함수를 사용하여 파일에서 데이터를 읽습니다.

Deno.writeFile() 함수는 파일에 데이터를 씁니다. await 키워드를 사용하여 비동기 함수를 동기식으로 실행합니다. new TextDecoder() 함수를 사용하여 데이터를 문자열로 디코딩합니다. console.log() 함수를 사용하여 문자열을 콘솔에 출력합니다.

 

이 코드를 실행하려면 다음 명령을 사용합니다.

deno run --allow-write test.ts

이 명령은 test.ts 파일을 실행하고 test.txt 파일에 "Hello, World!"라는 문자열을 씁니다. 그런 다음 파일에서 데이터를 읽고 콘솔에 출력합니다.

 

3. API에서 데이터 가져오기

const url = "https://jsonplaceholder.typicode.com/posts/1";

fetch(url)
  .then((response) => response.json())
  .then((data) => console.log(data));

이 코드는 fetch() 함수를 사용하여 API에서 데이터를 가져옵니다. fetch() 함수는 HTTP 요청을 보내고 응답을 반환합니다. then() 함수를 사용하여 응답을 처리합니다. json() 함수는 응답을 JSON 객체로 변환합니다. console.log() 함수를 사용하여 JSON 객체를 콘솔에 출력합니다.

 

이 코드를 실행하려면 다음 명령을 사용합니다.

deno run --allow-net get-data.ts

이 명령은 get-data.ts 파일을 실행하고 https://jsonplaceholder.typicode.com/posts/1 API에서 데이터를 가져옵니다. 그런 다음 데이터를 JSON 객체로 변환하고 콘솔에 출력합니다.

이들은 Deno를 사용하는 샘플 코드의 몇 가지 예일 뿐입니다. Deno에 대해 더 알고 싶으시다면 온라인에서 많은 리소스를 찾을 수 있습니다.

728x90

'Library' 카테고리의 다른 글

jQuery 4.0  (0) 2024.02.15
개발자의 행복을 파괴하는 10가지 방법  (0) 2024.01.09
Protocol buffers vs. JSON  (1) 2023.11.30
CPU와 GPU  (0) 2023.11.10
The best open source software of 2023  (0) 2023.11.06
Comments