e-commerce 대용량 서버프로젝트는 서버의 성능을 높이는 방법으로 스케일 아웃(Scale-out)방식을 사용하기로 했습니디다. nginx를 사용해 로드밸런싱을 진행하여 스케일 아웃을 실제로 구현해보려고 합니다.
로드밸런서는 클라이언트와 서버 풀 사이에 위치하여 부하가 한 쪽의 서버로 집중되지 않도록 트래픽을 관리해줍니다. 그 결과 각각의 서버가 최적의 성능을 보일 수 있도록 만들 수 있습니다.

스케일아웃(Scale-out) 방식으로 서버를 확장하려는 이유는 다수의 처리를 동시 병행적으로 실시하기 위함입니다. 때문에 하나의 서버에 부하가 집중되지 않도록 분배하는 로드밸런싱이 필요한 것 입니다. 이러한 로드밸런싱을 nginx를 통해서 진행해보려고 합니다.
nginx는 경량 웹 서버로 트래픽이 많은 웹사이트를 위해 비동기 이벤트 기반구조로 되어있습니다.
nginx는 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고, Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 합니다
생성한 nginx서버에 접속하여 다음과 같이 진행하였습니다.
# 저장소 추가 - nginx.repo 파일
sudo vi /etc/yum.repos.d/nginx.repo
# 다음과 같이 설정
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
# nginx 설치
sudo yum install -y nginx
vim /etc/nginx/nginx.conf

초록색 네모 부분을 확인하여 똑같은 위치인 cd /etc/nginx/conf.d 로 이동합니다.
sudo vim default.conf
# 로드밸런싱 설정하기
upstream myapp1 {
server 118.67.128.203:8080;
server 27.96.135.51:8080;
}
server {
listen 8080;
location / {
proxy_pass http://myapp1;
}
}
default.conf파일의 설정한 내용을 보면 upstream 방식으로 2개의 서버를 설정하였습니다. 그래서 8080포트(nginx)로 요청이 들어오면 두개의 서버에 분산하게 됩니다.
분산 알고리즘을 설정하지 않으면 default값인 라운드 로빈 방식이 적용됩니다.
스케일 아웃이 어려운 작업일 것 같다 막연하게 생각해왔는데, 생각보다 편리하게 설정할 수 있었습니다. 다만, 로드밸런싱 방법은 다양하고 아직 nginx의 이해 정도가 얕기 때문에 디벨롭이 필요할 것 같습니다.
https://www.nginx.com/blog/scaling-web-applications-nginx-part-load-balancing/
https://www.digitalocean.com/community/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching