안녕하세요, 개발자 여러분! Node.js를 사용하다 보면 "이걸 왜 패키지로 설치해야 하지?" 싶은 순간이 많죠? 2018년 이후 Node.js는 엄청난 변화를 겪었고, 이제는 nodemon이나 dotenv 같은 인기 패키지 없이도 많은 작업을 처리할 수 있어요. 이 포스트에서는 그 영상을 바탕으로 Node.js의 최신 기능 5가지를 자세히 살펴보겠습니다. AI 도구조차 이 기능들을 제대로 추천하지 않는다는 점이 재미있더군요.
이 기능들은 Node.js 버전 15 이상(예: 25 버전)에서 지원되며, 간단한 "Hello World" 앱을 기반으로 실습할 수 있습니다. 각 기능별로 코드 예시를 포함했으니, 따라 해보세요. 준비됐나요? 시작해 볼까요!
1. Watch Mode: 파일 변경 시 자동 재시작, nodemon 없이!
과거에는 파일을 수정할 때마다 터미널에서 Ctrl+C로 중단하고 다시 실행해야 했죠? 이제 Node.js의 내장 Watch Mode로 그 번거로움을 끝낼 수 있습니다. (Node.js 18.11+ 지원)
어떻게 사용하나요?
- 명령어:
node --watch app.js - 예시 코드 (
app.js):console.log('Hello World!'); - 파일을 수정하고 저장하면 자동으로 재시작되어 변경 사항이 즉시 반영됩니다. 예를 들어, "Hello World!"를 "Hello Node.js!"로 바꾸면 콘솔에 새 출력이 나타나요.
이 기능 하나로 nodemon 패키지를 설치할 필요가 없어집니다. 개발 속도가 훨씬 빨라지죠!
2. TypeScript 직접 실행: 컴파일 없이 타입 안전성 확보
TypeScript를 쓰려면 tsconfig.json 설정하고 tsc로 컴파일하는 게 기본이었어요. 하지만 Node.js 23+에서는 .ts 파일을 직접 실행할 수 있습니다. 타입 어노테이션을 무시하거나 변환해 JavaScript로 동작하게 해요.
기본 사용법:
- 명령어:
node app.ts - 예시 코드 (
app.ts):let username: string = "Max"; console.log(`Hello, ${username}!`); - 출력: "Hello, Max!" – 타입 체크 없이도 안전하게!
고급 기능 (Enums 등):
- 플래그 추가:
node --experimental-transform-types app.ts - 예시:
enum Role { Admin, User } let role: Role = Role.Admin; console.log(role); // 0 (Admin)
실용 스크립트 작성 시 컴파일 단계를 생략할 수 있어 생산성이 UP! 아직 실험적 기능이니 주의하세요.
3. 내장 SQLite: 가벼운 DB 없이 서버리스 데이터베이스
SQLite는 서버 없이 파일 기반으로 동작하는 가벼운 DB예요. Node.js 25+에서는 sqlite 모듈로 바로 사용할 수 있어, better-sqlite3 같은 패키지가 필요 없어요.
사용 예시 (app.js):
import { DatabaseSync } from 'sqlite';
import { open } from 'sqlite/slow-sqlite3'; // 필요 시
const db = await open({ filename: 'test.db', driver: DatabaseSync });
await db.exec('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)');
await db.run('INSERT INTO users (name) VALUES (?)', 'Max');
const users = await db.all('SELECT * FROM users');
console.log(users); // [{ id: 1, name: 'Max' }]
- 실행 후
test.db파일이 생성되고, VS Code 확장으로 테이블을 확인할 수 있어요. - 소규모 프로젝트나 유틸리티 스크립트에 딱!
4. Promise-based Timers: async/await으로 타이머 간단히
setTimeout을 Promise로 감싸서 await 하던 시대는 끝났어요. Node.js 15+부터 timers/promises 모듈로 네이티브 지원합니다.
예시 코드 (app.js):
import { setTimeout } from 'node:timers/promises';
async function main() {
console.log('시작!');
await setTimeout(1000); // 1초 대기
console.log('1초 후 실행!');
await setTimeout(2000);
console.log('끝!');
}
main();
- 출력: 순차적으로 지연된 로그가 찍혀요. async 코드가 훨씬 깔끔해집니다. setInterval이나 setImmediate도 동일하게 지원돼요.
5. .env 파일 네이티브 지원: dotenv 패키지 goodbye!
환경 변수를 .env 파일에서 로드하려면 dotenv가 필수였죠? 이제 --env-file 플래그로 간단히 처리합니다.
설정:
.env파일 생성:BUCKET=demo- 명령어:
node --env-file=.env app.js - 예시 코드 (
app.js):console.log(process.env.BUCKET); // "demo"
로컬 개발 환경이 한결 수월해집니다. 유틸리티 스크립트에 특히 유용해요.
'Programming' 카테고리의 다른 글
| React Grab: React 앱 요소를 클릭 한 번으로 코딩 에이전트에게 전달하는 혁신적인 도구 (0) | 2025.10.28 |
|---|---|
| Vitest 4.0 출시: 테스트 도구의 새로운 시대를 열다 (0) | 2025.10.28 |
| Graffle.js: JavaScript 개발자를 위한 간단하고 타입 안전한 GraphQL 클라이언트 (0) | 2025.10.22 |
| PostgreSQL 18 릴리스: 개발자들을 위한 성능 혁명과 새로운 기능 탐구 (0) | 2025.10.22 |
| 웹 보안의 필수 무기: DOMPurify로 XSS 공격을 막아보자! (0) | 2025.10.22 |