Monolithic & MSA
Monolithic Architecture란?
Monolithic Architecture는 애플리케이션 안에 모든 비즈니스 로직이 다 들어있는 아키텍처다.
전통적인 아키텍쳐를 지칭한다. 모든 프로세스가 긴밀하게 결합되고 단일 서비스로 실행된다.
장점
- 소규모 프로젝트에선 합리적
- 개발, 빌드, 배포, 테스트가 용이함
단점
- 애플리케이션 구동시간이 늘어나고 빌드, 배포가 오래 걸림
- 사소한 수정이 있어도 전체를 다시 빌드하고 배포해야함
- 유지보수가 힘듦
- 일부분의 오류가 전체에 영향을 끼침
- scale out이 힘듦
- scale up : 서버 사양 up
- scale out : 서버 분산 구조
MSA 란?
Micro Service Architecture의 줄임말
마이크로 서비스는 애플리케이션을 느슨하게 결합된 서비스
의 모임으로 구조화하는 서비스 지향 아키텍쳐(SOA) 의 일종인 소프트웨어 개발기법이다.
- 서비스 지향 아키텍처(Service Oriented Architecture(SOA))
서비스
는 기능의 독립적 단위- 애플리케이션 구성요소가 통신프로토콜을 통해 다른 구성요소에 서비스를 제공하는 아키텍처 접근 방식
- 대규모 컴퓨터 시스템을 구축할 때의 개념으로 업무상에 일 처리에 해당하는 소프트웨어 기능을 서비스로 판단하여 그 서비스를 네트워크상에 연동하여 시스템 전체를 구축해 나가는 방법론
장점
- 독립적인 서비스로 배포가 빠르고 모놀리식보다 가벼움
- 서비스의 개별 배포가 가능하므로 배포시 전체 서비스의 중단이 없음
- 각 서비스에 따라 개별적으로 서버를 나눌 수 있어 자원관리에 효율적
- 각 서비스가 모듈화 되어있고, 모듈끼리 RPC, Message-driven 이용하여 통신하므로 각 서비스의 개발속도가 증가
- 서비스 별 적합한 기술스택으로 개발할 수 있음
- 장애 발생 시, 격리 및 복구가 쉬움
단점
- 각자 배포한 서비스별 연계 작업이 필요
- 서비스간 REST API 사용으로 인한 통신비용, latency가 증가
- 서비스의 분산으로 인한 트랜잭션 관리, 장애 추적 및 테스트가 어려움
- 전체 서비스가 커짐에 따라 복잡도가 기하급수적으로 커짐
MSA 도입을 위한 필요 기술
✌️마무리
무조건적으로 MSA만 지향하는 것보단 개발 규모에 따라 모놀리식과 MSA의 장,단점을 따져가며 개발 아키텍쳐를 고르는 것이 좋을 듯하다.
golang에선 채널링과 protobuf를 통한 serial byte stream으로 통신할 수 있으므로 서비스간의 통신이 더 가볍고 속도가 빠르다.
이와 관련한 내용은 따로 정리해야겠다.
This post is licensed under CC BY 4.0 by the author.