백엔드/Node.js

[Node.js] Node.js의 정의와 특징

MINJIN's 2023. 12. 29. 17:01

1. Node.js란?

  Node.js는 Chrome V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경(Runtime Environment)으로 주로 서버 사이드 애플리케이션 개발에 사용되는 소프트웨어 플랫폼이다. Node.js는 브라우저 외부 환경에서 자바스크립트 애플리케이션 개발에 사용되며 이에 필요한 모듈, 파일 시스템, HTTP 등 Built-in API를 제공한다.

  Node.js는 자바스크립트를 사용해 개발한다. Front-end와 Back-end에서 자바스크립트를 사용할 수 있다는 동형성(isomorphic)은 별도의 언어 학습 시간을 단축해 주는 장점이 있다.

Isomorphic JavaScript

  Node.js는 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 Request 처리 성능을 가지고 있다. 데이터베이스로부터 대량의 데이터를 취득하여 웹페이지에 표시할 때, 일반적으로 데이터베이스 처리에 대기시간(blocking)이 발생하기 때문에 웹페이지 표시가 지연되는 현상이 발생한다. Node.js의 모든 API는 비동기 방식으로 동작하여 Non-blocking I/O가 가능하고 단일 스레드 이벤트 루프 모델을 사용하여 보다 가벼운 환경에서도 높은 Request 처리 성능을 가지고 있다.

  Node.js는 데이터를 실시간 처리하여 빈번한 I/O가 발생하는 SPA(Single Page Application)에 적합하다. 하지만 CPU 사용률이 높은 애플리케이션에는 권장하지 않는다.

  Node.js에는 Socket.io라는 실시간 통신을 실현하는 라이브러리를 사용할 수 있어서 대량의 데이터 처리와 실시간 통신을 구현할 수 기능을 모두 갖추고 있다.

 

2. http 모듈 기반의 웹 서버 제작

  Node.js를 사용하여 간단한 HTTP 서버를 작성해 보자. Node.js는 http 서버 모듈을 내장하고 있어서 아파치와 같은 별도의 웹서버를 설치할 필요가 없다. 아래와 같은 내용으로 httpServer.js 파일을 생성한다.

//httpServer.js
const http = require('http');

const hostname = '192.168.0.232'
const port = 3000;

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World');
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});
2줄 : http 라이브러리를 require 함수를 통해 포함하겠다는 의미다. 이 모듈이 있어야 서버를 만들 수 있다.
4~5줄 : 아이피와 포트 변수이다.
7줄 : createServer 함수는 http 모듈로 서버를 1대 생성하는 기능이다. 내부에 (req, res) 콜백 함수가 등록되어 있는데, 클라이언트가 접속하면 등록한 콜백 함수 내부인 7~9줄 코드를 수행한다.
13줄 : listen 함수는 대기하는 함수로써 서버의 등록한 아이피와 포트 번호를 기반으로 클라이언트가 서버에 접속하기 전까지 대기한다.

 

  해당 코드를 작성 후 터미널을 열고 해당 파일이 있는 경로에서 다음 명령으로 서버를 실행한다.

$node httpServer.js

  위 명령을 실행하고 브라우저에서 “http://localhost:8080” 에 접속하면 “Hello World”가 출력되는 것을 확인할 수 있다.

 

3. Node.js의 특징

1) 이벤트 기반

  이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식이다.

  • ​이벤트의 예: 클릭, 네트워크 요청, 타이머 등
  • 이벤트 리스너: 이벤트를 등록하는 함수
  • 콜백 함수: 이벤트가 발생했을 때 실행될 함수

 

 

2) Non-blocking I/O 기반

  오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행한다. I/O 작업이 많을 때 노드 활용성이 극대화된다.

- 참고문헌

https://poiemaweb.com/nodejs-basics

https://inpa.tistory.com/entry/NODE-%F0%9F%93%9A-%EB%85%B8%EB%93%9C-%EB%93%80%ED%86%A0%EB%A6%AC%EC%96%BC