드디어 네번째 장이다!
Microservices Architecture
- 작고, 재사용성있고, 확장성 있는 서비스를 개발하는 것을 목표로하는 아키텍쳐 패턴임
- Microservice는 큰 시스템을 각각의 독립적이면서 협력하는 서비스로 쪼갤 수 있게함
- 이를 통해 관리하기 어려움 커다란 Monolithic한 애플리케이션 지옥에서 탈출 할 수 있음
- polyglot devices such as wearables, Internet of Things (IoT), mobile, desktop, and web 의 개발에 매우 유용하다.
마이크로서비스 아키텍처의 키포인트
- 기술 스택, 프레임워크, 언어에 독립적으로 배포 할 수 있다.
- Domain-Driven Service, 즉 하나만 잘하면 되는 작은 서비스의 배포에 집중할 수 있다.
- 잘 정의된 인터페이스와 최소한의 기능
- 연쇄적인 에러와 동기적 호출을 하지 않는다. - Failure에 대한 reactive design
- 모든 서비스는 자신의 데이터를 가지고 다른 서비스와 커뮤니케이션 하는데 Event/Messages를 활용한다.
- 모든 서비스는 다른 서비스에 독립적이고 (보통 컨테이너 단위) automatic하게 확장할 수 있다.
마이크로서비스의 장점
- 개별 컴포넌트의 확장성 👍
- 배포가 쉽다.
- 유지보수가 쉽다.
마이크로서비스를 고려할때 유의해야할 점
- 분산 서비스간의 consistency를 유지하는 것이 어렵다.
- Monolithic 구조보다 debug와 issue traking이 어렵다.
How Does DDD Relate to Microservices?
DDD의 철학은 Microservices와 찰떡궁합이다.