모놀리식 아키텍처
모놀리식 아키텍처는 소프트웨어 프로그램의 전통적인 모델로, 자체 포함 방식이며 다른 애플리케이션과 독립적인 통합된 유닛으로 만들어집니다. 모든 비즈니스 관련 사항을 함께 결합하는 하나의 코드 베이스를 갖춘 대규모의 단일 컴퓨팅 네트워크로 이러한 종류의 애플리케이션을 변경하려면 코드 베이스에 액세스하고 서비스 측 인터페이스의 업데이트된 버전을 구축 및 배포하여 전체 스택을 업데이트해야 한다는 특징이 있습니다.
장점
1. 손쉬운 배포 : 실행 파일 또는 디렉토리가 하나여서 배포가 더 쉬움
2. 쉬운 개발 : 하나의 코드 베이스로 애플리케이션을 구축하여 개발이 더 쉬워짐
3. 성능 : 중앙 집중식 코드 베이스 및 리포지토리에서는 대부분 하나의 API만으로 마이크로서비스에서 여러 API가 수행하는 것과 동일한 기능을 수행할 수 있음
4. 테스트 간소화 : 모놀리식 애플리케이션은 하나의 중앙 집중식 장치이므로 분산된 애플리케이션보다 엔드투엔드 테스트를 더 빠르게 수행할 수 있음
5. 간편한 디버깅 : 모든 코드가 한 곳에 있으므로 요청을 따라가서 문제를 찾기가 더 쉬워짐
단점
1. 느린 개발 속도 : 대규모 모놀리식 애플리케이션에서는 개발이 더욱 복잡해지고 속도가 느려짐2. 부족한 확장성 : 개별 컴포넌트를 확장할 수 없음
3. 낮은 안정성 : 모듈에 오류가 있으면 애플리케이션 전체의 가용성에 영향을 줄 수 있음
4. 기술 채택의 장벽 : 프레임워크 또는 언어를 변경하면 애플리케이션 전체에 영향을 미치므로 변경 시 비용과 시간이 많이 소요됨
5. 부족한 유연성 : 모놀리스의 경우 모놀리스에서 이미 사용한 기술로 제한됨
6. 배포 : 모놀리식 애플리케이션을 약간만 변경하는 경우에도 전체 모놀리스를 다시 배포해야 함
마이크로 서비스 아키텍처
간단하게 마이크로서비스라고도 하는 마이크로서비스 아키텍처는 독립적으로 배포 가능한 일련의 서비스를 이용하는 아키텍처 방법입니다. 특정한 목표를 가진 자체 비즈니스 로직 및 데이터베이스가 있으며 업데이트, 테스트, 배포 및 확장은 각 서비스 내에서 이루어집니다.
주요 비즈니스, 도메인별 문제를 별도의 독립적인 코드 베이스로 분리하고, 복잡성을 줄여주지는 않지만, 작업이 서로 독립적으로 작동하고 전체에 기여하는 더 작은 프로세스로 분리하여 복잡성을 눈으로 볼 수 있고 관리하기 쉽도록 만들어 줍니다.
장점
1. 애질리티 : 배포가 잦은 소규모 팀에서 애자일 작업 방식을 유도함2. 유연한 확장 : 부하 용량에 도달하면 해당 서비스의 새 인스턴스를 포함하는 클러스터에 신속하게 배포하여 부담을 완화할 수 있음3. 지속적 배포 : 더 자주 릴리스하고 릴리스 주기가 빨라짐4. 높은 유지 관리성 및 테스트 편의성 : 팀에서 새로운 기능을 실험해 보고 문제가 발생하면 롤백할 수 있음 즉, 코드를 보다 쉽게 업데이트하고 새로운 기능의 시장 출시 시간을 단축할 수 있게됨 또한 개별 서비스의 결함과 버그를 쉽게 격리하고 해결할 수 있음5. 독립적 배포 가능 : 개별적인 유닛이므로 개별 기능을 빠르고 쉽게 독립적으로 배포할 수 있음6. 기술 유연성 : 팀에서 원하는 도구를 자유롭게 선택할 수 있음7. 높은 안정성 : 전체 애플리케이션이 중단될 위험 없이 특정 서비스에 대한 변경 사항을 배포 가능
단점
1. 무분별한 개발 확산 : 여러 팀이 더 많은 장소에 더 많은 서비스를 만들기 때문에 모놀리스 아키텍처에 비해 더 복잡해지며, 적절하게 관리되지 않을 시 개발속도가 느려지고 운영 성능이 저하됩니다.
2. 기하급수적인 인프라 비용 : 각각의 새 마이크로서비스는 테스트 도구, 배포 플레이북, 호스팅 인프라, 모니터링 도구 등에 대한 자체적인 비용이 발생할 수 있음
3. 디버깅 문제 : 자체적인 로그 집합을 가지고 있어 디버깅이 더 복잡하며 여러 시스템에서 하나의 비즈니스 프로세스가 실행될 수 있으므로 디버깅이 더욱 복잡해짐
4. 표준화 부족 : 공통 플랫폼이 없어 여러 언어, 로깅 표준 및 모니터링이 사용될 수 있음