Spring/spring_old

04. Spring Cloud, Microservices 관련

slow333 2023. 1. 25. 17:26

기존의 서비스 구조는 Monolith 구조로 

  •  하나를 수정하면 전체에 영향을 줌
  •  하나의 서비스 흐름을 가짐
  • 개발팀의 분리, 관리, 비포 까지 시간이 흐를 수록 복잡도 증가
  • 새로운 기술 적용 시 전체 서비스가 영향을 받아 기술변경이 쉽지 않음

이를 수정하기 위해 SOA가 나옴(Service Oriented Architecture)

  • 개별 항목(서비스)을 개별 서비스로 구성
  • 서비스 별로 영향을 적게 받음(loosed coupling)
  • 서비스 간 통신을 위해 SOAP를 이용 함(이를 위해 ESB가 필요)
  • SOA와 Microservices는 결국 개념에서 같음

Microservices는 

  • REST API를 이용해서 데이터를 주고 받음
  • 소규모의 독립적인 구성요소로 구분하여 개발하는 방식
  • 하나의 마이크로서비스는 독립적으로 디자인, 개발, 배치, 관리됨
  • 이러한 서비스를 배포/분배/정의 하기 위해 Gateway 가 필요(API Gateway)
  • 개별 서비스를 cloud에 올려서 서비스 별로 관리함(서비스별로 자원 할당 및 관리 가능)

 

client                                   WEB                       MOBILE

-------------------------------------------------------------------------------------

                                                          ↕

server                             API Gateways(서비스 분배)

                                                          ↕

                   ----------------------------------------------------------------------

                     고객관리     ↔         경매관리     ↔      품목관리 등

                   -----------------------------------------------------------------------

                           ↕                                                          

                       고객DB                    경매DB              품목DB

 

장단점

장점 단점
- 작은 코드 베이스를 가지므로 관리 용이
- 개별 컴포넌트로 스케일링이 쉬움
- 다양한 기술을 적용 가능
- 결함을 고립 시킬수 있음
- 동시에 작업하는 더 작은 팀 구성 가능
- 독립적인 배포 가능
- 서비스 간의 강한 일관성(ACID) 어려움
- 분산 환경으로 디버깅과 추적이 어려움
- End to End 테스트의 필요성 증가
- 애플리케이션 개발과 배포 방법이 중요
- 서비스간 호출에 따른 켜뮤니케이션 비용 증가

이를 개선하기 위해 다양한 방법이 존재함

단점 해결책 Spring Cloud
서비스 gateway gateway zuul 1.0 / 2.0 
spring cloud gateway
다수의 필요한 서비스 찾기 서비스 디스커버리 Eureka
다수 서비스의 인스턴스를 어떻게  클라이언트 사이드 로드 밸런싱 Ribbon
개별적인 서비스가 응답하지 않을 때 결함 허용 Circuit-Breaker/Hystrix
보안, 속도 제한과 같은 서비스 접근 제어 서비스 보안 OAuth2
다수의 서비스 간 상호 통신 HTTP/메시징 Feign/Spring Cloud Stream
서비스 간 ACID 달성은 ? CQRS Conductor/Camel/...

* 전체 서비스에 대해 중앙집중관리는 Spring Cloud config에서 수행함

 

 

 

 

 

'Spring > spring_old' 카테고리의 다른 글

08. MVC Controller 생성  (4) 2023.01.26
05. Spring Cloud Config  (0) 2023.01.25
03. Test 구성  (0) 2023.01.25
02. project coding  (0) 2023.01.25
Spring boot project 개요  (0) 2023.01.25