Docker와 자바스크립트를 이용한 로드 밸런싱 설정 방법

로드 밸런싱은 웹 서비스의 트래픽을 여러 서버에 분산하여 처리하는 기술입니다. 이를 통해 서버의 부하를 분산시키고, 고가용성을 제공할 수 있습니다. 이번 글에서는 Docker와 자바스크립트를 이용하여 로드 밸런싱 설정하는 방법에 대해 알아보겠습니다.

1. Docker로 서버 구성하기

Docker를 사용하여 서버를 구성하는 것은 간편하고 효율적인 방법입니다. 아래는 Docker를 사용하여 서버를 구성하는 예시 코드입니다.

FROM node:14

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD [ "node", "server.js" ]

위 예시 코드는 Node.js를 기반으로 한 간단한 서버를 구성하는 Dockerfile입니다. 필요한 패키지를 설치하고, 소스 코드를 복사하여 컨테이너 내부에 추가합니다. 3000번 포트를 열고, node server.js 명령어를 실행하여 서버를 실행합니다.

2. 로드 밸런서 구성하기

로드 밸런서는 여러 서버에 트래픽을 분산시켜주는 역할을 합니다. Docker를 사용하여 로드 밸런서를 구성하기 위해서는 docker-compose를 사용하는 것이 편리합니다.

version: '3'
services:
  loadbalancer:
    image: nginx
    ports:
      - 80:80
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - server1
      - server2

  server1:
    build: .
    ports:
      - 3001:3000

  server2:
    build: .
    ports:
      - 3002:3000

위 예시 코드는 Docker Compose를 사용하여 로드 밸런서와 서버 2개를 구성하는 예시입니다. 로드 밸런서는 Nginx를 사용하며, 80번 포트로 접속할 수 있습니다. 서버 1과 서버 2는 앞서 작성한 Dockerfile을 빌드한 후, 각각 3001번 포트와 3002번 포트로 접속할 수 있습니다.

로드 밸런서의 설정은 nginx.conf 파일을 통해 조정할 수 있습니다. 예시 파일은 아래와 같이 작성할 수 있습니다.

http {
  upstream backend {
    server server1:3000;
    server server2:3000;
  }

  server {
    listen 80;

    location / {
      proxy_pass http://backend;
    }
  }
}

위 설정에서는 backend이라는 upstream을 정의하고, 서버 1과 서버 2를 등록합니다. 로드 밸런서로의 요청은 http://backend로 프록시되어 분산 처리됩니다.

3. 자바스크립트에서 로드 밸런서 사용하기

로드 밸런스 설정이 완료되었다면, 자바스크립트에서 해당 로드 밸런서를 사용할 수 있습니다. 예를 들어, 클라이언트 측에서 서버로의 요청을 보낼 때 로드 밸런서를 통해 분산된 서버 중 하나로 요청을 전송하도록 설정할 수 있습니다.

const serverHosts = [
  'http://loadbalancer',
  'http://loadbalancer',
  'http://loadbalancer'
];

const getRandomServer = () => {
  const randomIndex = Math.floor(Math.random() * serverHosts.length);
  return serverHosts[randomIndex];
};

fetch(`${getRandomServer()}/api/data`)
  .then(response => response.json())
  .then(data => {
    // 데이터 처리 로직
  })
  .catch(error => {
    // 에러 처리 로직
  });

위 예시 코드는 자바스크립트에서 서버로의 요청을 보낼 때, 랜덤으로 선택된 로드 밸런서의 주소를 사용하는 예시입니다. serverHosts 배열에는 로드 밸런서의 주소를 등록하고, getRandomServer 함수를 통해 랜덤하게 선택된 주소를 사용하여 요청을 보냅니다.

이렇게 구성된 자바스크립트 코드는 로드 밸런서를 통해 서버에 요청을 분산시킬 수 있으며, 고가용성 및 부하 분산을 실현할 수 있습니다.

마무리

Docker와 자바스크립트를 사용하여 로드 밸런싱을 설정하는 방법에 대해 알아보았습니다. 로드 밸런싱을 적용하여 웹 서비스의 성능을 향상시키고, 안정성을 확보할 수 있습니다. Docker와 자바스크립트를 응용하여 로드 밸런싱을 설정하는 과정에서 발생하는 문제나, 다양한 설정 방법 등에 대해서는 공식 문서와 기타 참고 자료를 참고하시기 바랍니다.

참고 자료: