⭐ 모놀리 아키텍처란?
모놀리 아키텍처는 모든 기능이 하나의 코드베이스에 포함되어 있는 소프트웨어 구조입니다.
이는 전통적인 방식으로, 애플리케이션의 모든 부분이 단일 유닛으로 배포되고 운영됩니다.
모놀리 아키텍처에서는 다음과 같은 특징이 있습니다.
장점
- 단순한 배포: 전체 애플리케이션을 한 번에 배포할 수 있어 관리가 용이합니다.
- 일관성: 모든 기능이 하나의 코드베이스에 포함되어 있어 데이터 일관성을 유지하기 쉽습니다.
- 빠른 초기 개발: 간단한 구조 덕분에 초기 개발이 빠르게 진행될 수 있습니다.
단점
- 확장성 문제: 애플리케이션이 커질수록 성능 저하 및 유지보수 어려움이 발생할 수 있습니다.
- 변경의 어려움: 특정 기능을 변경할 때 전체 시스템에 영향을 줄 수 있어 개발 및 배포 과정이 복잡해질 수 있습니다.
- 기술 제약: 모든 기능이 동일한 기술 스택으로 구성되어 있어, 최적의 기술 선택이 어려워질 수 있습니다.
⭐ MSA(마이크로서비스 아키텍처)란?
마이크로서비스는 소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식입니다. 이러한 서비스는 독립적인 소규모 팀에서 보유합니다.
마이크로서비스 아키텍처는 애플리케이션의 확장을 용이하게 하고 개발 속도를 앞당겨 혁신을 실현하고 새로운 기능의 출시 시간을 단축할 수 있게 해 줍니다.
장점
- 유연한 확장성: 특정 서비스만 독립적으로 확장할 수 있어 효율적인 리소스 사용이 가능합니다.
- 기술 다양성: 각 서비스마다 최적의 기술 스택을 선택할 수 있어 성능과 개발 속도를 높일 수 있습니다.
- 변경 용이성: 서비스가 독립적이기 때문에, 하나의 서비스 변경이 전체 시스템에 미치는 영향을 최소화할 수 있습니다.
단점
- 복잡한 배포 관리: 여러 개의 서비스로 인해 배포 및 테스트 과정이 복잡해질 수 있습니다.
- 서비스 간 통신: 서비스 간의 통신이 필요하기 때문에 네트워크 지연 및 장애가 발생할 수 있습니다.
- 모니터링과 로깅의 어려움: 분산 시스템으로 인해 전체 시스템의 상태를 파악하기 어려울 수 있습니다.
⭐ 모놀리식 아키텍처와 마이크로서비스 아키텍처의 차이점
모놀리식 아키텍처의 경우 모든 프로세스가 긴밀하게 결합되고 단일 서비스로 실행됩니다. 따라서 애플리케이션의 한 프로세스에 대한 수요가 급증하면 해당 아키텍처 전체를 확장해야 합니다. 코드 베이스가 증가하게 되면 모놀리식 애플리케이션의 기능을 추가하거나 개선하기가 더 복잡해집니다. 그리고 이러한 복잡성으로 인해 실험에 제한을 받고 새로운 아이디어를 구현하기가 어려워집니다. 종속 관계를 이루며 긴밀하게 결합된 많은 프로세스로 인해 단일 프로세스의 실패로 인한 영향이 증가함에 따라 모놀리식 아키텍처는 애플리케이션 가용성에 대한 위험을 가중시킵니다.
마이크로서비스 아키텍처의 경우, 애플리케이션이 독립적인 구성 요소로 구축되어 각 애플리케이션 프로세스가 서비스로 실행됩니다. 이러한 서비스는 경량 API를 사용하여 잘 정의된 인터페이스를 통해 통신합니다. 서비스는 비즈니스 기능을 위해 구축되며 서비스마다 한 가지 기능을 수행합니다. 서비스가 독립적으로 실행되기 때문에 애플리케이션의 특정 기능에 대한 수요를 충족하도록 각각의 서비스를 업데이트, 배포 및 확장할 수 있습니다.
✅ 개발 프로세스 관점에서의 차이
모놀리식 애플리케이션은 사전 계획이 많이 필요하지 않으므로 시작하기가 더 쉽습니다. 시작한 후 필요에 따라 코드 모듈을 계속 추가할 수 있습니다. 그러나 시간이 지남에 따라 애플리케이션이 복잡해지고 업데이트나 변경이 어려워질 수 있습니다.
마이크로서비스 아키텍처는 시작하기 전에 더 많은 계획과 설계가 필요합니다. 독립적으로 작동 가능한 다양한 기능을 식별하고 일관된 API를 계획해야 합니다. 그러나 초기 조정을 통해 코드를 훨씬 더 효율적으로 유지 관리할 수 있습니다. 더 빠르게 변경하고 버그를 찾을 수 있습니다. 코드 재사용성 또한 시간이 지남에 따라 증가합니다.
✅ 배포 관점에서의 차이
모놀리식 애플리케이션은 마이크로서비스보다 배포가 간단합니다. 전체 애플리케이션 코드 베이스와 종속성을 단일 환경에 설치합니다.
반대로 마이크로서비스 기반 애플리케이션을 배포하는 것은 더 복잡합니다. 각 마이크로서비스는 독립적으로 배포 가능한 소프트웨어 패키지이기 때문입니다. 일반적으로 마이크로서비스는 컨테이너화된 후 배포됩니다. 컨테이너는 마이크로서비스의 코드 및 관련 종속성을 패키징하여 플랫폼 독립성을 유지합니다.
컨테이너화란, 애플리케이션의 코드를 모든 인프라에서 실행하는 데 필요한 모든 파일 및 라이브러리와 함께 번들로 제공하는 소프트웨어 배포 프로세스입니다. 기존에는 컴퓨터에서 애플리케이션을 실행하려면 컴퓨터의 운영 체제와 일치하는 버전을 설치해야 했습니다. 예를 들어, Windows 시스템에 소프트웨어 패키지의 Windows 버전을 설치해야 했습니다. 하지만 컨테이너화를 사용하면 모든 유형의 디바이스 및 운영 체제에서 실행되는 단일 소프트웨어 패키지 또는 컨테이너를 만들 수 있습니다.
컨테이너에 대한 내용은 나중에 더 자세히 적어보도록 하겠습니다.
✅ 디버깅 관점에서의 차이
디버깅은 애플리케이션의 비정상 동작을 야기하는 코딩 오류를 식별하는 소프트웨어 프로세스입니다. 모놀리식 아키텍처를 디버깅할 때는 동일한 프로그래밍 환경 내에서 데이터 이동을 추적하거나 코드 동작을 검사할 수 있습니다. 한편 마이크로서비스 아키텍처에서 코딩 문제를 식별하려면 느슨하게 결합된 여러 개별 서비스를 살펴봐야 합니다.
많은 마이크로서비스를 담당하는 개발자가 여러 명일 수 있기 때문에 마이크로서비스 애플리케이션은 디버깅이 더 어려울 수 있습니다. 예를 들어 디버깅을 하려면 팀 구성원 간에 조정된 테스트, 토론 및 피드백이 필요할 수 있으며, 여기에는 더 많은 시간과 리소스가 필요합니다.
✅ 수정 관점에서의 차이
모놀리식 애플리케이션에서는 코딩이 긴밀하게 결합되어 있기 때문에 한 부분을 조금만 변경해도 여러 소프트웨어 기능이 영향을 받습니다. 또한 모놀리식 애플리케이션에 새로운 변경 사항을 도입할 때는 전체 시스템을 다시 테스트한 후 서버에 다시 배포해야 합니다.
반면 마이크로서비스 접근 방식은 유연성을 허용합니다. 애플리케이션을 변경하는 것이 더 쉽습니다. 모든 서비스를 수정하는 대신 특정 기능만 변경합니다. 또한 특정 서비스를 독립적으로 배포할 수도 있습니다. 이러한 접근 방식은 시스템 안정성에 미치는 영향 없이 작은 변경을 자주 수행하는 지속적 배포 워크플로에서 유용합니다.
✅ 크기 조정 관점에서의 차이
모놀리식 애플리케이션은 크기 조정 시 몇 가지 문제에 직면합니다. 모놀리식 아키텍처는 단일 코드 베이스 내에 모든 기능을 포함하므로 요구 사항이 변경되면 전체 애플리케이션의 크기를 조정해야 합니다. 예를 들어 통신 기능에 트래픽 급증이 발생하여 애플리케이션 성능이 저하되는 경우 컴퓨팅 리소스를 늘려 전체 모놀리식 애플리케이션을 수용해야 합니다. 그러나 애플리케이션의 모든 부분이 최대 용량에 도달하는 것은 아니기 때문에 리소스가 낭비됩니다.
한편, 마이크로서비스 아키텍처는 분산 시스템을 지원합니다. 각 소프트웨어 구성 요소는 분산 시스템에서 자체 컴퓨팅 리소스를 할당 받습니다. 이 리소스는 현재 용량 및 예측된 수요에 따라 독립적으로 조정이 가능합니다. 예를 들어 전체 시스템 대신 지리적 위치 서비스에 더 많은 리소스를 할당할 수 있습니다.
⭐ 마이크로서비스 아키텍처의 운영상 이점
- 더 빠른 혁신: 마이크로서비스는 독립적인 구성 요소로 다양한 기술 프레임워크를 활용할 수 있어 빠른 기능 추가와 기술 도입이 가능합니다. 반면, 모놀리식 아키텍처는 코드베이스의 재구성이 어렵고 혁신이 지연될 수 있습니다.
- 위험 감소: 모놀리식 애플리케이션은 단일 장애 지점으로 인해 업데이트 시 큰 위험을 동반하지만, 마이크로서비스는 장애 발생 시 다른 서비스에 미치는 영향을 최소화하여 안정성을 높입니다.
- 출시 기간 단축: 마이크로서비스는 각 개발자가 작은 코드 단위에 집중할 수 있어 개발 및 출시 속도가 빨라집니다. 반면, 모놀리식 구조는 코드 복잡성으로 인해 개발 속도가 느려집니다.
- 총 소유 비용 절감: 마이크로서비스는 필요에 따라 개별 서비스에만 리소스를 추가하여 수평적으로 확장할 수 있어 비용 효율적입니다. 반면, 모놀리식 시스템은 전체 애플리케이션을 업그레이드해야 하므로 더 많은 비용이 발생합니다.
📌 참고
모놀리식과 마이크로서비스 비교 - 소프트웨어 개발 아키텍처의 차이 - AWS
마이크로서비스는 더 빠르게 혁신하고, 위험을 낮추고, 출시를 가속화하며, 총 소유 비용을 줄이는 데 도움이 됩니다. 마이크로서비스 아키텍처의 운영상 이점을 요약하면 다음과 같습니다. 더
aws.amazon.com
'기술 지식 쌓아가기 📚 > Backend 🍔' 카테고리의 다른 글
[Spring] REST vs SOAP: 두 웹 서비스 아키텍처의 비교 🍃 (0) | 2024.10.06 |
---|---|
[Spring] @Controller와 @RestController의 차이점 (0) | 2024.10.04 |
[Spring] 웹 소켓, R 소켓, STOMP: 실시간 통신의 모든 것 🍃 (3) | 2024.10.02 |
[Spring] 웹 애플리케이션 테스트를 위한 Spring의 두 가지 도구: MockMvc와 WebTestClient 🍃 (0) | 2024.09.28 |
[Spring] WebFlux: 비동기와 반응형 프로그래밍의 새로운 장 🍃 (3) | 2024.09.27 |