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.

우아한 모노리스

5,876 views

Published on

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

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

이 자료는 2019년 KSUG 세미나에서 진행한 "잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다"를 기반으로 몇가지 내용을 추가하고, 전개 방식을 다듬어 조금 더 친절하게 만들어졌습니다.

Published in: Engineering
  • Be the first to comment

우아한 모노리스

  1. 1. https://github.com/arawn/building-modular-monoliths-using-spring
  2. 2. SpringApplication application = new SpringApplicationBuilder() .sources(MonolithsApplication.class) .child(FirstServiceConfiguration.class) .sibling(SecondServiceConfiguration.class) .sibling(ThirdServiceConfiguration.class) .build(); application.run(args);
  3. 3. }
  4. 4. ✔ 단일 프로젝트에 모든 코드가 모여있다 ✔ 시스템 구조가 간결하고, 빠르게 구축할 수 있다 ✔ 테스트 및 배포 파이프라인 구성이 간단하다 ✔ 인프라스트럭처 구축와 운용이 간결하다
  5. 5. ✔ 시스템을 조직 구조에 맞게 더 적절히 정렬 할 수 있다 ✔ 서비스를 독립적으로 배포 또는 확장 할 수 있다 ✔ 서비스 장애가 시스템 전체 장애로 전파되지 않는다 ✔ 문제 해결에 특화된 다양한 기술을 도입할 수 있다
  6. 6. https://github.com/odrotbohm/sos
  7. 7. https://gotober.com/2018/sessions/515/modular-monoliths
  8. 8. https://engineering.shopify.com/blogs/engineering/deconstructing-monolith-designing-software-maximizes-developer-productivity
  9. 9. https://en.wikipedia.org/wiki/Hexagonal_architecture_(software) usecase repository notifications Application Core Ports commands jdbc/restful message/email message restful/userinterface Ý
  10. 10. . https://github.com/arawn/building-modular-monoliths-using-spring
  11. 11. catalogs orders shipments . └── orders    ├── domain    │   ├── entity    │   │   ├── Order.java    │   │   ├── OrderProduct.java    │   │   ├── OrderProductMapper.java    │   │   ├── OrderRepository.java    │   │   └── ShippingDesk.java    │   └── usecase    │   ├── Orders.java    │   └── OrderProcessing.java   ├── integrate    ├── data    └── web . └── catalogs    ├── domain   ├── integrate    ├── data    └── web . └── shipments    ├── domain   ├── integrate    ├── data    └── web
  12. 12. https://martinfowler.com/bliki/PresentationDomainDataLayering.html
  13. 13. <<Interface>> Catalogs ShipmentOrderService OrderCatalogService Order <<Interface>> OrderProductMapper <<Interface>> ShippingDesk CatalogManager <<Interface>> DeliveryProcessingDeliveryManager catalogs orders shipments
  14. 14. https://youtu.be/dJ5C4qRqAgA
  15. 15. step_1: modularization https://github.com/arawn/building-modular-monoliths-using-spring
  16. 16. <<Interface>> ProductRepository OrderCatalogService <<Interface>> OrderProductMapper InMemory ProductRepository CatalogManager <<Interface>> Catalogs
  17. 17. <<Interface>> ProductRepository OrderCatalogService <<Interface>> OrderProductMapper InMemory ProductRepository CatalogManager <<Interface>> Catalogs
  18. 18. service module module module
  19. 19. step_2: encapsulation and separately https://github.com/arawn/building-modular-monoliths-using-spring
  20. 20. Services Repositories Root WebApplicationContext (containing middle-tier services, datasources, etc) DispatcherServlet HandlerMapping Controllers ViewResolver Servlet WebApplicationContext (containing controllers, view resolvers, and other web-related beans)
  21. 21. OrderCatalog Shipment
  22. 22. OrderCatalog Shipment
  23. 23. step_3: context boundaries https://github.com/arawn/building-modular-monoliths-using-spring
  24. 24. OrderCatalog Shipment
  25. 25. step_4: modularizing configurations https://github.com/arawn/building-modular-monoliths-using-spring
  26. 26. serviceservice module module
  27. 27. step_5: decomposing system and stand alone services https://github.com/arawn/building-modular-monoliths-using-spring
  28. 28. ✓ Modular Monoliths • Simon Brown ✓ Deconstructing the Monolith • Shopify ✓ Modulithic Applications with Spring Boot • Oliver Drotbohm ✓ 패턴 지향 소프트웨어 아키텍처 ✓ 클린 아키텍처 ✓ 마이크로서비스 아키텍처 구축 ✓ 도메인 주도 설계 핵심 ✓ 오브젝트: 코드로 이해하는 객체지향 설계 ✓ 자바 9 모듈 프로그래밍

×