{"componentChunkName":"component---src-templates-blog-post-js","path":"/javascript/Deno-완전정복-Node.js를-넘어서는-차세대-런타임/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"e4c80668-7a5b-5889-a5cc-33b5652cd94d","excerpt":"Deno 완전정복 Deno는 Node.js의 창시자인 Ryan Dahl이 만든 차세대 JavaScript/TypeScript 런타임이다. Node.js의 문제점을 해결하고, 현대적인 개발 경험을 제공하기 위해 설계되었다. 이 글은 Deno…","html":"<p><img src=\"/assets/javascript.png\" alt=\"Deno 완전정복\" title=\"Deno 완전정복\"></p>\n<p>Deno는 Node.js의 창시자인 Ryan Dahl이 만든 차세대 JavaScript/TypeScript 런타임이다. Node.js의 문제점을 해결하고, 현대적인 개발 경험을 제공하기 위해 설계되었다. 이 글은 Deno의 핵심 개념부터 실전 활용까지 완벽하게 정리한다.</p>\n<h2 id=\"1-deno란-무엇인가\" style=\"position:relative;\"><a href=\"#1-deno%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80\" aria-label=\"1 deno란 무엇인가 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Deno란 무엇인가?</h2>\n<h3 id=\"1-1-deno의-탄생-배경\" style=\"position:relative;\"><a href=\"#1-1-deno%EC%9D%98-%ED%83%84%EC%83%9D-%EB%B0%B0%EA%B2%BD\" aria-label=\"1 1 deno의 탄생 배경 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-1. Deno의 탄생 배경</h3>\n<p>Deno는 “Node”의 철자를 바꾼 것으로, Node.js의 대안으로 만들어졌다. Ryan Dahl은 2018년 JSConf에서 Node.js의 10가지 후회를 발표하며 Deno 개발을 시작했다.</p>\n<p><strong>Node.js의 주요 문제점:</strong></p>\n<ul>\n<li>복잡한 모듈 시스템 (CommonJS, ES Modules 혼재)</li>\n<li>보안 모델 부재 (모든 권한 기본 허용)</li>\n<li>빌트인 TypeScript 지원 없음</li>\n<li>중앙화된 패키지 관리자 (npm)의 문제점</li>\n</ul>\n<h3 id=\"1-2-deno의-핵심-특징\" style=\"position:relative;\"><a href=\"#1-2-deno%EC%9D%98-%ED%95%B5%EC%8B%AC-%ED%8A%B9%EC%A7%95\" aria-label=\"1 2 deno의 핵심 특징 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-2. Deno의 핵심 특징</h3>\n<p><strong>1. TypeScript 기본 지원</strong></p>\n<ul>\n<li>별도 컴파일 없이 TypeScript 직접 실행</li>\n<li>타입 체크 옵션 제공</li>\n</ul>\n<p><strong>2. 보안 우선 설계</strong></p>\n<ul>\n<li>명시적 권한 요청</li>\n<li>샌드박스 환경</li>\n<li>네트워크, 파일 시스템 접근 제어</li>\n</ul>\n<p><strong>3. 표준 라이브러리</strong></p>\n<ul>\n<li>Web 표준 API 준수</li>\n<li>풍부한 빌트인 모듈</li>\n</ul>\n<p><strong>4. 단일 실행 파일</strong></p>\n<ul>\n<li>별도 패키지 매니저 불필요</li>\n<li>URL 기반 모듈 임포트</li>\n</ul>\n<p><strong>5. 최신 JavaScript 기능</strong></p>\n<ul>\n<li>ES Modules 기본 지원</li>\n<li>Top-level await 지원</li>\n<li>최신 표준 준수</li>\n</ul>\n<h2 id=\"2-deno-vs-nodejs-비교\" style=\"position:relative;\"><a href=\"#2-deno-vs-nodejs-%EB%B9%84%EA%B5%90\" aria-label=\"2 deno vs nodejs 비교 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. Deno vs Node.js 비교</h2>\n<h3 id=\"2-1-핵심-차이점\" style=\"position:relative;\"><a href=\"#2-1-%ED%95%B5%EC%8B%AC-%EC%B0%A8%EC%9D%B4%EC%A0%90\" aria-label=\"2 1 핵심 차이점 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-1. 핵심 차이점</h3>\n<table>\n<thead>\n<tr>\n<th>항목</th>\n<th>Node.js</th>\n<th>Deno</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>언어</strong></td>\n<td>JavaScript</td>\n<td>JavaScript, TypeScript</td>\n</tr>\n<tr>\n<td><strong>모듈 시스템</strong></td>\n<td>CommonJS, ES Modules</td>\n<td>ES Modules만</td>\n</tr>\n<tr>\n<td><strong>패키지 관리</strong></td>\n<td>npm</td>\n<td>URL 기반 (npm 호환)</td>\n</tr>\n<tr>\n<td><strong>보안</strong></td>\n<td>모든 권한 허용</td>\n<td>명시적 권한 요청</td>\n</tr>\n<tr>\n<td><strong>표준 라이브러리</strong></td>\n<td>제한적</td>\n<td>풍부한 빌트인</td>\n</tr>\n<tr>\n<td><strong>설치</strong></td>\n<td>Node.js 설치 필요</td>\n<td>단일 실행 파일</td>\n</tr>\n<tr>\n<td><strong>설정 파일</strong></td>\n<td>package.json 필요</td>\n<td>선택적 (deno.json)</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"2-2-코드-비교-예시\" style=\"position:relative;\"><a href=\"#2-2-%EC%BD%94%EB%93%9C-%EB%B9%84%EA%B5%90-%EC%98%88%EC%8B%9C\" aria-label=\"2 2 코드 비교 예시 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-2. 코드 비교 예시</h3>\n<p><strong>Node.js 방식:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// package.json 필요</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token string-property property\">\"dependencies\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token string-property property\">\"express\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^4.18.0\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// 코드</span>\n<span class=\"token keyword\">const</span> express <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'express'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">express</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>Deno 방식:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token comment\">// package.json 불필요</span>\n<span class=\"token keyword\">import</span> express <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/x/express@4.18.2/mod.ts\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">express</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"2-3-보안-모델-비교\" style=\"position:relative;\"><a href=\"#2-3-%EB%B3%B4%EC%95%88-%EB%AA%A8%EB%8D%B8-%EB%B9%84%EA%B5%90\" aria-label=\"2 3 보안 모델 비교 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-3. 보안 모델 비교</h3>\n<p><strong>Node.js:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// 모든 권한이 기본적으로 허용됨</span>\n<span class=\"token keyword\">const</span> fs <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'fs'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nfs<span class=\"token punctuation\">.</span><span class=\"token function\">readFile</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/etc/passwd'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">err<span class=\"token punctuation\">,</span> data</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// 파일 읽기 가능 (위험)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>Deno:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token comment\">// 명시적 권한 요청 필요</span>\n<span class=\"token comment\">// 실행: deno run --allow-read /etc/passwd script.ts</span>\n\n<span class=\"token keyword\">const</span> file <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Deno<span class=\"token punctuation\">.</span><span class=\"token function\">readTextFile</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/etc/passwd'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// 권한 없이 실행하면 에러 발생</span></code></pre></div>\n<h2 id=\"3-deno-설치-및-시작하기\" style=\"position:relative;\"><a href=\"#3-deno-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0\" aria-label=\"3 deno 설치 및 시작하기 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. Deno 설치 및 시작하기</h2>\n<h3 id=\"3-1-설치-방법\" style=\"position:relative;\"><a href=\"#3-1-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95\" aria-label=\"3 1 설치 방법 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-1. 설치 방법</h3>\n<p><strong>macOS/Linux:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">curl</span> <span class=\"token parameter variable\">-fsSL</span> https://deno.land/install.sh <span class=\"token operator\">|</span> <span class=\"token function\">sh</span></code></pre></div>\n<p><strong>Windows (PowerShell):</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"powershell\"><pre class=\"language-powershell\"><code class=\"language-powershell\"><span class=\"token function\">irm</span> https:<span class=\"token operator\">/</span><span class=\"token operator\">/</span>deno<span class=\"token punctuation\">.</span>land/install<span class=\"token punctuation\">.</span>ps1 <span class=\"token punctuation\">|</span> <span class=\"token function\">iex</span></code></pre></div>\n<p><strong>Homebrew (macOS):</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">brew <span class=\"token function\">install</span> deno</code></pre></div>\n<p><strong>설치 확인:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">deno <span class=\"token parameter variable\">--version</span></code></pre></div>\n<h3 id=\"3-2-첫-번째-deno-프로그램\" style=\"position:relative;\"><a href=\"#3-2-%EC%B2%AB-%EB%B2%88%EC%A7%B8-deno-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8\" aria-label=\"3 2 첫 번째 deno 프로그램 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-2. 첫 번째 Deno 프로그램</h3>\n<p><strong>hello.ts:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello, Deno!\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>실행:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">deno run hello.ts</code></pre></div>\n<p><strong>TypeScript 예시:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token comment\">// types.ts</span>\n<span class=\"token keyword\">interface</span> <span class=\"token class-name\">User</span> <span class=\"token punctuation\">{</span>\n  name<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n  age<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> user<span class=\"token operator\">:</span> User <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  name<span class=\"token operator\">:</span> <span class=\"token string\">\"Deno\"</span><span class=\"token punctuation\">,</span>\n  age<span class=\"token operator\">:</span> <span class=\"token number\">5</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>user<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"4-deno의-핵심-기능\" style=\"position:relative;\"><a href=\"#4-deno%EC%9D%98-%ED%95%B5%EC%8B%AC-%EA%B8%B0%EB%8A%A5\" aria-label=\"4 deno의 핵심 기능 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. Deno의 핵심 기능</h2>\n<h3 id=\"4-1-url-기반-모듈-임포트\" style=\"position:relative;\"><a href=\"#4-1-url-%EA%B8%B0%EB%B0%98-%EB%AA%A8%EB%93%88-%EC%9E%84%ED%8F%AC%ED%8A%B8\" aria-label=\"4 1 url 기반 모듈 임포트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-1. URL 기반 모듈 임포트</h3>\n<p>Deno는 npm 대신 URL을 사용해 모듈을 임포트한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token comment\">// 표준 라이브러리</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> serve <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/std@0.208.0/http/server.ts\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 외부 모듈</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> v4 <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/std@0.208.0/uuid/mod.ts\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 로컬 파일</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> helper <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./helper.ts\"</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>장점:</strong></p>\n<ul>\n<li>package.json 불필요</li>\n<li>버전 관리 명확</li>\n<li>중앙화된 저장소 불필요</li>\n</ul>\n<p><strong>단점:</strong></p>\n<ul>\n<li>오프라인 환경에서 어려움</li>\n<li>URL 관리 복잡</li>\n</ul>\n<p><strong>해결책: deps.ts 파일 사용:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token comment\">// deps.ts - 의존성 중앙 관리</span>\n<span class=\"token keyword\">export</span> <span class=\"token punctuation\">{</span> serve <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/std@0.208.0/http/server.ts\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">export</span> <span class=\"token punctuation\">{</span> v4 <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/std@0.208.0/uuid/mod.ts\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 다른 파일에서</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> serve<span class=\"token punctuation\">,</span> v4 <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./deps.ts\"</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"4-2-보안-모델\" style=\"position:relative;\"><a href=\"#4-2-%EB%B3%B4%EC%95%88-%EB%AA%A8%EB%8D%B8\" aria-label=\"4 2 보안 모델 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-2. 보안 모델</h3>\n<p>Deno는 기본적으로 모든 권한을 차단한다. 필요한 권한을 명시적으로 요청해야 한다.</p>\n<p><strong>권한 플래그:</strong></p>\n<ul>\n<li><code class=\"language-text\">--allow-read</code>: 파일 읽기</li>\n<li><code class=\"language-text\">--allow-write</code>: 파일 쓰기</li>\n<li><code class=\"language-text\">--allow-net</code>: 네트워크 접근</li>\n<li><code class=\"language-text\">--allow-env</code>: 환경 변수 접근</li>\n<li><code class=\"language-text\">--allow-run</code>: 하위 프로세스 실행</li>\n<li><code class=\"language-text\">--allow-all</code> 또는 <code class=\"language-text\">-A</code>: 모든 권한 허용</li>\n</ul>\n<p><strong>예시:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token comment\">// 파일 읽기</span>\n<span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Deno<span class=\"token punctuation\">.</span><span class=\"token function\">readTextFile</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"./data.txt\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token comment\"># 권한 없이 실행</span>\ndeno run script.ts\n<span class=\"token comment\"># Error: Requires read access to \"./data.txt\"</span>\n\n<span class=\"token comment\"># 권한과 함께 실행</span>\ndeno run --allow-read script.ts</code></pre></div>\n<p><strong>특정 경로만 허용:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">deno run --allow-read<span class=\"token operator\">=</span>./data script.ts</code></pre></div>\n<h3 id=\"4-3-표준-라이브러리\" style=\"position:relative;\"><a href=\"#4-3-%ED%91%9C%EC%A4%80-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC\" aria-label=\"4 3 표준 라이브러리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-3. 표준 라이브러리</h3>\n<p>Deno는 풍부한 표준 라이브러리를 제공한다.</p>\n<p><strong>HTTP 서버:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> serve <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/std@0.208.0/http/server.ts\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">serve</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Response</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello, Deno!\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n    headers<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> <span class=\"token string-property property\">\"content-type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"text/plain\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> port<span class=\"token operator\">:</span> <span class=\"token number\">8000</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>파일 시스템:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> readAll <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/std@0.208.0/streams/mod.ts\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> file <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Deno<span class=\"token punctuation\">.</span><span class=\"token function\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"./data.txt\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">readAll</span><span class=\"token punctuation\">(</span>file<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nfile<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>날짜/시간:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> format <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/std@0.208.0/datetime/mod.ts\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> now <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token function\">format</span><span class=\"token punctuation\">(</span>now<span class=\"token punctuation\">,</span> <span class=\"token string\">\"yyyy-MM-dd HH:mm:ss\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>UUID 생성:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> v4 <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/std@0.208.0/uuid/mod.ts\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> id <span class=\"token operator\">=</span> v4<span class=\"token punctuation\">.</span><span class=\"token function\">generate</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"4-4-web-표준-api\" style=\"position:relative;\"><a href=\"#4-4-web-%ED%91%9C%EC%A4%80-api\" aria-label=\"4 4 web 표준 api permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-4. Web 표준 API</h3>\n<p>Deno는 브라우저 Web API를 지원한다.</p>\n<p><strong>Fetch API:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> response <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"https://api.example.com/data\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> response<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>WebSocket:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> ws <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">WebSocket</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"wss://echo.websocket.org\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nws<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">onopen</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  ws<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello, Deno!\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\nws<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">onmessage</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Received:\"</span><span class=\"token punctuation\">,</span> event<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>Crypto API:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">TextEncoder</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">encode</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello, Deno!\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> hashBuffer <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> crypto<span class=\"token punctuation\">.</span>subtle<span class=\"token punctuation\">.</span><span class=\"token function\">digest</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"SHA-256\"</span><span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> hashArray <span class=\"token operator\">=</span> <span class=\"token builtin\">Array</span><span class=\"token punctuation\">.</span><span class=\"token function\">from</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Uint8Array</span><span class=\"token punctuation\">(</span>hashBuffer<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> hashHex <span class=\"token operator\">=</span> hashArray<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span>b <span class=\"token operator\">=></span> b<span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token number\">16</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">padStart</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'0'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">join</span><span class=\"token punctuation\">(</span><span class=\"token string\">''</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>hashHex<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"5-실전-프로젝트-구축\" style=\"position:relative;\"><a href=\"#5-%EC%8B%A4%EC%A0%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%B6%95\" aria-label=\"5 실전 프로젝트 구축 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. 실전 프로젝트 구축</h2>\n<h3 id=\"5-1-rest-api-서버-만들기\" style=\"position:relative;\"><a href=\"#5-1-rest-api-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0\" aria-label=\"5 1 rest api 서버 만들기 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-1. REST API 서버 만들기</h3>\n<p><strong>server.ts:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> serve <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/std@0.208.0/http/server.ts\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">interface</span> <span class=\"token class-name\">User</span> <span class=\"token punctuation\">{</span>\n  id<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n  name<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n  email<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">let</span> users<span class=\"token operator\">:</span> User<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token punctuation\">{</span> id<span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> name<span class=\"token operator\">:</span> <span class=\"token string\">\"Alice\"</span><span class=\"token punctuation\">,</span> email<span class=\"token operator\">:</span> <span class=\"token string\">\"alice@example.com\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span> id<span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> name<span class=\"token operator\">:</span> <span class=\"token string\">\"Bob\"</span><span class=\"token punctuation\">,</span> email<span class=\"token operator\">:</span> <span class=\"token string\">\"bob@example.com\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">async</span> <span class=\"token keyword\">function</span> <span class=\"token function\">handler</span><span class=\"token punctuation\">(</span>req<span class=\"token operator\">:</span> Request<span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">Promise</span><span class=\"token operator\">&lt;</span>Response<span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> url <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\"><span class=\"token constant\">URL</span></span><span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token comment\">// GET /users</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>method <span class=\"token operator\">===</span> <span class=\"token string\">\"GET\"</span> <span class=\"token operator\">&amp;&amp;</span> url<span class=\"token punctuation\">.</span>pathname <span class=\"token operator\">===</span> <span class=\"token string\">\"/users\"</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Response</span><span class=\"token punctuation\">(</span><span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>users<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n      headers<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> <span class=\"token string-property property\">\"content-type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"application/json\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token comment\">// GET /users/:id</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>method <span class=\"token operator\">===</span> <span class=\"token string\">\"GET\"</span> <span class=\"token operator\">&amp;&amp;</span> url<span class=\"token punctuation\">.</span>pathname<span class=\"token punctuation\">.</span><span class=\"token function\">startsWith</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/users/\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> id <span class=\"token operator\">=</span> <span class=\"token function\">parseInt</span><span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">.</span>pathname<span class=\"token punctuation\">.</span><span class=\"token function\">split</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> user <span class=\"token operator\">=</span> users<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>u <span class=\"token operator\">=></span> u<span class=\"token punctuation\">.</span>id <span class=\"token operator\">===</span> id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>user<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Response</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"User not found\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> status<span class=\"token operator\">:</span> <span class=\"token number\">404</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    \n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Response</span><span class=\"token punctuation\">(</span><span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>user<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n      headers<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> <span class=\"token string-property property\">\"content-type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"application/json\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token comment\">// POST /users</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>method <span class=\"token operator\">===</span> <span class=\"token string\">\"POST\"</span> <span class=\"token operator\">&amp;&amp;</span> url<span class=\"token punctuation\">.</span>pathname <span class=\"token operator\">===</span> <span class=\"token string\">\"/users\"</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> body <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> req<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> newUser<span class=\"token operator\">:</span> User <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n      id<span class=\"token operator\">:</span> users<span class=\"token punctuation\">.</span>length <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n      name<span class=\"token operator\">:</span> body<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">,</span>\n      email<span class=\"token operator\">:</span> body<span class=\"token punctuation\">.</span>email<span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n    users<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span>newUser<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Response</span><span class=\"token punctuation\">(</span><span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>newUser<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n      status<span class=\"token operator\">:</span> <span class=\"token number\">201</span><span class=\"token punctuation\">,</span>\n      headers<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> <span class=\"token string-property property\">\"content-type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"application/json\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Response</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Not Found\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> status<span class=\"token operator\">:</span> <span class=\"token number\">404</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token function\">serve</span><span class=\"token punctuation\">(</span>handler<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> port<span class=\"token operator\">:</span> <span class=\"token number\">8000</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Server running on http://localhost:8000\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>실행:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">deno run --allow-net server.ts</code></pre></div>\n<h3 id=\"5-2-파일-처리-예시\" style=\"position:relative;\"><a href=\"#5-2-%ED%8C%8C%EC%9D%BC-%EC%B2%98%EB%A6%AC-%EC%98%88%EC%8B%9C\" aria-label=\"5 2 파일 처리 예시 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-2. 파일 처리 예시</h3>\n<p><strong>file-handler.ts:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token comment\">// 파일 읽기</span>\n<span class=\"token keyword\">const</span> content <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Deno<span class=\"token punctuation\">.</span><span class=\"token function\">readTextFile</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"./data.txt\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>content<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 파일 쓰기</span>\n<span class=\"token keyword\">await</span> Deno<span class=\"token punctuation\">.</span><span class=\"token function\">writeTextFile</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"./output.txt\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Hello, Deno!\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 파일 정보 확인</span>\n<span class=\"token keyword\">const</span> fileInfo <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Deno<span class=\"token punctuation\">.</span><span class=\"token function\">stat</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"./data.txt\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Size:\"</span><span class=\"token punctuation\">,</span> fileInfo<span class=\"token punctuation\">.</span>size<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Modified:\"</span><span class=\"token punctuation\">,</span> fileInfo<span class=\"token punctuation\">.</span>mtime<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 디렉토리 읽기</span>\n<span class=\"token keyword\">for</span> <span class=\"token keyword\">await</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">const</span> dirEntry <span class=\"token keyword\">of</span> Deno<span class=\"token punctuation\">.</span><span class=\"token function\">readDir</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"./\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>dirEntry<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">,</span> dirEntry<span class=\"token punctuation\">.</span>isFile <span class=\"token operator\">?</span> <span class=\"token string\">\"file\"</span> <span class=\"token operator\">:</span> <span class=\"token string\">\"dir\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>실행:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">deno run --allow-read --allow-write file-handler.ts</code></pre></div>\n<h3 id=\"5-3-환경-변수-사용\" style=\"position:relative;\"><a href=\"#5-3-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EC%82%AC%EC%9A%A9\" aria-label=\"5 3 환경 변수 사용 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-3. 환경 변수 사용</h3>\n<p><strong>env-example.ts:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token comment\">// 환경 변수 읽기</span>\n<span class=\"token keyword\">const</span> apiKey <span class=\"token operator\">=</span> Deno<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"API_KEY\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> port <span class=\"token operator\">=</span> Deno<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PORT\"</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token string\">\"8000\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"API Key:\"</span><span class=\"token punctuation\">,</span> apiKey<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Port:\"</span><span class=\"token punctuation\">,</span> port<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>실행:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token assign-left variable\">API_KEY</span><span class=\"token operator\">=</span>secret123 <span class=\"token assign-left variable\">PORT</span><span class=\"token operator\">=</span><span class=\"token number\">3000</span> deno run --allow-env env-example.ts</code></pre></div>\n<h3 id=\"5-4-외부-api-호출\" style=\"position:relative;\"><a href=\"#5-4-%EC%99%B8%EB%B6%80-api-%ED%98%B8%EC%B6%9C\" aria-label=\"5 4 외부 api 호출 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-4. 외부 API 호출</h3>\n<p><strong>api-client.ts:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">async</span> <span class=\"token keyword\">function</span> <span class=\"token function\">fetchUserData</span><span class=\"token punctuation\">(</span>userId<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> response <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">https://api.example.com/users/</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>userId<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>response<span class=\"token punctuation\">.</span>ok<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Error</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">HTTP error! status: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>response<span class=\"token punctuation\">.</span>status<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    \n    <span class=\"token keyword\">const</span> user <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> response<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> user<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Error fetching user:\"</span><span class=\"token punctuation\">,</span> error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">throw</span> error<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// 사용</span>\n<span class=\"token keyword\">const</span> user <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetchUserData</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>user<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>실행:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">deno run --allow-net api-client.ts</code></pre></div>\n<h2 id=\"6-deno-프로젝트-구조\" style=\"position:relative;\"><a href=\"#6-deno-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%A1%B0\" aria-label=\"6 deno 프로젝트 구조 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. Deno 프로젝트 구조</h2>\n<h3 id=\"6-1-권장-프로젝트-구조\" style=\"position:relative;\"><a href=\"#6-1-%EA%B6%8C%EC%9E%A5-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%A1%B0\" aria-label=\"6 1 권장 프로젝트 구조 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6-1. 권장 프로젝트 구조</h3>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">my-deno-project/\n├── src/\n│   ├── main.ts          # 진입점\n│   ├── routes/\n│   │   └── users.ts     # 라우트\n│   ├── models/\n│   │   └── user.ts      # 데이터 모델\n│   └── utils/\n│       └── helpers.ts   # 유틸리티\n├── deps.ts              # 의존성 중앙 관리\n├── deno.json             # Deno 설정 (선택적)\n└── README.md</code></pre></div>\n<h3 id=\"6-2-denojson-설정\" style=\"position:relative;\"><a href=\"#6-2-denojson-%EC%84%A4%EC%A0%95\" aria-label=\"6 2 denojson 설정 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6-2. deno.json 설정</h3>\n<p><strong>deno.json:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"tasks\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"dev\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"deno run --allow-net --allow-read --allow-write src/main.ts\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"start\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"deno run --allow-net src/main.ts\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"test\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"deno test --allow-net\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"imports\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"std/\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://deno.land/std@0.208.0/\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"express\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://deno.land/x/express@4.18.2/mod.ts\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"fmt\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"useTabs\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"lineWidth\"</span><span class=\"token operator\">:</span> <span class=\"token number\">80</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"indentWidth\"</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"lint\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"rules\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token property\">\"tags\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"recommended\"</span><span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>작업 실행:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">deno task dev\ndeno task start\ndeno task <span class=\"token builtin class-name\">test</span></code></pre></div>\n<h2 id=\"7-deno-생태계\" style=\"position:relative;\"><a href=\"#7-deno-%EC%83%9D%ED%83%9C%EA%B3%84\" aria-label=\"7 deno 생태계 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. Deno 생태계</h2>\n<h3 id=\"7-1-인기-프레임워크\" style=\"position:relative;\"><a href=\"#7-1-%EC%9D%B8%EA%B8%B0-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC\" aria-label=\"7 1 인기 프레임워크 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7-1. 인기 프레임워크</h3>\n<p><strong>Fresh (Deno의 Next.js):</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> FreshContext <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"$fresh/server.ts\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">function</span> <span class=\"token function\">Page</span><span class=\"token punctuation\">(</span>ctx<span class=\"token operator\">:</span> FreshContext<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token operator\">&lt;</span>h1<span class=\"token operator\">></span>Hello<span class=\"token punctuation\">,</span> Fresh<span class=\"token operator\">!</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h1<span class=\"token operator\">></span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>Oak (Express 스타일):</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Application <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/x/oak@v12.6.1/mod.ts\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Application</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\napp<span class=\"token punctuation\">.</span><span class=\"token function\">use</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>ctx<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  ctx<span class=\"token punctuation\">.</span>response<span class=\"token punctuation\">.</span>body <span class=\"token operator\">=</span> <span class=\"token string\">\"Hello, Oak!\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">await</span> app<span class=\"token punctuation\">.</span><span class=\"token function\">listen</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> port<span class=\"token operator\">:</span> <span class=\"token number\">8000</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"7-2-유용한-모듈\" style=\"position:relative;\"><a href=\"#7-2-%EC%9C%A0%EC%9A%A9%ED%95%9C-%EB%AA%A8%EB%93%88\" aria-label=\"7 2 유용한 모듈 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7-2. 유용한 모듈</h3>\n<p><strong>데이터베이스:</strong></p>\n<ul>\n<li><strong>DenoDB</strong>: ORM</li>\n<li><strong>Postgres.js</strong>: PostgreSQL 클라이언트</li>\n</ul>\n<p><strong>인증:</strong></p>\n<ul>\n<li><strong>djwt</strong>: JWT 토큰</li>\n<li><strong>bcrypt</strong>: 비밀번호 해싱</li>\n</ul>\n<p><strong>유틸리티:</strong></p>\n<ul>\n<li><strong>std/uuid</strong>: UUID 생성</li>\n<li><strong>std/datetime</strong>: 날짜/시간 처리</li>\n<li><strong>std/path</strong>: 경로 처리</li>\n</ul>\n<h2 id=\"8-nodejs에서-deno로-마이그레이션\" style=\"position:relative;\"><a href=\"#8-nodejs%EC%97%90%EC%84%9C-deno%EB%A1%9C-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98\" aria-label=\"8 nodejs에서 deno로 마이그레이션 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8. Node.js에서 Deno로 마이그레이션</h2>\n<h3 id=\"8-1-마이그레이션-체크리스트\" style=\"position:relative;\"><a href=\"#8-1-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\" aria-label=\"8 1 마이그레이션 체크리스트 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8-1. 마이그레이션 체크리스트</h3>\n<p><strong>1. 모듈 시스템 변경</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// Node.js</span>\n<span class=\"token keyword\">const</span> express <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'express'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Deno</span>\n<span class=\"token keyword\">import</span> express <span class=\"token keyword\">from</span> <span class=\"token string\">\"https://deno.land/x/express@4.18.2/mod.ts\"</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>2. 파일 시스템 API 변경</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// Node.js</span>\n<span class=\"token keyword\">const</span> fs <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'fs'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> fs<span class=\"token punctuation\">.</span><span class=\"token function\">readFileSync</span><span class=\"token punctuation\">(</span><span class=\"token string\">'file.txt'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'utf8'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Deno</span>\n<span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Deno<span class=\"token punctuation\">.</span><span class=\"token function\">readTextFile</span><span class=\"token punctuation\">(</span><span class=\"token string\">'file.txt'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>3. 환경 변수</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// Node.js</span>\n<span class=\"token keyword\">const</span> port <span class=\"token operator\">=</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">PORT</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Deno</span>\n<span class=\"token keyword\">const</span> port <span class=\"token operator\">=</span> Deno<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PORT\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"8-2-npm-패키지-사용하기\" style=\"position:relative;\"><a href=\"#8-2-npm-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0\" aria-label=\"8 2 npm 패키지 사용하기 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8-2. npm 패키지 사용하기</h3>\n<p>Deno는 npm 패키지를 사용할 수 있다.</p>\n<p><strong>npm: 패키지 사용:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> express <span class=\"token keyword\">from</span> <span class=\"token string\">\"npm:express@4.18.2\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">express</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\napp<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">,</span> res<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  res<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello from npm package!\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>실행:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">deno run --allow-net --allow-read npm:express script.ts</code></pre></div>\n<h2 id=\"9-deno의-장단점\" style=\"position:relative;\"><a href=\"#9-deno%EC%9D%98-%EC%9E%A5%EB%8B%A8%EC%A0%90\" aria-label=\"9 deno의 장단점 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9. Deno의 장단점</h2>\n<h3 id=\"9-1-장점\" style=\"position:relative;\"><a href=\"#9-1-%EC%9E%A5%EC%A0%90\" aria-label=\"9 1 장점 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9-1. 장점</h3>\n<p><strong>보안</strong></p>\n<ul>\n<li>명시적 권한 요청</li>\n<li>샌드박스 환경</li>\n<li>기본적으로 안전한 실행</li>\n</ul>\n<p><strong>개발 경험</strong></p>\n<ul>\n<li>TypeScript 기본 지원</li>\n<li>최신 JavaScript 기능</li>\n<li>Web 표준 API 지원</li>\n</ul>\n<p><strong>단순성</strong></p>\n<ul>\n<li>단일 실행 파일</li>\n<li>package.json 불필요</li>\n<li>표준 라이브러리 풍부</li>\n</ul>\n<h3 id=\"9-2-단점\" style=\"position:relative;\"><a href=\"#9-2-%EB%8B%A8%EC%A0%90\" aria-label=\"9 2 단점 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9-2. 단점</h3>\n<p><strong>생태계</strong></p>\n<ul>\n<li>Node.js보다 작은 생태계</li>\n<li>일부 npm 패키지 호환성 문제</li>\n<li>커뮤니티 규모 작음</li>\n</ul>\n<p><strong>성능</strong></p>\n<ul>\n<li>일부 시나리오에서 Node.js보다 느림</li>\n<li>초기 시작 시간이 다소 느림</li>\n</ul>\n<p><strong>학습 곡선</strong></p>\n<ul>\n<li>새로운 개념 학습 필요</li>\n<li>URL 기반 모듈 시스템 적응 필요</li>\n</ul>\n<h2 id=\"10-언제-deno를-사용해야-할까\" style=\"position:relative;\"><a href=\"#10-%EC%96%B8%EC%A0%9C-deno%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C\" aria-label=\"10 언제 deno를 사용해야 할까 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10. 언제 Deno를 사용해야 할까?</h2>\n<h3 id=\"적합한-경우\" style=\"position:relative;\"><a href=\"#%EC%A0%81%ED%95%A9%ED%95%9C-%EA%B2%BD%EC%9A%B0\" aria-label=\"적합한 경우 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>적합한 경우</h3>\n<p><strong>1. 새로운 프로젝트</strong></p>\n<ul>\n<li>TypeScript 기본 지원 필요</li>\n<li>보안이 중요한 프로젝트</li>\n<li>최신 표준 사용 원함</li>\n</ul>\n<p><strong>2. 스크립트 및 도구</strong></p>\n<ul>\n<li>간단한 유틸리티 스크립트</li>\n<li>CLI 도구 개발</li>\n<li>자동화 스크립트</li>\n</ul>\n<p><strong>3. 학습 목적</strong></p>\n<ul>\n<li>최신 JavaScript/TypeScript 학습</li>\n<li>Web 표준 이해</li>\n<li>보안 모델 학습</li>\n</ul>\n<h3 id=\"부적합한-경우\" style=\"position:relative;\"><a href=\"#%EB%B6%80%EC%A0%81%ED%95%A9%ED%95%9C-%EA%B2%BD%EC%9A%B0\" aria-label=\"부적합한 경우 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>부적합한 경우</h3>\n<p><strong>1. 기존 Node.js 프로젝트</strong></p>\n<ul>\n<li>레거시 코드 마이그레이션 비용 높음</li>\n<li>npm 패키지 의존성 많음</li>\n</ul>\n<p><strong>2. 엔터프라이즈 환경</strong></p>\n<ul>\n<li>안정성 검증 필요</li>\n<li>대규모 팀 협업</li>\n<li>기존 인프라와 통합 필요</li>\n</ul>\n<h2 id=\"faq\" style=\"position:relative;\"><a href=\"#faq\" aria-label=\"faq permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>FAQ</h2>\n<p><strong>Q: Deno가 Node.js를 대체할까요?</strong><br>\nA: 단기적으로는 아니지만, 장기적으로는 가능성이 있다. 특히 새로운 프로젝트와 보안이 중요한 프로젝트에서 Deno의 장점이 두드러진다.</p>\n<p><strong>Q: npm 패키지를 사용할 수 있나요?</strong><br>\nA: 네, <code class=\"language-text\">npm:</code> 프리픽스를 사용하면 npm 패키지를 사용할 수 있다. 하지만 모든 패키지가 호환되는 것은 아니다.</p>\n<p><strong>Q: Deno의 성능은 Node.js보다 좋나요?</strong><br>\nA: 상황에 따라 다르다. 일부 작업에서는 Deno가 빠르지만, 전체적으로는 Node.js가 더 성숙하고 최적화되어 있다.</p>\n<p><strong>Q: 프로덕션에서 사용해도 되나요?</strong><br>\nA: 가능하지만 신중하게 결정해야 한다. Deno는 아직 상대적으로 새로운 기술이며, 엔터프라이즈 환경에서는 충분한 검증이 필요하다.</p>\n<p><strong>Q: TypeScript를 모르면 Deno를 사용할 수 있나요?</strong><br>\nA: 네, JavaScript로도 작성할 수 있다. 하지만 Deno의 강점 중 하나가 TypeScript 기본 지원이므로, TypeScript를 배우는 것을 추천한다.</p>\n<p><strong>Q: Deno로 웹 프레임워크를 만들 수 있나요?</strong><br>\nA: 네, Fresh, Oak 등 여러 프레임워크가 있다. Next.js나 Express와 유사한 개발 경험을 제공한다.</p>\n<h2 id=\"결론-차세대-런타임의-가능성\" style=\"position:relative;\"><a href=\"#%EA%B2%B0%EB%A1%A0-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84%EC%9D%98-%EA%B0%80%EB%8A%A5%EC%84%B1\" aria-label=\"결론 차세대 런타임의 가능성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>결론: 차세대 런타임의 가능성</h2>\n<p>Deno는 Node.js의 문제점을 해결하고 현대적인 개발 경험을 제공하는 차세대 런타임이다. 보안, TypeScript 지원, Web 표준 준수 등에서 강점을 보인다.</p>\n<p>아직 생태계가 작고 성능 최적화가 필요한 부분이 있지만, 새로운 프로젝트나 학습 목적으로는 충분히 고려할 만한 가치가 있다. 특히 보안이 중요한 프로젝트나 최신 표준을 활용하고 싶은 개발자에게 Deno는 좋은 선택이 될 수 있다.</p>\n<p>Node.js와 Deno는 경쟁 관계라기보다는 서로 다른 목적을 가진 도구다. 프로젝트의 요구사항에 맞는 도구를 선택하는 것이 중요하다.</p>\n<h2 id=\"deno-학습-후-프로젝트-기회\" style=\"position:relative;\"><a href=\"#deno-%ED%95%99%EC%8A%B5-%ED%9B%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%ED%9A%8C\" aria-label=\"deno 학습 후 프로젝트 기회 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Deno 학습 후 프로젝트 기회</h2>\n<p>Deno를 마스터한 후, 실제 프로젝트에 적용하고 싶다면 <a href=\"https://bluebutton.kr/\">블루버튼</a> 같은 프로젝트 매칭 플랫폼을 활용할 수 있다. Deno를 활용한 백엔드 개발, API 서버 구축, CLI 도구 개발 등 다양한 프로젝트에서 실전 경험을 쌓을 수 있다. 특히 보안이 중요한 프로젝트나 최신 기술 스택을 원하는 프로젝트에서 Deno의 강점을 발휘할 수 있다.</p>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#1-deno%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80\">1. Deno란 무엇인가?</a></p>\n<ul>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#1-1-deno%EC%9D%98-%ED%83%84%EC%83%9D-%EB%B0%B0%EA%B2%BD\">1-1. Deno의 탄생 배경</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#1-2-deno%EC%9D%98-%ED%95%B5%EC%8B%AC-%ED%8A%B9%EC%A7%95\">1-2. Deno의 핵심 특징</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#2-deno-vs-nodejs-%EB%B9%84%EA%B5%90\">2. Deno vs Node.js 비교</a></p>\n<ul>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#2-1-%ED%95%B5%EC%8B%AC-%EC%B0%A8%EC%9D%B4%EC%A0%90\">2-1. 핵심 차이점</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#2-2-%EC%BD%94%EB%93%9C-%EB%B9%84%EA%B5%90-%EC%98%88%EC%8B%9C\">2-2. 코드 비교 예시</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#2-3-%EB%B3%B4%EC%95%88-%EB%AA%A8%EB%8D%B8-%EB%B9%84%EA%B5%90\">2-3. 보안 모델 비교</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#3-deno-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0\">3. Deno 설치 및 시작하기</a></p>\n<ul>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#3-1-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95\">3-1. 설치 방법</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#3-2-%EC%B2%AB-%EB%B2%88%EC%A7%B8-deno-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8\">3-2. 첫 번째 Deno 프로그램</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#4-deno%EC%9D%98-%ED%95%B5%EC%8B%AC-%EA%B8%B0%EB%8A%A5\">4. Deno의 핵심 기능</a></p>\n<ul>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#4-1-url-%EA%B8%B0%EB%B0%98-%EB%AA%A8%EB%93%88-%EC%9E%84%ED%8F%AC%ED%8A%B8\">4-1. URL 기반 모듈 임포트</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#4-2-%EB%B3%B4%EC%95%88-%EB%AA%A8%EB%8D%B8\">4-2. 보안 모델</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#4-3-%ED%91%9C%EC%A4%80-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC\">4-3. 표준 라이브러리</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#4-4-web-%ED%91%9C%EC%A4%80-api\">4-4. Web 표준 API</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#5-%EC%8B%A4%EC%A0%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%B6%95\">5. 실전 프로젝트 구축</a></p>\n<ul>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#5-1-rest-api-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0\">5-1. REST API 서버 만들기</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#5-2-%ED%8C%8C%EC%9D%BC-%EC%B2%98%EB%A6%AC-%EC%98%88%EC%8B%9C\">5-2. 파일 처리 예시</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#5-3-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EC%82%AC%EC%9A%A9\">5-3. 환경 변수 사용</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#5-4-%EC%99%B8%EB%B6%80-api-%ED%98%B8%EC%B6%9C\">5-4. 외부 API 호출</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#6-deno-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%A1%B0\">6. Deno 프로젝트 구조</a></p>\n<ul>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#6-1-%EA%B6%8C%EC%9E%A5-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%A1%B0\">6-1. 권장 프로젝트 구조</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#6-2-denojson-%EC%84%A4%EC%A0%95\">6-2. deno.json 설정</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#7-deno-%EC%83%9D%ED%83%9C%EA%B3%84\">7. Deno 생태계</a></p>\n<ul>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#7-1-%EC%9D%B8%EA%B8%B0-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC\">7-1. 인기 프레임워크</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#7-2-%EC%9C%A0%EC%9A%A9%ED%95%9C-%EB%AA%A8%EB%93%88\">7-2. 유용한 모듈</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#8-nodejs%EC%97%90%EC%84%9C-deno%EB%A1%9C-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98\">8. Node.js에서 Deno로 마이그레이션</a></p>\n<ul>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#8-1-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98-%EC%B2%B4%ED%81%AC%EB%A6%AC%EC%8A%A4%ED%8A%B8\">8-1. 마이그레이션 체크리스트</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#8-2-npm-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0\">8-2. npm 패키지 사용하기</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#9-deno%EC%9D%98-%EC%9E%A5%EB%8B%A8%EC%A0%90\">9. Deno의 장단점</a></p>\n<ul>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#9-1-%EC%9E%A5%EC%A0%90\">9-1. 장점</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#9-2-%EB%8B%A8%EC%A0%90\">9-2. 단점</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#10-%EC%96%B8%EC%A0%9C-deno%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C\">10. 언제 Deno를 사용해야 할까?</a></p>\n<ul>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#%EC%A0%81%ED%95%A9%ED%95%9C-%EA%B2%BD%EC%9A%B0\">적합한 경우</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#%EB%B6%80%EC%A0%81%ED%95%A9%ED%95%9C-%EA%B2%BD%EC%9A%B0\">부적합한 경우</a></li>\n</ul>\n</li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#faq\">FAQ</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#%EA%B2%B0%EB%A1%A0-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84%EC%9D%98-%EA%B0%80%EB%8A%A5%EC%84%B1\">결론: 차세대 런타임의 가능성</a></li>\n<li><a href=\"/javascript/Deno-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-Node.js%EB%A5%BC-%EB%84%98%EC%96%B4%EC%84%9C%EB%8A%94-%EC%B0%A8%EC%84%B8%EB%8C%80-%EB%9F%B0%ED%83%80%EC%9E%84/#deno-%ED%95%99%EC%8A%B5-%ED%9B%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%ED%9A%8C\">Deno 학습 후 프로젝트 기회</a></li>\n</ul>","wordCount":{"words":809},"fields":{"slug":"/javascript/Deno-완전정복-Node.js를-넘어서는-차세대-런타임/","image":null,"faq":[{"question":"Deno가 Node.js를 대체할까요?","answer":"단기적으로는 아니지만, 장기적으로는 가능성이 있다. 특히 새로운 프로젝트와 보안이 중요한 프로젝트에서 Deno의 장점이 두드러진다."},{"question":"npm 패키지를 사용할 수 있나요?","answer":"네, npm: 프리픽스를 사용하면 npm 패키지를 사용할 수 있다. 하지만 모든 패키지가 호환되는 것은 아니다."},{"question":"Deno의 성능은 Node.js보다 좋나요?","answer":"상황에 따라 다르다. 일부 작업에서는 Deno가 빠르지만, 전체적으로는 Node.js가 더 성숙하고 최적화되어 있다."},{"question":"프로덕션에서 사용해도 되나요?","answer":"가능하지만 신중하게 결정해야 한다. Deno는 아직 상대적으로 새로운 기술이며, 엔터프라이즈 환경에서는 충분한 검증이 필요하다."},{"question":"TypeScript를 모르면 Deno를 사용할 수 있나요?","answer":"네, JavaScript로도 작성할 수 있다. 하지만 Deno의 강점 중 하나가 TypeScript 기본 지원이므로, TypeScript를 배우는 것을 추천한다."},{"question":"Deno로 웹 프레임워크를 만들 수 있나요?","answer":"네, Fresh, Oak 등 여러 프레임워크가 있다. Next.js나 Express와 유사한 개발 경험을 제공한다."}]},"frontmatter":{"title":"Deno 완전정복 - Node.js를 넘어서는 차세대 런타임","date":"2025년 12월 29일","dateISO":"2025-12-29T06:15:00.000Z","updatedISO":null,"category":"javascript","description":"Deno의 모든 것을 다룬다. Node.js와의 차이점, 내장 기능, 보안 모델, TypeScript 지원, 실전 프로젝트 구축까지 Deno를 완벽하게 마스터하는 가이드를 제공한다.","tags":["Deno","Node.js","JavaScript","TypeScript","런타임","서버 사이드","백엔드","차세대 런타임"]}}},"pageContext":{"slug":"/javascript/Deno-완전정복-Node.js를-넘어서는-차세대-런타임/","previous":{"fields":{"slug":"/etc/2026년-개발자-로드맵-새해를-위한-기술-스택-선택-가이드/"},"frontmatter":{"title":"2026년 개발자 로드맵 - 새해를 위한 기술 스택 선택 가이드","tags":["개발자 로드맵","기술 스택","학습 경로","개발자 커리어","프론트엔드","백엔드","풀스택","2026년 트렌드"]}},"next":{"fields":{"slug":"/etc/Serverless-아키텍처-실전-가이드-AWS-Lambda부터-Vercel까지/"},"frontmatter":{"title":"Serverless 아키텍처 실전 가이드 - AWS Lambda부터 Vercel까지","tags":["Serverless","AWS Lambda","Vercel","Netlify","Cloud Functions","서버리스","인프라","배포","Edge Computing"]}}}},"staticQueryHashes":["213619243","3262363727"]}