모놀리식 아키텍쳐와 마이크로서비스 아키텍처 정리
모놀리식 아키텍쳐와 마이크로서비스 아키텍처 정리
Monolithic Architecture
모놀리식 아키텍쳐(Monolithic Architecture, MA): 하나의 통합된 코드 베이스로 여러 비즈니스 기능을 수행하는 전통적인 아키텍처 스타일이다. 단일 애플리케이션 내에 서비스의 모든 로직이 들어가 있는 구조이다. 쉽게 말해 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합돼 있는 구조를 의미한다.
모놀리식 아키텍쳐의 장점
- 간단한 유지보수
- 단일 코드 베이스를 가지고 있기 때문에 변경 사항을 적용하고 유비보수하는 것이 상대적으로 간단하다. 이로 인해 코드의 일관성을 유지하고 버그를 수정하기 용이하다.
- 개발 속도 향상
- 작은 팀이나 프로젝트에서 빠른 개발이 가능하다. 코드베이스가 단순하고 통합이 쉬우므로 초기에 빠르게 개발하고 배포할 수 있다.
- 통합의 편리함
- 서로 다른 기능이나 모듈이 하나의 애플리케이션 안에 있으므로 통합 및 테스트가 간단하다. 새로운 기능을 추가하거나 변경할 때 다른 부분과의 상호작용을 고려할 필요가 적다.
- 적은 인프라 구조 비용
- 단일 애플리케이션으로 모든 것을 처리하기 때문에 인프라 구조의 복잡성이 낮아지고 운영 비용이 감소할 수 있다.
- 기술 스택의 통일성
- 단일 코드 베이스를 가지고 있기 때문에 기술 스택을 통일하기 쉽다.
- 쉬운 디버깅 및 최적화
- 단일 코드 베이스에서 발생한 문제를 디버깅하기가 비교적 간단하다. 모든 코드가 하나의 공간에 있기 때문에 문제를 추적하고 해결하기가 용이하다. 마찬가지로 최적화 또한, 코드 베이스 전체에 대한 통합된 최적화가 가능하다.
모놀리식 아키텍쳐의 단점
- 확장과 배포의 어려움
- 프로젝트가 성정함에 따라 애플리케이션 전체를 확장해야 하므로, 특정 기능만을 확장하기 어렵다. 가령 뉴스 서비스를 이용하는 사용자가 1명이고 웹툰 서비스를 사용하는 사용자가 1억명이라 가정했을 때, 웹툰 서비스만 확장하기 어렵다.
- 작은 변경 사항도 전체 애플리케이션을 다시 배포해야 하는 경우가 있다. 이는 배포의 번거로움과 다운타임을 초래할 수 있다.
- 기술 스택의 제한성
- 기술 스택을 통일시키기 쉽지만, 이는 향후 새로운 기술 도입이 어렵다는 의미가 된다. 기술 스택이 제한된 셈인 것이다.
- 복잡성 증가
- 프로젝트가 성장함에 따라 코드베이스가 커지고 복잡성이 증가할 수 있다. 이에 따라 코드의 일부를 이해하고 수정하는 것이 어려워 유지보수와 디버깅이 어려워질 수 있다.
- 대규모 팀 작업의 어려움
- 모든 팀이 동일한 코드, 동일한 프로젝트에서 작업하기 때문에 코드 병합에 대한 충돌 가능성이 높고, 기능 변경 시 다른 팀이 작업에 영향을 줄 수 있다.
Microservice Architecture
마이크로 서비스 아키텍처(Microservices Architecture, MSA): 소프트웨어 애플리케이션을 여러 작고 독립적인 서비스로 나누는 아키텍처 스타일 중 하나이다. 전통적인 MA와 대조적으로, MSA는 애플리케이션을 작은, 독립적인 서비스로 나누어 각 서비스가 특정 비즈니스 기능을 수행하도록 한다.
마이크로 서비스 아키텍처의 장점
- 독립성 및 확장성
- 각 마이크로 서비스는 독립적으로 개발, 배포, 확장이 가능하며, 이는 전체 시스템의 유연성을 향상시킨다. 각 모듈간의 상호 의존성이 낮아지기 때문이다.
- 기술의 다양성
- 각 서비스는 자체적인 기술 스택을 선택할 수 있어, 최적의 도구나 언어를 사용할 수 있다.
- 쉬운 유지보수
- 특정 서비스에 대한 다른 서비스에 미치는 영향이 적어서 유지보수가 용이하다.
- 빠른 배포
- 각 서비스는 독립적으로 배포될 수 있어서 더 빠른 배포 주기를 가질 수 있다.
- 스케일링의 용이성
- 특정 서비스에 대한 수요가 증가할 때, 해당 서비스만 확장할 수 있어 자원을 효율적으로 사용할 수 있다.
마이크로 서비스 아키텍처의 단점
- 운영의 복잡성
- 여러 서비스 간의 통신과 관리는 복잡성을 증가시킬 수 있다. 서비스 디스커버리, 로깅, 분산 추적 등을 관리해야 한다.
- 데이터 일관성
- 서비스가 독립적으로 데이터를 가지고 있을 때 일관성을 유지하기 어려울 수 있다. ex) 트랜잭션
- 테스트의 어려움
- 여러 서비스 간의 통합 테스트와 종단 간 테스트를 수행하기 어려울 수 있다.
- 시스템 전반의 복잡성 증가
- 전체 시스템이 여러 서비스로 이루어지므로 이를 관리하고 이해하는 데 추가적인 노력과 복잡성이 발생할 수 있다.
- 시스템 전환 비용
- 기존 MA 구조에서 MSA로의 전환은 비용과 시간이 소요될 수 있다.
- 분산 시스템 문제
- 트랜잭션 처리, 일관성 유지 등 분산 시스템의 특유한 문제에 대한 처리가 부가적으로 필요하다.
시스템 아키텍처
구분 | Monolithic Architecture | Microservice Architecture |
---|---|---|
구조 | 통합 | 분산 |
결합도 | 높음 | 낮음 |
확장성 | 개별 확장 어려움 | 개별 확장 쉬움 |
배포 | 통합 배포 | 독립 배포 |
기술 스택 | 단일 기술 스택 | 여러 기술 스택 가능 |
변경 전파 범위 | 시스템 전체 | 서비스 또는 전파 범위 이내 |
통신 비용 | 낮음 | 높음 |
개발 난이도 | 쉬움(소규모일수록) | 어려움 |
This post is licensed under CC BY 4.0 by the author.