Backend-dev/nodeJS & express

[javascript] Node.js와 express 비교

Hannana. 2024. 5. 25. 19:51
728x90
반응형

 

자바스크립트는 Html 태그를 동적으로 추가하고 웹의 동적인 동작을 처리할 때 사용된다.

뿐만 아니라 클라이언트에 동적인 기능을 제공함과 동시에

단일 언어로 클라이언트와 서버를 모두 개발할 수 있는 가능성이 있다.

 

자바스크립트를 통해 서버를 개발하고 구동할 수 있는 방법엔 두 가지가 있다.

바로 Node.js와 express다.

 

오늘은 이 두가지를 통해 서버를 구동하고그 문법에는 어떤 차이가 있으며 각 특징은 어떤지 포스팅하고자 한다.

 

 

Node.js 특징

 

 

 

1. 비동기 I/O

Node.js는 비동기식 입출력을 기본으로 하여 높은 성능을 발휘한다. 이는 많은 요청을 동시에 처리할 수 있게 한다.

ex:) 채팅 애플리케이션

많은 사용자가 동시에 메시지를 주고받는 실시간 애플리케이션에 비동기 I/O를 사용하면 각 메시지를 보내고 받는 요청이 병렬로 처리되므로, 서버는 수백 또는 수천 명의 사용자가 동시에 메시지를 주고받는 상황에서도 성능 저하 없이 빠르게 응답할 수 있다. 예를 들어, Slack과 같은 채팅 애플리케이션은 비동기 I/O 덕분에 수많은 사용자가 실시간으로 소통할 수 있다!

 

 

2. 단일 스레드

Node.js는 단일 스레드 이벤트 루프 구조를 사용하지만, 비동기 처리를 통해 많은 동시 연결을 효율적으로 관리합니다.

ex:)  실시간 온라인 게임 서버

Node.js의 단일 스레드 이벤트 루프는 각 사용자의 요청을 빠르게 처리하며, 비동기 처리를 통해 네트워크 지연 없이 실시간으로 데이터를 주고받을 수 있다. 

 

 

다음 글을 참고하자.

 

[javascript] 콜 스택과 이벤트 루프 | 동기/비동기 처리 차이?

동기 처리란, 쉽게 말해 순차적인 처리를 의미한다.만약 응답과 요청이 동기라면, 어떤 일이 발생할까?A 클라이언트가 요청을 보냈다고 하자. Aa서버는 요청을 받고 응답을 한다.문제 없다. 케이

hansjour.tistory.com

 

 

 

 

3. NPM (Node Package Manager)

풍부한 모듈 생태계를 자랑하는 NPM을 포함하고 있어 다양한 패키지를 쉽게 설치하고 사용할 수 있다.

ex:)  실시간 데이터 처리 애플리케이션(주식 거래 플랫폼,IoT 센서 데이터 모니터링 시스템)

NPM을 통해 쉽게 설치할 수 있는 다양한 패키지들(예: socket.io, express, mongoose 등)을 활용하면 실시간 데이터 스트리밍, 웹소켓 통신, 데이터베이스 연결 등을 손쉽게 구현할 수 있다. 예를 들어, 주식 거래 플랫폼에서는 socket.io를 사용하여 실시간 주식 가격 변동을 클라이언트에게 푸시하고, mongoose를 통해 MongoDB에 데이터를 저장하고 조회할 수 있다.

 

 

=> 실시간 애플리케이션의 강점이 있다!

채팅 애플리케이션, 온라인 게임 서버, 실시간 데이터 처리 시스템 등과 같은 애플리케이션들은 수많은 동시 연결을 효율적으로 처리하고, 빠른 응답성을 유지해야 하는데, Node.js의 비동기 I/O와 단일 스레드 이벤트 루프는 이러한 요구사항을 충족시키기에 적합하다.

 

 


 

 

 

express 특징
노드 익스프레스라고도 부른다.
 
 
1. 간단한 라우팅
 
라우팅은 하나의 함수가 서로 다른 일을 하게 하는 것이다. 요청에 따른 다른 응답 결과를 보내는 것이다.
Express는 URL 경로와 HTTP 메서드(GET, POST 등)를 사용하여 요청을 처리할 수 있도록 라우팅 기능을 제공한다. 다양한 엔드포인트를 쉽게 정의 가능!
    
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});​
 
 
 
노드를 통해 바로 서버를 구성하려면 여러 가지 설정을 수동으로 처리해야 한다.
// http 모듈 사용 예시
const http = require('http');

// 서버를 생성하고 요청을 처리하는 콜백 함수 작성
const server = http.createServer((req, res) => {
  // 요청된 URL에 따라 분기 처리
  if (req.url === '/') {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello, World!\n');
  } else if (req.url === '/about') {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('About Page\n');
  } else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Page Not Found\n');
  }
});

// 서버를 지정된 포트에서 실행
const PORT = 3000;
server.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}/`);
});

 
 
그에 비해 express는 
// express 모듈 사용 예시
const express = require('express');
const app = express();

// 라우트 설정
app.get('/', (req, res) => {
  res.send('Hello, World!');
});

app.get('/about', (req, res) => {
  res.send('About Page');
});

// 404 처리 미들웨어
app.use((req, res) => {
  res.status(404).send('Page Not Found');
});

// 서버를 지정된 포트에서 실행
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}/`);
});
 
 
간결하다.
뿐만 아니라 노드를 이용하면 기본 HTTP 서버 기능만 제공하므로
추가적인 기능 (예: 미들웨어, 에러 핸들링 등)을 직접 구현해야 하는 불편함이 있는 반면에
express는 미들웨어, 에러 핸들링, 다양한 플러그인 등 기능을 기본적으로 제공함
고로 확장성이 뛰어나다는 것이 장점이다..
 
 
 

    
2. 미들웨어
 
Express는 미들웨어 아키텍처를 사용하여 요청과 응답 사이에 다양한 기능을 삽입할 수 있다. 일일히 구현하지 않아도 되고 간단한 처리가 강점이다. 미들웨어는 로깅, 인증, 오류 처리 등 다양한 기능을 수행할 수 있다. 즉 요청과 응답 사이에 끼는 작은 프로그램들을 미들웨어라고 칭한다.
 
 

<미들웨어 3가지 종류>

-라우팅 분석 (요청 분석,분기 처리) / 응답 처리 / 응답 모양 만들기

const express = require('express');
const app = express();

// 미들웨어 예시
app.use((req, res, next) => {
  console.log(`${req.method} request for '${req.url}'`);
  next();
});

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

 

 

    
3. 플러그인 생태계
 
Express는 다양한 플러그인과 미들웨어를 지원하여, 데이터베이스 연결, 세션 관리, 보안 기능 등 다양한 추가 기능을 쉽게 통합할 수 있다.
 

4. 유연성
 
Express는 사용자가 원하는 방식으로 서버를 구성할 수 있도록 도와준다. 기본적인 구조를 제공하지만, 필요한 기능을 자유롭게 추가하고 제거할 수 있다.
 
 
 

 
 
 
 
 
참고로 싱글 쓰레드 기반의 이벤트 루프는 크게 자바스크립트의 특징이므로
js언어를 사용한다면 어디든 해당이 된다. (노드만의 특징X)
간단한 서버를 구현할 때는 노드가 적당하겠고,
웹을 구조적으로 만들고 싶을 땐 express가 적당할 것 같다.
 
 
 확실히 웹 서버를 돌리는 것부터 express가 간편하긴 하다!
 
 
 
 
 
 
 

 

 

 

 

반응형