Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다

11,345 views

Published on

마이크로서비스 스타일로 만들어진 시스템을 모노리틱 스타일로 이관한 사례와 함께 스프링을 이용해 모듈형 모노리스(modular monoliths)를 만든 경험을 바탕으로 모노리틱/마이크로서비스 보다 본질적인 문제를 제기하고, 문제 해결을 위한 생각을 공유합니다.

https://github.com/arawn/building-modular-monoliths-using-spring

Published in: Engineering
  • Be the first to comment

잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다

  1. 1. 대체 가능성 조직 부합성 확장성 회복성 조합성 기술 이기종성 배포 용이성
  2. 2. 대체 가능성 조직 부합성 확장성 회복성 조합성 기술 이기종성 배포 용이성
  3. 3. Presentation Presentation Domain Data Domain Data Presentation Domain Data Presentation Domain Data
  4. 4. usecase repository notifications Application Core Ports commands jdbc/restful message/email message restful/userinterface Ý
  5. 5. . └── catalogs    ├── domain   ├── integrate    ├── data    └── web . └── orders    ├── domain    │   ├── entity    │   │   ├── Order.java    │   │   ├── OrderProduct.java    │   │   ├── OrderProductMapper.java    │   │   ├── OrderRepository.java    │   │   └── ShippingDesk.java    │   └── usecase    │   ├── Orders.java    │   └── OrderProcessing.java   ├── integrate    ├── data    └── web . └── shipments    ├── domain   ├── integrate    ├── data    └── web catalogs orders shipments
  6. 6. shipments <<Interface>> Catalogs ShipmentOrderService OrderCatalogService Order <<Interface>> OrderProductMapper <<Interface>> ShippingDesk CatalogManager <<Interface>> DeliveryProcessingDeliveryManager orderscatalogs
  7. 7. ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓
  8. 8. step_1: modularization https://github.com/arawn/building-modular-monoliths-using-spring
  9. 9. OrderCatalogService ShipmentOrderService :Order <<Interface>> OrderProductMapper <<Interface>> ShippingDesk Product <<Interface>> DeliveryProcessing Delivery :CatalogManager mapFrom() register() <<Interface>> OrderProcessing place() getProduct() prepareDelivery() DeliveryManager prepare() <<Interface>> Catalogs Catalogs Module Shipments Module Orders Module placeOrder()
  10. 10. <<Interface>> Catalogs OrderCatalogService <<Interface>> OrderProductMapper CatalogManager <<Interface>> ProductRepository InMemory ProductRepository package monoliths.catalogs.data.simple; @Repository public class InMemoryProductRepository implements ProductRepository { // }
  11. 11. <<Interface>> Catalogs OrderCatalogService <<Interface>> OrderProductMapper CatalogManager <<Interface>> ProductRepository InMemory ProductRepository
  12. 12. project project project project
  13. 13. step_2: encapsulation and separately https://github.com/arawn/building-modular-monoliths-using-spring
  14. 14. Services Repositories Root WebApplicationContext (containing middle-tier services, datasources, etc) DispatcherServlet Controllers ViewResolver HandlerMapping Servlet WebApplicationContext (containing controllers, view resolvers, and other web-related beans)
  15. 15. step_3: context boundaries https://github.com/arawn/building-modular-monoliths-using-spring
  16. 16. @EnableShipmentModule@EnableOrderModule@EnableCatalogModule
  17. 17. step_4: modularizing configurations https://github.com/arawn/building-modular-monoliths-using-spring
  18. 18. The devil is in the detail
  19. 19. https://github.com/odrotbohm/moduliths Moduliths https://across.dev Across Framework
  20. 20. ✓ Modular Monoliths • Simon Brown ✓ Deconstructing the Monolith • Shopify ✓ Modulithic Applications with Spring Boot • Oliver Drotbohm ✓ 패턴 지향 소프트웨어 아키텍처 ✓ 클린 아키텍처 ✓ 마이크로서비스 아키텍처 구축 ✓ 도메인 주도 설계 핵심 ✓ 오브젝트: 코드로 이해하는 객체지향 설계 ✓ 자바 9 모듈 프로그래밍

×