안녕하세요! 오늘은 최근 소프트웨어 개발 분야에서 주목받고 있는 모듈러 모놀리식 아키텍처(Modular Monolithic Architecture, MSA)에 대해 이야기해보려고 합니다.
MSA는 전통적인 모놀리식과 마이크로서비스 아키텍처의 중간 지점에 위치한 개발 방식으로, 효율성과 유연성을 동시에 추구합니다.
- 모노리식은 관리가 단순하고 성능이 좋지만 확장성과 유연성에 한계가 있습니다.
- 마이크로서비스는 독립성과 확장성이 뛰어나지만 관리 복잡성이 높습니다.
- 모듈러 모노리식은 이 두 아키텍처의 중간 지점에 위치하며, 관리 용이성과 모듈화된 구조의 이점을 제공합니다.
1. Monolithic Architecture
장점:
- 단순한 개발 및 배포: 전체 애플리케이션을 하나로 관리합니다.
- 성능: 내부 호출이 빠르고 간단합니다.
- 초기 개발 용이: 작은 규모의 애플리케이션에 적합합니다.
단점:
- 확장성 제한: 전체 애플리케이션을 확장해야 합니다.
- 유연성 부족: 새로운 기술 적용이 어렵습니다.
- 고장 시 전체 시스템 영향: 하나의 오류가 전체 시스템에 영향을 줄 수 있습니다.
2. MicroService Architecture
장점:
- 독립적 배포 및 확장: 각 마이크로서비스는 독립적으로 배포 및 확장 가능합니다.
- 기술 다양성: 서로 다른 기술 스택을 사용할 수 있습니다.
- 고장 격리: 하나의 서비스에 문제가 생겨도 전체 시스템에 영향을 덜 미칩니다.
단점:
- 복잡한 네트워킹 및 통신: 서비스 간의 통신이 복잡해질 수 있습니다.
- 데이터 관리 어려움: 데이터 일관성 유지가 어렵습니다.
- 개발 및 운영 복잡성 증가: 여러 서비스 관리 필요.
3. Modular monolithic Architecture
장점:
- 모듈화로 관리 용이: 기능별로 모듈화되어 관리가 용이합니다.
- 단순한 배포 및 운영: 모노리식의 장점을 유지하면서도 모듈화된 구조를 가집니다.
- 점진적인 마이그레이션: 필요에 따라 모듈을 마이크로서비스로 분리할 수 있습니다.
단점:
- 모듈 간의 강한 연결성: 모듈 간의 종속성 관리 필요.
- 규모가 커질 수록 복잡성 증가: 큰 규모의 애플리케이션에서는 관리가 어려워질 수 있습니다.
- 기술적 제한성: 전체 애플리케이션이 동일한 기술 스택을 사용해야 할 수 있습니다.
모듈러 모노리식 관련 서비스 링크
1. 모듈러 모노리식 아키텍처를 위한 스프링부트
https://github.com/spring-projects/spring-modulith
- Spring Modulith는 모듈러 모노리식 아키텍처를 위한 Spring Boot 기반 프레임워크입니다. 이 프레임워크는 애플리케이션을 느슨하게 결합된 모듈로 구성하는 데 도움을 주어, 각 모듈이 독립적으로 개발 및 테스트될 수 있도록 합니다. 이를 통해 모듈 간의 명확한 경계를 설정하고, 의존성 관리를 용이하게 하며, 필요에 따라 개별 모듈을 마이크로서비스로 쉽게 마이그레이션할 수 있는 구조를 제공합니다.
2. 서비스 위버 (배포 및 서비스간 통신 관련)
Service Weaver
<!-- Copyright 2022 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless requir
serviceweaver.dev
- Service Weaver는 분산 애플리케이션을 개발, 배포 및 관리하기 위해 설계된 프레임워크
- 개발자는 최소한의 명령으로 애플리케이션을 로컬에서 실행하고 클라우드에 배포 가능하다.
- 프레임워크는 상호 작용을 위해 Go 인터페이스로 표시되는 구성 요소를 활용한다.
[장점]
- 분산 애플리케이션 개발 간소화: 복잡한 네트워킹 세부사항을 추상화하여 분산 실행 기능을 제공하면서도 단일체 시스템 개발 경험을 제공합니다.
- 개발자들이 분산 시스템을 개발할 때 네트워크 구성이나 통신에 대한 복잡한 고려사항 없이, 마치 하나의 일체형 시스템을 개발하듯이 편리하게 작업할 수 있다는 의미이다. 즉, Service Weaver는 분산된 컴포넌트 간의 복잡한 통신과 네트워크 관리를 내부적으로 처리함으로써 개발자가 보다 직관적이고 단순한 방식으로 분산 애플리케이션을 개발할 수 있도록 도와준다.
- 원활한 로컬 및 클라우드 배포: 최소한의 명령어로 로컬에서 애플리케이션을 실행하고 클라우드로 배포할 수 있습니다.
- 하위 호환성 보장: RPC 프로토콜을 사용하여 구성요소 간의 통신을 하위 호환성을 유지하며 관리합니다.
- 네트워킹, 직렬화, 구성요소 복제 및 확장 관리: Service Weaver는 이러한 기능들을 자동으로 처리합니다.
MSA는 소프트웨어 개발에 있어 효율성과 유연성을 동시에 제공하는 현대적인 접근 방식입니다. 각 모듈의 독립성과 전체 애플리케이션의 통합성을 조화롭게 유지하며, 프로젝트의 규모와 요구에 따라 유연하게 적용할 수 있습니다.