모놀리식 아키텍처 vs 마이크로서비스 아키텍처 (MSA)
모놀리식 아키텍처 | 마이크로서비스 아키텍처 (MSA) | |
생산성 | 높음 | 낮음 |
복잡성 | 높음 | 낮음 |
확장성 | 낮음 | 높음 |
배포 | 간결함 | 빠르고 지속적인 배포 가능 (단독 배포) |
모놀리식 아키텍처 (Monolithic Architecture)
전통의 아키텍처를 지칭하며 단일 코드 베이스의 애플리케이션으로 소프트웨어의 모든 구성 요소가
하나의 프로젝트에 통합되어 있는 형태
장점
- 생산성 : 하나의 코드 베이스 기반 → 개발 속도가 빠르다.
- 간편한 디버깅 : 단일 코드 베이스로 인해 추가 구성없이 디버깅 가능하다.
- 간편한 배포 : 단일 프로젝트 배포로 인해 간편하다.
단점
- 복잡성 : 서비스가 커질수록 개발이 더욱 복잡해진다.
- 유지 보수의 어려움 : 단일 프로젝트로 많은 양의 코드가 몰려있어 유지 보수가 어렵다.
- 배포 : 작은 수정사항에도 전체 프로젝트 배포 필요하다.
마이크로서비스 아키텍처 (Microservice Architecture)
애플리케이션을 느슨하게 결합된 서비스의 모임으로 서비스 지향 아키텍처(SOA) 스타일의 일종인
소프트웨어 개발 기법으로 전체 시스템을 구성하는데 다른 마이크로서비스들과 상호 작용하는
작고 분리된 기능성 덩어리를 이용하는 개념
장점
- 유연한 확장 : 애플리케이션 기능의 수요를 충족하도록 서비스를 독립적으로 확장 가능하다.
- 독립적 & 지속적 배포 : 서비스별 개별 & 지속적으로 빠르게 배포 가능하다.
- 기술 유연성 : 팀에서 원하는 도구를 자유롭게 선택할 수 있다.
- 높은 안정성 : 서비스별 개발 배포 시 전체 서비스의 중단이 없다.
단점
- 지연시간 증가 : 서비스간 호출로 인해 통신 비용, 지연 시간이 증가한다.
- 데이터 중복 : 서비스마다 DB가 분리되어 데이터의 중복이 발생할 수 있다.
- 비용 증가 : 독립적인 서버 운영으로 인해 비용이 증가한다.
- 복잡성 증가 : 서비스가 분산되어 있어 트랜잭션 관리, 장애 추적 및 테스트가 어렵다.
마치며 (개인적인 생각)
마이크로서비스가 나오기 이전의 서비스들은 선택지가 없어서 모놀리식으로 개발하지 않았나 싶다. 글쓴이는 지금까지 업무 진행 시 모놀리식 아키텍처만 사용하여 개발을 진행해왔으나 마이크로서비스 아키텍처의 경우에는 개인적으로만 간단하게 사용하여 프로젝트를 구성해본 경험만 가지고 있었다. 이 글을 계기로 모놀리식 아키텍처와 마이크로서비스 아키텍처를 많은 차이를 알게 되었으며 장단점뿐만 아니라 환경에 따라 더 효과적인 아키텍처를 판단할 수 있겠다는 생각이 들었다.
현재 내가 새롭게 개발하려는 서비스의 경우는 규모나 기능면에서는 모놀리식 아키텍쳐가 맞다는 생각이지만 점차 추가해나가려는 기능들과 소중한 경험을 위해 마이크로서비스 아키텍처로 구현해보고자 한다.
둘 중 어떤게 맞다는 정답은 없다.
현재 주어진 환경에 따라 적합한 것을 선정하여 개발을 진행하면 되지 않을까한다.
Reference