Node.js 개요.
이 튜토리얼에서는 오픈 소스, 크로스 플랫폼 JavaScript 런타임 환경인 Node.js를 탐색합니다. 소개, 역사, 기능을 다루며 여러 코드 예제를 제공하여 기능을 시연합니다.
Node.js 소개
Node.js는 Chrome의 V8 JavaScript 엔진 위에 구축되어 개발자들이 서버 측에서 JavaScript를 실행할 수 있게 해줍니다. 이는 이벤트 기반, 비차단 I/O 모델을 제공하여 가볍고 확장 가능한 네트워크 애플리케이션을 구축하기에 효율적입니다.
Node.js는 이벤트 기반 아키텍처를 사용하며 비동기 작업 처리를 위해 콜백을 사용합니다. 이는 여러 요청을 동시에 처리할 수 있어 실시간 애플리케이션, 스트리밍 서비스 및 API 생성에 이상적입니다.
Node.js의 역사
Node.js는 2009년에 라이언 달(Ryan Dahl)이 만들었으며 처음에는 고도로 동시성이 있는 서버 측 애플리케이션의 확장 문제를 해결하기 위해 설계되었습니다. 비차단 I/O 모델과 많은 수의 동시 연결을 처리할 수 있는 능력 때문에 빠르게 인기를 얻었습니다.
Node.js의 기능
1. 비동기 및 비차단
Node.js는 이벤트 기반, 비차단 I/O 모델을 사용하므로 다른 코드의 실행을 차단하지 않고 여러 요청을 동시에 처리할 수 있습니다. 이는 Node.js가 많은 수의 동시 연결을 효율적으로 처리할 수 있게 해줍니다.
다음은 Node.js를 사용하여 비동기적으로 파일을 읽는 예입니다:
const fs = require('fs');
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
이 예제에서 readFile 함수는 비동기적으로 file.txt의 내용을 읽습니다. 파일이 읽힌 후에는 콜백 함수가 실행되고 데이터가 콘솔에 로그됩니다.
2. NPM (Node Package Manager)
Node.js는 npm이라는 패키지 매니저를 함께 제공합니다. 이를 통해 개발자는 재사용 가능한 JavaScript 코드를 설치, 관리 및 공유할 수 있습니다. 수백만 개의 패키지가 제공되므로 npm은 Node.js 애플리케이션에 쉽게 통합할 수 있는 방대한 생태계를 제공합니다.
npm을 사용하여 패키지를 설치하는 방법은 다음과 같습니다:
npm install package-name
3. 단일 스레드 및 이벤트 기반
Node.js는 단일 스레드 이벤트 루프를 사용하여 여러 동시 연결을 처리합니다. 이를 통해 많은 수의 요청을 효율적으로 처리할 수 있습니다. 그러나 Node.js는 CPU 집약적인 작업에는 적합하지 않으며, 이벤트 루프를 차단하여 응용 프로그램의 반응성을 떨어뜨릴 수 있습니다.
4. 크로스 플랫폼
Node.js는 Windows, macOS, Linux를 포함한 다양한 플랫폼에서 실행할 수 있도록 설계되었습니다. 이는 개발자들이 서버 측 코드를 한 번 작성하고 어떠한 수정 없이 다른 운영 체제에서 실행할 수 있게 해줍니다.
5. 광범위한 라이브러리 지원
Node.js에는 다양한 목적을 위한 사용 준비 완료 모듈을 제공하는 풍부한 라이브러리 생태계가 있습니다. 이러한 라이브러리들은 사전에 구축된 기능과 도구를 제공하여 개발자들이 빠르게 애플리케이션을 구축하는 데 도움을 줍니다. 일부 인기있는 라이브러리로는 웹 애플리케이션 프레임워크를 위한 Express.js, 실시간 통신을 위한 Socket.io, MongoDB 객체 모델링을 위한 Mongoose 등이 있습니다.
Node.js 예제
예제 1: 간단한 HTTP 서버 생성
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello, World!');
});
server.listen(3000, () => {
console.log('Server running on port 3000');
});
이 예제에서는 포트 3000에서 들어오는 요청을 수신하는 간단한 HTTP 서버를 생성합니다. 요청이 들어오면 서버는 "Hello, World!"라는 텍스트로 응답합니다.
예제 2: 파일 읽기 및 쓰기
const fs = require('fs');
// 파일 읽기
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
// 파일 쓰기
fs.writeFile('file.txt', 'Hello, World!', (err) => {
if (err) throw err;
console.log('파일이 성공적으로 작성되었습니다.');
});
이 예제에서는 fs 모듈을 사용하여 파일을 읽고 쓰는 방법을 보여줍니다. readFile 함수는 file.txt의 내용을 읽고, writeFile 함수는 같은 파일에 "Hello, World!"라는 텍스트를 작성합니다.
Node.js에 대해 더 알아보려면 공식 웹사이트를 방문하세요.