참조사이트
비슷해보이지만 뭔가 나오면 또 궁금해지기 마련.
문법적으로는 약간 차이가 있긴 한것 같지만 뭐라도 하나 만들어봐야 체감이 클듯.
비교 요약
1. 성능
Bun : 초당 110,000 요청 처리 가능. 동시 연결 처리에 강함 ( 높으면 좋은것 ? )
Node.js : 초당 60,000 요청 처리
Deno : 초당 67,000 요청 처리
2. 보안 및 의존성 관리
Deno : 샌드박스 환경을 기본으로 사용
Node.js : 최근 보안 모델 도입
Bun : 권한 모델 미도입, 'trustedDependencies' 기능 도입
3. 커뮤니티 및 생태계
Node.js : 가장 큰 커뮤니티와 풍부한 생태계
Deno : 작지만 빠르게 성장하는 커뮤니티
Bun : 초기 단계 커뮤니티, 개발자 수 증가 중
4. JavaScript 엔진
Node.js와 Deno : V8 JavaScript 엔진 사용
Bun : JavaScriptCore 엔진 사용. 빠른 시작이 목표
5. TypeScript 및 JSX 지원
Node.js : 외부 의존성 필요 ( NPM 설치해서 하는것 귀찮았는데 )
Deno와 Bun : 내장 지원, 별도 변환 단계 없음
6. 모듈 시스템
Node.js : CommonJS 및 ES 모듈 지원 ( require )
Deno : 표준 준수 ECMAScript 모듈 사용 ( import )
Bun : 중앙 집중식 패키지 관리자, NPM 패키지 호환 ( import )
NODEJS 예제 : Express와 MySQL 사용
import express, { Request, Response } from 'express';
import mysql from 'mysql2/promise';
const app = express();
app.use(express.json());
const db = await mysql.createConnection({
host: 'localhost',
user: 'yourUsername',
password: 'yourPassword',
database: 'yourDatabase'
});
const router = express.Router();
router.get('/login', async (req: Request, res: Response) => {
const { userID, userPass } = req.query;
const [results] = await db.execute('SELECT * FROM userData WHERE userID = ? AND userPass = ?', [userID, userPass]);
res.json({ success: results.length > 0 });
});
app.use(router);
app.listen(3000, () => {
console.log('Server running on port 3000');
});
DENO 예제 : Oak와 MySQL 사용
import { Application, Router } from 'https://deno.land/x/oak/mod.ts';
import { Client } from 'https://deno.land/x/mysql/mod.ts';
const db = await new Client().connect({
hostname: 'localhost',
username: 'yourUsername',
password: 'yourPassword',
db: 'yourDatabase',
});
const router = new Router();
router.get('/login', async (context) => {
const { userID, userPass } = context.request.url.searchParams;
const users = await db.query('SELECT * FROM userData WHERE userID = ? AND userPass = ?', [userID, userPass]);
context.response.body = { success: users.length > 0 };
});
const app = new Application();
app.use(router.routes());
app.use(router.allowedMethods());
await app.listen({ port: 3000 });
BUN 예제 : 챗GPT도 예제가 적다고 가정적 예제를 사용하네요
import { createConnection } from 'mysql2/promise';
const db = await createConnection({
host: 'localhost',
user: 'yourUsername',
password: 'yourPassword',
database: 'yourDatabase'
});
const router = async (req: Request) => {
const url = new URL(req.url);
const path = url.pathname;
const userID = url.searchParams.get('userID');
const userPass = url.searchParams.get('userPass');
if (path === '/login') {
const [results] = await db.execute('SELECT * FROM userData WHERE userID = ? AND userPass = ?', [userID, userPass]);
return new Response(JSON.stringify({ success: results.length > 0 }));
}
};
Bun.serve({
fetch: router
});