로드밸런싱(Load Balancing)은 서버 또는 시스템에 들어오는 네트워크 트래픽을 여러 서버나 리소스에 효율적으로 분배하여, 시스템 성능을 최적화하고 과부하를 방지하며 안정성을 유지하는 기술입니다.
목적 : 하나의 서버에 모든 요청이 집중되는 것을 방지하고, 다수의 서버에 균등하게 요청을 나누어 시스템의 부하를 분산합니다.
효과 : 과부하를 방지해 응답 속도를 유지하며 한 서버가 다운되어도 다른 서버가 요청을 처리할 수 있습니다. 또한 서버를 추가해 처리량을 증가시킬 수 있습니다.
로드 밸런서란 로드 밸런싱을 수행하는 장치 또는 소프트웨어입니다. 로드 밸런서는 클라이언트의 요청을 받아, 최적의 서버로 요청을 전달하는 역할을 합니다.
하드웨어 로드 밸런서 : 전용 하드웨어 장치를 사용
소프트웨어 로드 밸런서 : 오픈소스나 클라우드에서 제공 ex) Nginx, HAProxy, AWS ELB
로드 밸런싱 방식
정적 로드 밸런싱(Static Load Balancing) : 알고리즘 기반으로 요청을 고정된 방식으로 분배하며 서버 상태를 고려하지 않습니다.
동적 로드 밸런싱(Dynamic Load Balnacing) : 서버의 실시간 상태를 기반으로 요청을 분배
로드 밸런싱의 구조와 동작 방식
클라이언트 요청 과정
1. 클라이어느는 DNS를 통해 특정 도메인으로 요청을 보냄
2. DNS는 로드 밸런서의 IP를 반환
3. 로드 밸런서가 요청을 수신하고, 트래픽을 적절한 서버로 전달
로드 밸런서의 처리 단계
1. 요청 수신 : 클라이언트의 HTTP/HTTPS 요청을 받음
2. 알고리즘 선택 : 사전 정의된 분배 알고리즘에 따라 적절한 서버를 선택
3. 트래픽 전달 : 선택된 서버에 요청을 전달하고 응답을 반환
로드 밸런싱의 레벨
L4(전송 계층) 로드 밸런싱
L7(애플리케이션 계층) 로드 밸런싱
상태 유지(Session Persistence)
로드 밸런싱 환경에서도 특정 클라이언트의 요청이 동일한 서버로 전송되도록 해야할 때가 있습니다.
로드 밸런싱을 통하면
실제 사용 사례
웹 애플리케이션 : 여러 웹 서버를 통해 사용자 요청을 분산
클라우드 환경 : AWS ELB(Elastic Load Balancer) 또는 GCP Load Balancer를 활용
게임 서버 : 대규모 접속자가 있는 MMORPG 게임에서 로드 밸런싱으로 안정적인 접속 제공
로드 밸런싱은 실제 백엔드 개발 과정에서 자주 접하게 되는 중요한 기술입니다. 신입 Java/Spring 백엔드 개발자 입장에서 실습해볼 만한 간단한 프로젝트와 학습 단계는 다음과 같습니다.
개발 환경 세팅:
개념 숙지:
Nginx를 사용해 간단한 Spring Boot 서버 두 개에 요청을 분배.
/api 엔드포인트를 가진 두 개의 Spring Boot 애플리케이션 작성.@RestController
public class HelloController {
@GetMapping("/api")
public String hello() {
return "Hello from Server 1";
}
}
nginx.conf)에 두 서버를 업스트림으로 등록.http {
upstream backend_servers {
server localhost:8081;
server localhost:8082;
}
server {
listen 8080;
location /api {
proxy_pass http://backend_servers;
}
}
}
http://localhost:8080/api에 요청을 전송.Docker를 활용해 Spring Boot 서버를 여러 개 띄우고, Nginx로 부하를 동적으로 분배.
FROM openjdk:17-jdk-slim
COPY target/app.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
docker-compose.yml 작성.version: '3.8'
services:
server1:
build: .
ports:
- "8081:8080"
server2:
build: .
ports:
- "8082:8080"
AWS의 Elastic Load Balancer(ELB) 또는 GCP의 Load Balancer 사용.
AWS Free Tier 가입 및 EC2 인스턴스 생성:
ELB 설정:
테스트:
Spring Session과 Redis를 사용해 세션 데이터를 공유.
application.properties에 Redis 설정 추가.spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.port=6379
이 실습들은 로드 밸런싱을 기본적으로 이해하고 Java/Spring 백엔드에서 활용할 수 있는 기술을 배울 수 있도록 설계되었습니다. 추가적인 질문이 있다면 언제든지 물어보세요! 😊