로드 밸런서는 클라이언트의 요청을 여러 서버(또는 애플리케이션 인스턴스)로 분산시켜, 서비스의 안정성과 성능을 높이는 역할을 합니다. 여러 종류의 로드 밸런서가 있는데 주요 분류와 차이점을 알아보겠습니다.
하드웨어 로드 밸런서
**Layer 4 (전송 계층) 로드 밸런서
리버스 프록시 (Reverse Proxy)
포워드 프록시(Forward Proxy)
취업 준비 중인 신입 Java/Spring 백엔드 개발자라면, 로드 밸런싱과 관련된 기본 개념을 직접 실습해보면서 이해하는 것이 큰 도움이 됩니다. 다음은 실습해볼 만한 몇 가지 예시와 그에 맞는 가이드입니다.
Spring Boot 간단 웹 애플리케이션 작성
/hello)를 가진 Spring Boot 애플리케이션을 작성합니다.@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello from port: " + System.getProperty("server.port");
}
}
여러 인스턴스 실행
java -jar application.jar --server.port=8081과 같이 포트를 변경해가며 여러 인스턴스를 실행합니다.Nginx 설치 및 구성
nginx.conf 파일에 다음과 같이 Upstream 설정을 추가하여 여러 Spring Boot 인스턴스로 트래픽을 분산합니다.upstream spring_boot_app {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
# 필요에 따라 추가 서버 지정
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://spring_boot_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
테스트
http://localhost/hello 요청을 보내면, Nginx가 요청을 각 인스턴스에 분산시키고 응답에 해당 포트 번호가 나타나는지 확인합니다.HAProxy 설치
HAProxy 설정 파일 작성
haproxy.cfg 파일을 작성하여 frontend와 backend 설정을 추가합니다.global
log stdout format raw local0
maxconn 2000
defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http_front
bind *:80
default_backend servers
backend servers
balance roundrobin
server server1 127.0.0.1:8081 check
server server2 127.0.0.1:8082 check
Spring Boot 애플리케이션 실행
테스트
http://localhost/hello로 접속하여 HAProxy가 트래픽을 분산시키는지 확인합니다.Dockerfile 작성
FROM openjdk:11-jre-slim
VOLUME /tmp
ARG JAR_FILE=target/application.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
docker-compose.yml 작성
version: '3'
services:
app1:
build: .
ports:
- "8081:8080"
environment:
- SERVER_PORT=8080
app2:
build: .
ports:
- "8082:8080"
environment:
- SERVER_PORT=8080
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app1
- app2
실행 및 테스트
docker-compose up --build 명령어로 전체 환경을 실행하고, 브라우저나 curl로 http://localhost/hello 요청을 보내어 로드 밸런싱 동작을 확인합니다.이러한 실습 경험은 면접이나 실제 업무 환경에서 "왜, 어떻게" 로드 밸런서를 사용해야 하는지를 설명할 때 큰 도움이 됩니다. 학습에 참고하시고, 필요에 따라 추가 기능(예: 헬스 체크, SSL 종료, 세션 스티키네스 등)도 실험해보세요!