Spring Cloud는 마이크로서비스 개발을 위해 다양한 도구와 서비스를 제공하는 스프링 프레임워크의 확장
마이크로서비스 아키텍처 (MSA)를 쉽게 구현하고 운영할 수 있도록 도움
주요 기능
현업에서는 Zuul 사용이 잦다. Spring Cloud Gateway는 버전 업이 잦기 때문.
넷플릭스가 개발한 서비스 디스커버리 서버로, 마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리
주요 특징:
- 서비스 레지스트리: 모든 서비스 인스턴스의 위치를 저장하는 중앙 저장소
- 헬스 체크(Health check): 서비스 인스턴스의 상태를 주기적으로 확인하여 가용성을 보장
넷플릭스가 개발한 클라이언트 사이드 로드 밸런서로, 서비스 인스턴스 간의 부하를 분산
주요 특징:
참고
MSA에서는 호출한 서비스의 장애가 다른 서비스로 전파될 가능성이 있다.
이를 방지하기 위해 장애가 발생한 서비스를 탐지하고, 요청을 보내지 않도록 차단할 필요가 있다. 서킷 브레이커 패턴은 클라이언트 측면에서 장애를 방지하기 위한 도구로써, 실패할 수 있는 작업을 계속 시도하지 않도록 방지한다.
넷플릭스가 개발한 서킷 브레이커 라이브러리로, 서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지
주요 특징:
- 서킷 브레이커 상태: 클로즈드, 오픈, 하프-오픈 상태를 통해 호출 실패를 관리
- Failback: 호출 실패 시 대체 로직을 제공하여 시스템 안정성 확보
- 모니터링: Hystrix Dashboard를 통해 서킷 브레이커 상태 모니터링
Resilience4j는 자바 기반의 경량 서킷 브레이커 라이브러리로, 넷플릭스 Hystrix의 대안으로 개발
주요 특징:
참고 > 구현까지 설명되어 있음
분산 시스템에서 외부화된 설정 정보를 서버 및 클리이언트에게 제공하는 시스템
설정 정보를 외부로 분리한 후, 설정 정보를 변경하였을 때 별도로 재배포가 필요없음
설정 정보를 분리함으로써 보안적인 측면 강화
Spring Cloud Config Server 는 Client 와 설정 정보 저장소 간의 중간 다리 역할 이라고 볼 수 있다.
주요 특징:
Config 서버
: 중앙에서 설정 파일을 관리하고 각 서비스에 제공
: 저장소에 변경 사항 발생 시 Config Server에서 탐지 가능
Config 클라이언트: Config 서버에서 설정을 받아서 사용하는 서비스
설정갱신: 설정 변경 시 서비스 재시작 없이 실시간으로 반영
- **향상된 확장성:** 넷플릭스는 MSA 전환 이후 수천 개의 마이크로서비스를 운영하며, 글로벌 사용자 증가에 유연하게 대응할 수 있었습니다.
- **높은 가용성:** 서비스 장애 시 다른 서비스에 영향을 미치지 않고 독립적으로 복구할 수 있어, 사용자에게 지속적인 서비스를 제공할 수 있었습니다.
- **빠른 배포 주기:** 새로운 기능을 신속하게 개발하고 배포할 수 있어, 사용자 요구에 빠르게 대응할 수 있었습니다.
참고
MSA에서 여러 서비스를 호출한다. 서비스 호출 시 IP주소, Port를 이용하는데, 서비스가 동적으로 변경되는 일이 잦아 IP가 동적으로 변경되는 일이 잦아졌다. 그래서 한 서비스가 다른 서비스를 호출할 때 서비스의 위치 (IP & Port) 를 알아낼 수 있는 기능이 필요하다.
이를 서비스 디스커버리 Service Discovery 라고 한다.
참고
Client Side : 클라이언트가 서비스 호출 시 클라이언트가 디스커버리 서버에 서비스의 위치 확인
Server Side : 클라이언트가 로드 밸런서 (=proxy 서버) 호출 시 로드 밸런서가 디스커버리 서버에 서비스의 위치 확인
서비스 레지스트리는 서비스의 위치 (IP & Port) 정보를 저장하는 데이터베이스이며, 항상 최신 정보를 유지해야하며 고가용성이 필요하다
참고
서버에 가해지는 부하(=로드)를 분산(=밸런싱)해주는 장치 또는 기술
블로그 내에 scale-up, scale-out, 로드밸런싱 알고리즘 등 정보 있음


+) Spring 페이지의 Learn, reference 통해 학습해보자!
SNAPSHOT 버전은 개발 중이므로 웬만하면 사용 지양
버전 읽는 법
x.x.xx
첫번째 자리 : 이전 버전과 다른 업데이트, 버전 수정 시 호환되지 않을 가능성
두번째 자리 : 새로운 기능의 추가
마지막 자리 : 패치 버전 (오류 개선 등)
Spring Initializr사이트 에서 스프링 프로젝트를 생성하면 버전에 맞게 dependency (build.gradle 파일), 언어 등등 생성해준다.
IntelliJ에서도 제공되는 기능이지만 다른 프로그램 사용 시 제공되지 않을 수도 있다.