Spring Cloud Basic
Spring Cloud는 분산 시스템, 특히 마이크로서비스 아키텍처(MSA)를 구축할 때 공통적으로 발생하는 문제들을 해결하기 위한 기능들 제공하는 프레임워크다.
| 핵심 기능 | 해결 모듈 | 기능 요약 |
|---|---|---|
| 서비스 디스커버리 | Eureka | 서비스 인스턴스의 동적 위치를 이름으로 찾고 관리 |
| 라우팅 및 API 게이트웨이 | Spring Cloud Gateway | 모든 요청의 단일 진입점 역할 및 라우팅, 필터링 |
| 중앙 집중식 설정 | Spring Cloud Config | 여러 서비스의 설정 파일 중앙 관리 |
| 탄력성 및 복원력 | Resilience4J | 장애가 전체 시스템으로 전파되는 것을 방지 |
Spring Cloud 모듈 리스트
Section titled “Spring Cloud 모듈 리스트”Spring Cloud는 다양한 하위 프로젝트(모듈)로 구성되어 있으며, 필요한 기능에 맞게 적절한 모듈을 선택하여 사용할 수 있다.
| 모듈 이름 | 주요 기능 |
|---|---|
| Spring Cloud Gateway | API 게이트웨이, 라우팅, 필터링(비동기 논블로킹) |
| Spring Cloud Netflix Eureka | 서비스 탐색(Service Discovery) |
| Spring Cloud Config | 중앙화된 외부 설정 관리 |
| Spring Cloud OpenFeign | 선언적(Declarative) REST 클라이언트 |
| Resilience4j | 회복성 패턴 (서킷 브레이커, 재시도 등) |
| Spring Cloud Sleuth | 분산 추적 (로깅) |
| Spring Cloud Stream | 메시지 기반 마이크로서비스 구축 프레임워크 |
| Spring Cloud Bus | 설정 변경 등 상태 변경 이벤트를 여러 인스턴스에 전파 |
Spring Cloud Gateway
Section titled “Spring Cloud Gateway”시스템의 모든 외부 요청이 거쳐가는 단일 진입점(Single Point of Entry) 역할을 하는 API 게이트웨이로, 비동기 논블로킹 방식으로 동작하여 높은 성능을 제공한다.
- Route: ID, 목적지 URI, 조건(Predicate) 및 필터(Filter)로 구성
- Predicate: 들어온 요청을 평가하여 Route와 매칭시키는 조건. 경로(Path), 헤더(Header), 쿠키(Cookie) 등 다양한 조건으로 설정 가능
- Filter: 매칭된 요청이 다운스트림 서비스로 전달되기 전후에 특정 로직을 수행
- GatewayFilter: 특정 라우트에만 적용
- GlobalFilter: 모든 라우트에 공통으로 적용
Eureka
Section titled “Eureka”MSA 환경에서 각 서비스의 위치 정보(IP, Port)를 등록하고 조회할 수 있는 서비스 디스커버리(Service Discovery) 서버이다.
- 동작 방식
- Register(등록): 각 서비스 인스턴스(Eureka Client)는 시작 시 자신의 메타데이터(이름, IP, 포트 등)를 Eureka Server에 등록
- Renew(갱신): 클라이언트는 주기적으로 하트비트(Heartbeat)를 서버에 보내 자신이 살아있음을 알림
- Fetch Registry(목록 조회): 클라이언트는 서버로부터 전체 서비스 등록 정보를 주기적으로 가져와 로컬에 캐싱
- Cancel(취소): 서비스가 정상적으로 종료될 때, 서버에 등록 해제 요청
- 특징
- Self-Preservation Mode(자기보호 모드)
- 목적: 개별 서비스의 장애가 아니라, 일시적인 네트워크 단절로 인해 다수의 클라이언트로부터 하트비트를 받지 못하는 상황을 대비한 방어 메커니즘
- 동작: Eureka Server가 다수의 클라이언트로부터 하트비트를 받지 못하는 경우 일시적인 문제로 판단하여 기존 레지스트리를 유지
- 만약 제거하면 네트워크가 복구되었을 때 정상적인 서비스들이 서로를 찾지 못하는 연쇄 장애로 이어질 수 있음
- Client-Side Load Balancing
- Eureka 자체는 로드 밸런서가 아니며,
Client-Side Load Balancing방식 사용 - 클라이언트(Spring Cloud Gateway나 RestTemplate)가 Eureka로부터 특정 서비스의 인스턴스 목록을 받아와 자체적으로 요청을 분산 처리
- Eureka 자체는 로드 밸런서가 아니며,
- Self-Preservation Mode(자기보호 모드)