Node.js 를 배워보자/2. Node.js 기본 문법

Node.js의 특징적인 문법: 모듈 시스템, 비동기 프로그래밍, 이벤트 드리븐 프로그래밍

_Blue_Sky_ 2024. 9. 30. 18:25
728x90
728x90

Node.js의 특징적인 문법: 모듈 시스템, 비동기 프로그래밍, 이벤트 드리븐 프로그래밍 심층 분석

서론

Node.js는 JavaScript를 서버 사이드에서 실행할 수 있도록 해주는 강력한 플랫폼입니다. Node.js의 성공적인 비결 중 하나는 모듈 시스템, 비동기 프로그래밍, 이벤트 드리븐 프로그래밍이라는 세 가지 핵심적인 특징에 있습니다. 이 글에서는 이 세 가지 특징을 자세히 살펴보고, 각각의 특징이 Node.js 개발에 어떤 영향을 미치는지 알아보겠습니다.

1. 모듈 시스템 (CommonJS)

Node.js는 모듈 시스템으로 잘 알려져 있습니다. 모듈 시스템은 코드를 작은 단위로 분리하여 관리하고 재사용성을 높이는 데 도움을 줍니다. Node.js는 CommonJS 모듈 시스템을 채택하여, 개발자들이 모듈을 쉽게 생성하고 관리할 수 있도록 합니다.

  • 모듈 생성:
    • JavaScript 파일 하나가 하나의 모듈이 됩니다.
    • module.exports 객체에 내보낼 값이나 함수를 할당합니다.
  • 모듈 가져오기:
    • require() 함수를 사용하여 다른 모듈을 가져옵니다.
  • 장점:
    • 코드의 재사용성 증가
    • 코드 관리 용이
    • 의존성 관리 간편
  • 예시:
// math.js
exports.sum = (a, b) => a + b;
exports.subtract = (a, b) => a - b;

// app.js
const math = require('./math');
console.log(math.sum(2, 3)); // 5
 
728x90

2. 비동기 프로그래밍

Node.js는 비동기 프로그래밍 모델을 기반으로 합니다. 비동기 프로그래밍은 한 번에 하나의 작업만 처리하지 않고, 여러 작업을 동시에 처리하는 방식입니다. 이는 I/O 작업(파일 읽기/쓰기, 네트워크 통신 등)에서 특히 유용하며, Node.js의 높은 성능을 가능하게 합니다.

  • 콜백 함수:
    • 비동기 작업이 완료될 때 호출되는 함수입니다.
    • 콜백 지옥 문제 발생 가능성
  • Promise:
    • 비동기 작업의 성공 또는 실패를 나타내는 객체입니다.
    • 콜백 지옥 문제 해결에 도움
  • Async/Await:
    • Promise를 더욱 간결하게 사용할 수 있도록 하는 문법입니다.
    • 동기 코드처럼 비동기 코드를 작성 가능
  • 장점:
    • 높은 성능
    • I/O 작업 효율성 증가
    • 동시에 여러 작업 처리 가능
  • 예시:
// 콜백 함수
fs.readFile('data.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

// Promise
fs.promises.readFile('data.txt', 'utf8')
  .then(data => console.log(data))
  .catch(err => console.error(err));

// Async/Await
async function getData() {
  try {
    const data = await fs.promises.readFile('data.txt', 'utf8');
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}
getData();
 

3. 이벤트 드리븐 프로그밍

Node.js는 이벤트 드리븐 프로그래밍 모델을 채택하여, 이벤트 발생 시 미리 등록된 콜백 함수를 실행합니다. 이는 Node.js가 다양한 이벤트를 효율적으로 처리할 수 있도록 합니다.

  • 이벤트 루프:
    • 이벤트 발생 여부를 지속적으로 확인하는 메커니즘
  • 이벤트 리스너:
    • 특정 이벤트 발생 시 실행될 함수
  • 장점:
    • 비동기 프로그래밍과의 시너지 효과
    • 실시간 애플리케이션 개발에 적합
  • 예시:
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');
});
 

결론

Node.js의 모듈 시스템, 비동기 프로그래밍, 이벤트 드리븐 프로그래밍은 서로 긴밀하게 연결되어 Node.js의 강력한 기능을 구현합니다. 이러한 특징들을 잘 이해하고 활용하면, 효율적이고 확장성 있는 Node.js 애플리케이션을 개발할 수 있습니다.

추가적으로 알아두면 좋은 점

  • Node.js 패키지 관리: npm (Node Package Manager)을 통해 다양한 패키지를 설치하고 관리할 수 있습니다.
  • Node.js 생태계: Node.js는 활발한 커뮤니티를 기반으로 다양한 프레임워크와 라이브러리를 제공합니다.
  • Node.js의 단점: 단일 스레드 모델로 인해 CPU 집약적인 작업에는 적합하지 않을 수 있습니다.

 

728x90
728x90