기존의 서비스 구조는 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 |