모놀리스(Monolithic) 아키텍처란 무엇인가?
모놀리스 아키텍처는 소프트웨어를 하나의 독립적인 단위로 개발하는 방식을 말합니다. 이 아키텍처에서는 모든 애플리케이션 로직이 하나의 실행 가능한 파일, 즉 하나의 서비스로 구현되며, 모든 기능이 하나의 코드베이스에 통합되어 있습니다.
모놀리스 아키텍처의 핵심 구성 요소
1. 통합된 코드 베이스 : 모든 애플리케이션 기능이 하나의 코드베이스에 포함되어 있습니다. 이는 개발, 테스트, 배포를 단순화하지만, 시간이 지남에 따라 코드베이스가 커지면 관리가 어려워질 수 있습니다.
2. 단일 데이터베이스 : 모놀리스 애플리케이션은 보통 하나의 데이터베이스를 사용하여 모든 데이터를 저장합니다.
3. 단일 서버 또는 서버 그룹 : 모놀리스 애플리케이션은 일반적으로 하나의 서버 또는 서버 그룹에서 실행됩니다.
모놀리스 아키텍처의 배경
모놀리스 아키텍처는 소프트웨어 개발 초기에 널리 사용되던 방식으로, 이는 단일한 애플리케이션으로 모든 기능을 구현하고 관리하는 방식입니다.
초기 소프트웨어 개발 환경에서는 하드웨어 리소스가 제한적이었고, 복잡한 분산 시스템을 구축하고 유지하는 것이 어려웠습니다. 따라서, 모든 기능을 하나의 애플리케이션으로 관리하는 모놀리스 아키텍처가 가장 효율적인 선택이었습니다.
그러나, 애플리케이션의 규모가 커지고 복잡성이 증가함에 따라 모놀리스 아키텍처의 한계가 드러나기 시작했습니다. 특히, 확장성, 유지 보수성, 기술 스택의 유연성 등의 문제가 대두되었습니다. 이러한 문제를 해결하기 위해 마이크로서비스 아키텍처와 같은 새로운 아키텍처 패러다임이 등장하게 되었습니다.
모놀리스 아키텍처의 장점
1. 개발 용이성 : 모놀리스 아키텍처에서는 모든 코드가 하나의 애플리케이션 내에 있으므로, 개발과 테스트가 용이합니다. 또한, 개발 도구나 프레임워크를 설정하는 것이 더 간단하며, 시스템의 다른 부분과 상호 작용에 대해 걱정할 필요가 적습니다.
2. 단순성 : 모놀리스 아키텍처는 복잡한 분산 시스템을 관리할 필요가 없으므로, 시스템 아키텍처가 단순합니다. 이는 시스템의 동작을 이해하고 디버깅하는 데 도움이 됩니다.
3. 트랜잭션 관리 : 모놀리스 애플리케이션에서는 여러 서비스 간의 분산 트랜잭션을 관리할 필요가 없습니다. 이는 데이터 일관성을 유지하는 데 더 간단하고 효과적입니다.
4. 배포 용이성 : 모놀리스 애플리케이션은 하나의 패키지로 배포되므로, 배포 프로세스가 단순하고 문제 발생 시 디버깅이 더 쉽습니다.
모놀리스 아키텍처의 단점
1. 확장성 제한 : 모놀리스 애플리케이션은 수직 확장(vertical scaling)에 의존하는 경향이 있습니다. 이는 비용이 많이 들고 한계가 있습니다. 또한, 특정 기능의 확장만이 필요한 경우에도 전체 애플리케이션을 확장해야 하므로 비효율적일 수 있습니다.
2. 빠른 배포 어려움 : 모놀리스 애플리케이션은 코드베이스가 크므로, 빌드와 배포에 시간이 오래 걸릴 수 있습니다. 또한, 코드의 일부만 변경되어도 전체 애플리케이션을 재배포해야 합니다.
3. 장애 격리 어려움 : 모놀리스 애플리케이션에서는 하나의 컴포넌트에서 문제가 발생하면 전체 애플리케이션이 영향을 받을 수 있습니다.
4. 기술 스택 제한 : 모놀리스 애플리케이션은 보통 하나의 기술 스택을 사용합니다. 이는 새로운 기술을 적용하거나 실험하는 데 제한을 둡니다.
모놀리스 아키텍처가 적합한 경우
1. 소규모 애플리케이션 : 프로젝트가 작고 복잡성이 적은 경우, 모놀리스 아키텍처는 개발, 테스트, 배포를 단순화하므로 좋은 선택이 될 수 있습니다.
2. 단일 책임 애플리케이션 : 애플리케이션이 하나의 명확한 책임을 가지는 경우, 모놀리스 아키텍처를 사용하여 애플리케이션을 단순하게 유지할 수 있습니다.
3. 통합 테스트 요구 사항 : 모놀리스 아키텍처는 통합 테스트를 더 쉽게 만들어줍니다. 모든 기능이 하나의 애플리케이션에 포함되어 있기 때문에, 서로 다른 컴포넌트 간의 상호 작용을 테스트하는 것이 더 쉽습니다.
'인프라 > MSA' 카테고리의 다른 글
[MSA] 분산 트랜잭션 - ACID (1) | 2023.12.18 |
---|---|
[MSA] Hexagonal Architecture (0) | 2023.12.07 |
[MSA] MSA가 어려운 이유 (0) | 2023.12.01 |
[MSA] MSA의 핵심 원칙 (0) | 2023.11.30 |
[MSA] MSA란 무엇인가? (0) | 2023.11.30 |