Spring Cloud는 마이크로서비스 아키텍처(MSA)를 구축하기 위한 일련의 도구를 제공하는 SPRING의 프로젝트다

단일 진입점 + 라우팅 + 로드밸런싱
FE → 모든 요청 → API Gateway(단일 진입점)
↓ 라우팅
- 회원 요청 → localhost:8083 (Member Service)
- 상품 요청 → localhost:8082 (Product Service)
변경 전/후 예시
공통 기능 처리
장점
Order 서버 확장 → 8084 포트 추가
→ API Gateway 코드 수정 → 서버 재시작 필요 ❌
→ **무중단 서비스 원칙 위배**
서비스 등록: 각 서버가 Eureka에 자신의 위치(포트) 등록
동적 조회: API Gateway가 Eureka에 질의 → 사용 가능한 서버 리스트 반환
1. Order 서버(8082, 8084) → Eureka에 등록
2. FE 요청 → API Gateway
3. Gateway → Eureka 질의: "Order 서버 어디있어?"
4. Eureka → "8082, 8084 사용 가능" 응답
5. Gateway → 로드밸런싱으로 분배
Gateway의 Eureka 클라이언트가 로드밸런싱을 수행한다.
로드밸런싱은 부하분산 알고리즘으로, Round Robin(순차/무작위), Least Connection(가장 한가한 서버) 등이 있다.
즉, Eureka가 반환한 서버 리스트 중 Gateway가 로드밸런싱 알고리즘으로 분배하는 것
Eureka가 반환한 서버들(8082, 8084) 중
Round Robin 또는 부하량 기준으로 균등 분배
Order ←→ Eureka ←→ Product
Order ←→ Eureka ←→ Member
결과: 서버 추가/제거 시 코드 수정 없이 자동 대응, 무중단 확장 가능
재고 조회는 Product에서 반드시 기다렸다가 주문을 발생해야 하므로 HTTP 요청으로 동기 처리
하지만 재고 감소는 비동기로 처리
주문 발생 → Kafka 메시지 발행 → Product가 메시지 소비 → 재고 감소
재고 조회: 동기(HTTP) ← 정확성 최우선
재고 감소: 비동기(Kafka) ← 성능 최우선, 재고 일관성보다 처리량 중시
환경 설정 중앙화
각 서비스별 분산된 설정:
• Member: DB URL, Redis 호스트
• Order: Kafka 토픽, DB 연결정보
• Product: Redis TTL, DB 풀사이즈
→ Config Server로 통합 관리
장점
• 설정 변경 → 각 서버 재시작 ❌
• Git 연동 → 코드처럼 버전관리
• 환경별 설정(Dev/Staging/Prod) 분리
"회로 차단기" 패턴
정상: Order → Product (HTTP 호출)
↓ Product 느리거나 불안정
서킷 OPEN → Order 즉시 실패 응답 (대기 X)
↓ 일정시간 후
서킷 HALF-OPEN → Product 테스트 호출
↓ 성공 → CLOSE / 실패 → OPEN 유지
CLOSED → OPEN: 연속 실패 N회
OPEN → HALF: 일정시간 경과
HALF → CLOSED: 테스트 성공
1. 완전 다운 → Circuit Breaker OPEN → 빠른 실패 응답 ✓
2. 좀비 상태(응답 30초) → 사용자 대기 30초 → 타임아웃
→ Circuit Breaker가 3초 내 응답없음 판단 → OPEN ✓
결과: 느린 서버로부터 빠른 실패 보장, 시스템 전체 안정성 확보