Nginx ‐ Nginx를 활용한 로드 밸런서 - dnwls16071/Backend_Study_TIL GitHub Wiki

📚 로드 밸런서(Load Balancer)란?

image

  • 많은 트래픽이 발생해 한 대의 서버로는 사양이 부족한 경우가 발생한다.
  • 이를 해결하기 위해 여러 서버를 운영하기도 한다.
  • 사용자의 요청을 여러 대의 웹 애플리케이션 서버에 골고루 전달하기 위한 분산 장치가 필요한데 이것을 바로 로드 밸런서(Load Balancer)라고 한다.
  • Nginx를 로드 밸런서로 활용하게 되면 아래와 같은 플로우를 보이게 된다.

image

  • 결과적으로 Nginx를 도입해 Load Balancer 역할을 수행하면서 트래픽을 적절하게 분배가 가능해진다.

📚 하나의 EC2에서 백엔드 서버 2개를 로드 밸런싱하는 예제

image

  • 서버를 2개 띄워(8080번, 8081번) Nginx를 앞단에 배치하여 로드 밸런서를 적용해보려고 한다.
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=3r/s;

# 로드 밸런싱 대상 서버들을 upstream이라는 그룹으로 묶는다.
# upstream 그룹 이름을 backend라고 지정한다.
upstream backend {
        server localhost:8080;
        server localhost:8081;
}

server {

        server_name api.jangwoojin.p-e.kr;
        limit_req zone=mylimit;
        limit_req_status 429;

        # / 으로 시작하는 모든 경로를 처리
        location / {

                # upstream 그룹에서 지정한 서버들로 요청이 분산된다.
                proxy_pass http://backend;
        }

        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/api.jangwoojin.p-e.kr/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/api.jangwoojin.p-e.kr/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
        if ($host = api.jangwoojin.p-e.kr) {
            return 301 https://$host$request_uri;
        } # managed by Certbot


        listen 80;
        server_name api.jangwoojin.p-e.kr;
        return 404; # managed by Certbot
}

health 메서드로 로드 밸런서가 제대로 동작을 하는지 확인

스크린샷 2025-01-27 오전 2 52 28

스크린샷 2025-01-27 오전 2 52 20

❓좀 더 나아가서 팀 프로젝트에도 Docker Container로 격리시켜 서버를 독립적으로도 띄울 수 있을 것 같다. 팀 프로젝트에도 적용을 해봐야겠다.