[javascript] Express.js에서의 멀티서버 환경 구축 방법

Express.js는 Node.js를 기반으로 동작하는 웹 프레임워크로, 개발자들이 웹 애플리케이션을 쉽게 개발할 수 있게 해줍니다. Express.js를 사용하여 멀티서버 환경을 구축하는 방법에 대해 알아보겠습니다.

1. Express 애플리케이션을 작성합니다.

먼저, Express 애플리케이션을 작성해야 합니다.

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

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

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

위의 예시는 단일 서버를 구축하는 Express 애플리케이션입니다. app.listen()을 통해 포트 3000에서 서버를 시작하고, 루트 경로로 접속하면 “Hello World!”를 반환합니다.

2. Cluster를 사용하여 멀티서버 환경을 설정합니다.

싱글 스레드로 동작하는 Node.js는 여러 개의 프로세스를 활용하여 멀티서버 환경을 구축할 수 있습니다. 이를 위해 cluster 모듈을 사용하여 Express 애플리케이션을 여러 개의 워커 프로세스로 확장할 수 있습니다.

const cluster = require('cluster');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} died`);
  });
} else {
  console.log(`Worker ${process.pid} started`);

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

  app.get('/', (req, res) => {
    res.send(`Hello World from worker ${process.pid}`);
  });

  app.listen(3000, () => {
    console.log(`Server started on port 3000 by worker ${process.pid}`);
  });
}

위의 코드는 cluster 모듈을 사용하여 멀티서버 환경을 설정한 Express 애플리케이션입니다. 마스터 프로세스에서는 CPU 코어의 수만큼 워커 프로세스를 생성하고, 워커 프로세스에서는 각각의 Express 애플리케이션을 시작합니다.

3. 로드 밸런싱을 설정합니다.

마스터-워커 아키텍처로 멀티서버 환경을 구축했지만, 여전히 클라이언트는 단일 포트에 대해서만 요청을 보내게 됩니다. 따라서 로드 밸런서를 통해 클라이언트 요청을 여러 서버로 분산시켜야 합니다.

로드 밸런서를 설정하는 방법은 여러 가지가 있습니다. 예를 들어 Nginx 또는 HAProxy와 같은 리버스 프록시 서버를 사용할 수 있습니다. 이들은 클라이언트로부터의 요청들을 멀티서버로 분산시켜주는 역할을 합니다.

결론

이제 Express.js를 이용하여 멀티서버 환경을 구축하는 방법을 알아보았습니다. Express.js와 cluster를 사용하여 애플리케이션을 멀티스레드로 확장하고, 로드 밸런서를 통해 클라이언트 요청을 분산시킬 수 있습니다.

참고문헌: