본문 바로가기
IT/Spring Cloud

Spring Cloud 시리즈 1 - 개요

by 최고영회 2023. 5. 17.
728x90
반응형
SMALL

들어가기 전 

모놀리틱 아키텍처로 처음에 시작

- 서비스가 커지면서 조직이 나뉜다. (상품팀, 고객관리팀, 접수팀, 주문팀....)

- 공통코드를 .jar 로 만들고 각자 repository 로 관리하고 개발하고 merge 한다. 

- conflict 발생, 배포는 누가? 각 팀의 일정이 다른데? QA 는 어떻게?

- 모놀리틱 아키텍처는 단순하고 배포가 쉽고 scale-out 이 단순하다. 

  하지만 무겁고 start 가 느리고 기술 stack 을 바꾸기 어렵고 결합도가 높으며 코드 책임 한계와 소유권이 불투명 하다.

- 이쯤에서 회사는 결정을 하게 된다. 

  새로운 언어, 깔끔한 코드로 전면 재개편 하거나 (차세대 프로젝트), MSA 플랫폼을 구축하며 기존 Legacy를 교살 한다.

 

MSA 아키텍처 

- 각 서비스간 network 를 통해 (보통 HTTP) 연결 (다른 서비스의 자원을 직접 연결하면 절대 안됨)

- 독립된 배포 단위

- 각 서비스는 쉽게 교체 가능해야 하고 

- 각 서비스는 기능 중심으로 구성되어야 하며 

- 각 서비스에 적합한 프로그래밍 언어, 데이터베이스, 환경으로 만들고

- 서비스는 크기가 작고, 상황에 따라 경계를 정하고, 자율적으로 개발되고, 분산되고, 자동화 된 프로세스로 구축/배포 되어야 한다. 

함께 읽으면 좋은 글 >> https://kimyhcj.tistory.com/entry/Microservice-Architecture

 

Microservice Architecture

Microservice Architecture Maven module 개발 방식을 시스템 아키텩처에 대한 시선으로 설명하면 microservice architecture 이며 이에 대한 이해도를 높여보자. ​ Monolithic Architecture Microservice Architecture를 알아보

kimyhcj.tistory.com

https://kimyhcj.tistory.com/entry/SaaS-%EC%9D%91%EC%9A%A9-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EB%B0%A9%EB%B2%95%EB%A1%A0-Twelve-factor

 

SaaS 응용 프로그램을 구축하기 위한 방법론 (Twelve factor)

최근 소프트웨어를 서비스 형태로 제공하게 되면서, 웹앱 혹은 SaaS(Software As A Service)라고 부르게 되었다. Twelve-factor app 은 아래와 같은 SaaS앱을 만들기 위한 방법론이다. - 설정 자동화를 위한 절

kimyhcj.tistory.com

 

Application 은 점차 SaaS 화 되어가고 있고 SaaS 화 되기 위해 MSA 구조를 따라 가고 있다. 

복잡한 형태의 MSA App 들이 Cloud 환경에서 잘 돌아가려면 많은것들이 고려되어야 하며 

이를 위해 Spring Cloud 는 다양한 Main Project 들을 제공한다. 

 

Spring 생태계를 간단히 살펴보면..

기본적인 Spring Web, Spring Integration, Spring Security, Spring Data... Spring Boot 까지 아는 상태에서 Spring Cloud 를 접하는 것을 권장한다. (당연히 MSA 에 대한 이해도도 함께 있는것이 좋다)


Spring Cloud 는

Spring Boot 위에 구축되었으며 분산 아키텍처를 사용하는 애플리케이션 구축을 단순화 한다. 

즉, 분산 시스템에서 개발자가 필요한 공통 패턴 (ex. 구성 관리, 서비스 검색, 마이크로 프록시, 분산 세션, 클러스터 상태 등..)을 구현하는 서비스 및 애플리케이션을 신속하게 구축할 수 있게 해 준다는 말이다. 

 

 

Main Project 는 

아래와 같으며 Main Project 들을 하나씩 살펴보려 한다. 

Spring Cloud Config

 - 중앙 집중식 외부 구성 관리

Spring Cloud Netflix

 - 다양한 Netflix OSS 구성 요소 (Eureka, Hystrix, Zuul, Archaius 등)와 통합

Spring Cloud Bus

 - 서비스/서비스 인스턴스를 분산 메시징과 함께 연결하기 위한 이벤트 버스 

 - 클러스터 전체에 상태 변경을 전파하는데 유용

Spring Cloud Open Service Broker

 - Open Service Broker API를 구현하는 서비스 브로커 구축을 위한 시작점을 제공

Spring Cloud Consul

 - Hashicorp Consul을 통한 서비스 검색 및 구성 관리

Spring Cloud Sleuth

 - Zipkin, HTrace 및 로그 기반(ex. ELK) 추적과 호환되는 Spring Cloud application용 분산 추적

Spring Cloud Data Flow

 - 최신 런타임에서 구성 가능한 마이크로서비스 애플리케이션을 위한 클라우드 네이티브 오케스트레이션 서비스.

Spring Cloud Stream

 - 외부 시스템에 연결할 수 있는 애플리케이션을 빠르게 빌드하기 위한 경량 이벤트 기반 마이크로서비스 프레임워크

 - ex) Spring Boot app 간 Apache Kafka / RabbitMQ를 사용하여 메시지를 보내고 받는 간단한 선언적 모델 

Spring Cloud Stream Applications

 - Spring Cloud Stream 의 바인더 추상화를 사용하여 Apache Kafka / RabbitMQ 등과 같은 외부 미들웨어 시스템과의 통합을 제공하는 즉시 사용가능한 Spring Boot app.

Spring Cloud Task

 - 제한된 양의 데이터 처리를 수행하는 애플리케이션을 빠르게 구축하기 위한 마이크로서비스 프레임워크 

Spring Cloud Task App Starters

 - 한정된 데이터 처리 기간 후에 종료/중지되는 Spring Batch 작업을 포함한 모든 프로세스 Spring Boot app.

Spring Cloud Zookeeper

 - Apache Zookeeper를 사용한 서비스 검색 및 구성관리 

Spring Cloud Contract

Spring Cloud Gateway

 - Project Reactor를 기반으로 하는 지능적이고 프로그래밍 가능한 라우터 

Spring Cloud OpenFeign

 - Spring 프로그래밍 모델 관용구에 대한 자동 구성 및 바인딩을 통해 Spring Boot app에 대한 토합 제공 

Spring Cloud Function

 - 함수를 통한 비즈니스 로직 구현을 지원하고 독립 실행형(로컬 또는 PaaS에서) 실행 기능을 지원 

 

 

 

Spring Cloud 위 기술을 활용한 MSA 구성을 그려보면 아래와 같다. (실행시간 관점)

그림 참조 > https://developers.redhat.com/blog/2016/12/09/spring-cloud-for-microservices-compared-to-kubernetes

여기에 MSA 에서 중요한 패키징, 지속적인 통합, 스케일링, 고가용성, 자가치유 등을 고려해서 살펴봐야 하며 

이렇게 되면 자연스럽게 Spring Cloud 와 Kubernetes의 관계를 살펴보게 될 것이다. 

일단은 Spring Cloud 부터 공부해 보자. 

728x90
반응형
LIST