모놀리식 아키텍처란?
모놀리식 아키텍쳐(Monolithic Architecture, MA): 하나의 통합된 코드 베이스로 여러 비즈니스 기능을 수행하는 전통적인 아키텍처 스타일이다. 단일 애플리케이션 내에 서비스의 모든 로직이 들어가 있는 구조이다. 쉽게 말해 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합돼 있는 구조를 의미한다.
그림과 같이 다양한 서비스들이 단일 애플리케이션 안에 포함되어 있는 구조라고 생각하면 된다. 단일 DB와 연결해서 사용하고 보안, 설정등 모두 공통으로 사용하기 때문에 개발 속도가 빠르다.
모놀리식 아키텍쳐의 장점
- 간단한 유지보수
- 단일 코드 베이스를 가지고 있기 때문에 변경 사항을 적용하고 유비보수하는 것이 상대적으로 간단하다. 이로 인해 코드의 일관성을 유지하고 버그를 수정하기 용이하다.
- 개발 속도 향상
- 작은 팀이나 프로젝트에서 빠른 개발이 가능하다. 코드베이스가 단순하고 통합이 쉬우므로 초기에 빠르게 개발하고 배포할 수 있다.
- 통합의 편리함
- 서로 다른 기능이나 모듈이 하나의 애플리케이션 안에 있으므로 통합 및 테스트가 간단하다. 새로운 기능을 추가하거나 변경할 때 다른 부분과의 상호작용을 고려할 필요가 적다.
- 적은 인프라 구조 비용
- 단일 애플리케이션으로 모든 것을 처리하기 때문에 인프라 구조의 복잡성이 낮아지고 운영 비용이 감소할 수 있다.
- 기술 스택의 통일성
- 단일 코드 베이스를 가지고 있기 때문에 기술 스택을 통일하기 쉽다.
- 쉬운 디버깅 및 최적화
- 단일 코드 베이스에서 발생한 문제를 디버깅하기가 비교적 간단하다. 모든 코드가 하나의 공간에 있기 때문에 문제를 추적하고 해결하기가 용이하다. 마찬가지로 최적화 또한, 코드 베이스 전체에 대한 통합된 최적화가 가능하다.
이와 같은 장점은 주로 소규모 프로젝트에서 부각된다. 프로젝트의 규모가 커질수록 일부분에 제약이 생길 수도 있다.
모놀리식 아키텍쳐의 단점
- 확장과 배포의 어려움
- 프로젝트가 성정함에 따라 애플리케이션 전체를 확장해야 하므로, 특정 기능만을 확장하기 어렵다. 가령 뉴스 서비스를 이용하는 사용자가 1명이고 웹툰 서비스를 사용하는 사용자가 1억명이라 가정했을 때, 웹툰 서비스만 확장하기 어렵다.
- 작은 변경 사항도 전체 애플리케이션을 다시 배포해야 하는 경우가 있다. 이는 배포의 번거로움과 다운타임을 초래할 수 있다.
- 기술 스택의 제한성
- 기술 스택을 통일시키기 쉽지만, 이는 향후 새로운 기술 도입이 어렵다는 의미가 된다. 기술 스택이 제한된 셈인 것이다.
- 복잡성 증가
- 프로젝트가 성장함에 따라 코드베이스가 커지고 복잡성이 증가할 수 있다. 이에 따라 코드의 일부를 이해하고 수정하는 것이 어려워 유지보수와 디버깅이 어려워질 수 있다.
- 대규모 팀 작업의 어려움
- 모든 팀이 동일한 코드, 동일한 프로젝트에서 작업하기 때문에 코드 병합에 대한 충돌 가능성이 높고, 기능 변경 시 다른 팀이 작업에 영향을 줄 수 있다.
모놀리식 아키텍쳐의 장점과 단점을 살펴보면, 모놀리식 아키텍쳐는 소규모 프로젝트에 적합하다는 것을 알 수 있다. 소규모 프로젝트에서 부각되는 장점들이 대규모 프로젝트에 적용되면 단점으로 적용된다.
때문에 프로젝트 규모가 작을 때, 빠른 MVP 개발이 필요할 때, 복잡한 비즈니스 로직이 필요하지 않을 때, 변경이 적은 시스템에서 적용되야할 개발 모델이다.
마이크로 서비스 아키텍처란?
마이크로 서비스 아키텍처(Microservices Architecture, MSA): 소프트웨어 애플리케이션을 여러 작고 독립적인 서비스로 나누는 아키텍처 스타일 중 하나이다. 전통적인 MA와 대조적으로, MSA는 애플리케이션을 작은, 독립적인 서비스로 나누어 각 서비스가 특정 비즈니스 기능을 수행하도록 한다.
다양한 서비스들이 독립적인 형태로 그림과 같이 존재하게 된다. 대규모 개발팀의 조직 구조에 맞도록 변형된 아키텍처이다.
마이크로 서비스 아키텍처의 장점
- 독립성 및 확장성
- 각 마이크로 서비스는 독립적으로 개발, 배포, 확장이 가능하며, 이는 전체 시스템의 유연성을 향상시킨다. 각 모듈간의 상호 의존성이 낮아지기 때문이다.
- 기술의 다양성
- 각 서비스는 자체적인 기술 스택을 선택할 수 있어, 최적의 도구나 언어를 사용할 수 있다.
- 쉬운 유지보수
- 특정 서비스에 대한 다른 서비스에 미치는 영향이 적어서 유지보수가 용이하다.
- 빠른 배포
- 각 서비스는 독립적으로 배포될 수 있어서 더 빠른 배포 주기를 가질 수 있다.
- 스케일링의 용이성
- 특정 서비스에 대한 수요가 증가할 때, 해당 서비스만 확장할 수 있어 자원을 효율적으로 사용할 수 있다.
마이크로 서비스 아키텍처의 단점
- 운영의 복잡성
- 여러 서비스 간의 통신과 관리는 복잡성을 증가시킬 수 있다. 서비스 디스커버리, 로깅, 분산 추적 등을 관리해야 한다.
- 데이터 일관성
- 서비스가 독립적으로 데이터를 가지고 있을 때 일관성을 유지하기 어려울 수 있다. ex) 트랜잭션
- 테스트의 어려움
- 여러 서비스 간의 통합 테스트와 종단 간 테스트를 수행하기 어려울 수 있다.
- 시스템 전반의 복잡성 증가
- 전체 시스템이 여러 서비스로 이루어지므로 이를 관리하고 이해하는 데 추가적인 노력과 복잡성이 발생할 수 있다.
- 시스템 전환 비용
- 기존 MA 구조에서 MSA로의 전환은 비용과 시간이 소요될 수 있다.
- 분산 시스템 문제
- 트랜잭션 처리, 일관성 유지 등 분산 시스템의 특유한 문제에 대한 처리가 부가적으로 필요하다.
이러한 MSA의 장점과 단점은 프로젝트의 특성, 규모, 팀의 역량에 따라 다르게 느껴질 수 있다. 때문에 프로젝트를 계획할 때, 이러한 측면을 고려하여 결정하는 것이 중요하다.
마이크로 서비스 아키텍처는 대규모 및 복잡한 시스템일 때, 서비스를 만드는 독립적인 팀이 존재할 경우, 유연한 확장이 요구될 경우에 적합한 아키텍처 스타일이다.
모놀리식 아키텍처와 마이크로 서비스 아키텍처의 차이점
구조
모놀지식 아키텍처는 단일 애플리케이션으로 기능을 통합한 구조로 이루어져 있다. 때문에 각 기능은 서로 강하게 의존할 수 있다.
마이크로 서비스 아키텍처는 독립적인 서비스로 애플리케이션을 나누어 구성한다. 각 서비스는 API를 통해 통신하며, 분산 시스템을 형성하게 된다.
배포
모놀리식 아키텍처는 전체 애플리케이션을 한 번에 배포해야 한다. 한 부분만 변경해도 전체 애플리케이션을 배포해야 한다.
마이크로 서비스 아키텍처는 각 서비스를 독립적으로 개발, 테스트, 배포되며 이는 애플리케이션 전체를 다시 배포하지 않고도 개별 서비스를 업데이트 할 수 있다는 것을 의미한다.
기술의 다양성
모놀리식 아키텍처는 애플리케이션 전체에 동일한 기술 스택을 사용해야 한다.
마이크로 서비스 아키텍처는 각 서비스마다 자체적인 기술 스택을 선택할 수 있다.
유연성
모놀리식 아키텍처는 애플리케이션 확장이 필요한 경우, 전체를 확장해야 하므로 특정 부분의 수요가 증가하더라도 전체 애플리케이션을 확장해야한다.
마이크로 서비스 아키텍처는 특정 서비스에 대한 수요가 증가하면 해당 서비스만 확장할 수 있어 자원을 효율적으로 사용할 수 있다.
지연 시간
모놀리식 아키텍처는 모든 서비스가 단일 코드 베이스에 존재하기 때문에 네트워크 대기시간이 발생하지 않는다.
마이크로 서비스 아키텍처는 다른 서비스와 통신을 해야하기 때문에 네트워크 대기시간이 발생할 수 있다. 이때문에 모놀리식 아키텍처와 비교하여 성능이 더 느리다.
모놀리식 아키텍처와 마이크로 서비스 아키텍처의 차이점에 대해서 알아보았다. 다음 번엔 MSA에 대해서 깊이 살펴보고 싶다,,
'DevOps' 카테고리의 다른 글
[k8s] 쿠버네티스 란? (1) | 2023.12.03 |
---|---|
[MSA] Spring Boot 프로젝트에서 MSA 실습하기(Kafka) - 2 (2) | 2023.11.26 |
[MSA] Spring Boot 프로젝트에서 MSA 실습하기(Spring Cloud) - 1 (4) | 2023.11.25 |
[GitActions] Error: Gradle script '/home/runner/work/' is not executable. (0) | 2023.06.01 |
netlify sass error (0) | 2022.04.18 |