Spring Cloud는 마이크로서비스 아키텍처를 구축, 배포 및 운영하기 위한 여러 스프링 프레임워크 기반의 도구 및 라이브러리 모음입니다. 이는 분산 시스템 개발에 필요한 공통 패턴을 간편하게 구현할 수 있도록 지원합니다.
다음과 같은 것들이 있습니다.
특징만 간단히 살펴보고 넘어가겠습니다.
1. 스프링 클라우드 컨피그
2. 스프링 클라우드 서비스 디스커버리
논리적 이름
을 사용하여 서버의 비지니스 로직을 호출3. 스프링 클라우드 로드 밸런서와 Resilience4j
4. 스프링 클라우드 API 게이트웨이
중앙 집중화
5. 스프링 클라우드 스트림
6. 스프링 클라우드 슬루스
7. 스프링 클라우드 시큐리티
클라우드 네이티브가 무엇인지 알아보고, 구축 방법에 대해서 알아보기 전에 클라우드 애플리케이션 유형 두가지를 살펴보고 넘어갑시다.
둘의 주요 차이점은 클라우드 환경에 대한 적용 수준입니다.
클라우드 레디 애플리케이션은 기존 애플리케이션을 클라우드에서 운영할 수 있도록 적응시키는 반면, 클라우드 네이티브 애플리케이션은 클라우드의 모든 기능을 극대화하여 설계 및 구축됩니다.
클라우드 네이티브 애플리케이션은 클라우드 환경에서 발휘할 수 있는 모든 장점(예: 높은 확장성, 유연한 리소스 관리, 빠른 배포 주기 등)을 완전히 활용하는 것을 목표로 합니다.
클라우드 레디 애플리케이션은 클라우드 환경에서 운영될 수 있도록 설계된 애플리케이션입니다. 이러한 애플리케이션은 클라우드의 일부 기능을 활용하지만, 클라우드 네이티브 애플리케이션만큼 클라우드의 모든 기능과 서비스를 완전히 활용하지는 않습니다.
특징
클라우드 네이티브 애플리케이션은 클라우드 환경에서 최적으로 작동하도록 처음부터 설계되고 구축된 애플리케이션입니다. 이러한 애플리케이션은 클라우드의 모든 장점을 최대한 활용하여, 높은 가용성, 확장성 및 유연성을 제공합니다.
특징
12 팩터 앱은 클라우드 네이티브 마이크로서비스를 만들때 참고할 수 있는 모범 사례 지침입니다.
이 방법론은 분산 서비스를 구축할 때 동적인 확장과 기본 사항에 관한 개발 및 설계 지침의 모음입니다.
🚨 저 같은 경우 이것을 보고 이런 것이 있다라는 정도로만 이해하고 넘어갔습니다. 하지만 최종적으로 저희 프로젝트에서 문제가 되었던 부분이 있는데 그것이 코드 베이스 설계를 잘못했다는 점입니다.
단순히 보고 넘어갈 것이 아닌 설계 단계에서 꼼꼼하게 체크를 해줄 필요가 있습니다. 1번의 코드 베이스쪽에 문제가 발생한 시점에 더이상 수정하기 어려운 환경이 만들어 졌고 만약, 실제 배포를 고려한 프로젝트였다면 치명적인 문제가 되었을 것입니다.
코드 베이스: 각 마이크로서비스는 소스 제어 가능한 단일 코드베이스를 가진다.
의존성: 자바에서는 메이븐이나 그레이들 같은 빌드 도구로 사용하여 의존성 선언(버전 번호 주의)
구성 정보: 소스 코드에 구성 정보를 추가하는 것이 아닌, 구성 정보를 배포할 마이크로서비스와 완전히 분리해서 관리하는 것이 최선입니다.
백엔드 서비스: 애플리케이션 코드의 변경 없이 로컬 및 써드 파티와 연결하는 데 배포 구현체를 교체할 수 있는지 확인해야 합니다.
빌드, 릴리스, 실행: 애플리케이션 배포 단계, 즉 빌드, 릴리스, 실행 단계가 철처히 분리되어야 한다.
프로세스: 마이크로서비스는 항상 무상태가 되어야 하며 요청받은 트랜잭션을 수행하는 데 필요한 정보만 포함해야 합니다.
포트 바인딩: 특정 포트로 서비스를 게시하는 것을 의미합니다.
동시성: 모범 사례는 클라우드 네이티브 애플리케이션이 프로세스 모델을 사용해서 확장해야 한다고 설명한다. 수직 확장(Scale up)대신 더 많은 인스턴스를 시작해서 수평 확장(Scale out)
폐기 가능: 다른 서비스에 영향을 주지 않고 새로운 인스턴스로, 실패한 인스턴스를 제거할 수 있다는 의미입니다.
개발 및 운영 환경 일치: 가능한 유사한 여려 환경(개발, 스테이징, 운영 환경 등)을 갖게 된다는 것을 나타냄. 환경에는 항상 유사한 버전의 인프라 및 서비스뿐 아니라 배포된 코드도 포함되어야 합니다.
로그: 로그는 이벤트 스트림입니다. 출력된 로그를 수집하고 중앙 저장소에 기록하는 로그스태시(Logstash)나 플루언트디(Fluentd)와 같은 도구로 관리해야 합니다.
관리 프로세스: 데이터 이전이나 변환 같은 서비스 관리 작업은 임시변통해서는 안되며 소스 코드 저장소에서 관리 및 유지되는 스크립트로 수행되어야 합니다.