서버 사이드 로드밸런싱 / 클라이언트 사이드 로드밸런싱
- 서버 사이드 LB (예: AWS ALB/NLB, NGINX, HAProxy)
- 클라이언트는 LB 한 주소만 알고
- LB 뒤의 인스턴스 풀은 오토스케일러/오케스트레이터가 등록/제거 (= 일종의 서비스 디스커버리 통합) 합니다
- 주로 북-남(North-South) 트래픽(외부 → 내부) 에 많이 사용
- 클라이언트 사이드 LB (예: Ribbon, Spring Cloud LoadBalancer + Eureka)
- 클라이언트(예: 주문 서비스) 가 레지스트리(Eureka) 에게 대상 풀을 직접 조회하고
- 그 중 하나를 스스로 선택해서 직접 호출한다
- 주로 동-서(East-West) 서비스 간 호출에 적합
북-남(North-South) vs 동-서(East-West)
- 북-남 트래픽 : 외부 <-> 내부 경게를 가로지르는 트래픽
- 예시) 인터넷 사용자 → (ALB/NGINX) → API 게이트웨이/백엔드
- 인바운드(북 → 남) 만을 말하는 것이 아닌 경계(엣지)를 통과하는 모든 방향(인바운드/아웃바운드) 를 포함합니다
- 동-서 트래픽 : 내부 <-> 내부 사이의 서비스 간 트래픽
- 예시) 주문 서비스 → 상품 서비스 → 유저 서비스 (같은 VPC/클러스터 안)
Feign Client
- 선언형 HTTP 클라이언트
- "인터페이스 + 애노테이션" 만으로 REST 호출 코드를 거의 안쓰게 해주는 도구 → 보일러플레이트 최소화
Spring Cloud OpenFeign은Feign을Spring생태계에 붙여서 서비스 디스커버리(Eureka), 클라이언트 로드밸런싱 (과거 Ribon, 지금은 Spring Cloud LoadBalancer), 서킷 브레이커(Resilience4j) 까지 자연스럽게 통해 준다- Eureka 없이 고정 URL 로도 사용할 수 있다
- MSA 간 동-서 통신에서 자주 사용
Ribbon이 통합되어 있어 자동으로 로드 밸런싱을 수행해준다
Ribbon 의 특징
- Eureka 등으로부터 서비스 인스턴스 리스트를 제공받아 로드밸런싱에 사용한다 → 서버 리스트 제공
- 라운드 로빈, 가중치 기반 등 다양한 로드 밸런싱 알고리즘 지원
- 요청 실패 시 다른 인스턴스로 자동 전환 → Failover
FeignClient 와 Ribbon 동작 방식
- 서비스 이름을
@FeignClient(name = "my-service")형태로 등록하게 될텐데 해당 이름은 Eureka 에 등록된 서비스 이름을 참조한다- Eureka 서비스에서 해당 이름으로 인스턴스를 조회한다
- 같은 인스턴스가 있다면 그 중 하나를 선택해야 하며 이를 로드밸런싱을 통해 선택하게 된다 → 기본적으로 Ribbon 사용
- 설정된 로드 밸런싱 알고리즘을 사용해서 요청을 분배
간단한 라운드 로빈 기반 로드 밸런싱 테스트
- Order 서비스 → Product 서비스 형태로 상품 정보를 가져온다
- Order 서비스 인스턴스 : 1개
- Product 서비스 인스턴스 : 3개
흐름

테스트 코드
'학습일지 > Architecture' 카테고리의 다른 글
| [Architecture] 중앙 집중식 Config 설정 관리 (3) | 2025.09.17 |
|---|---|
| [Architecture] API Gateway (Spring Cloud Gateway) (0) | 2025.09.17 |
| [Architecture] 서킷브레이커 (Resilience4j) (0) | 2025.09.17 |
| [Architecture] 서비스 디스커버리 (0) | 2025.09.16 |
| [Architecture] MSA, Spring Cloud (0) | 2025.09.16 |