Monolithic
MSA가 등장하기 이전 기존의 시스템은 정보제공을 위한 화면부터 데이터베이스까지 전체가 하나의 흐름으로 묶여있는 Monolithic Architerture이었다. Monolithic Architecture는 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태로 웹 개발을 예로 들면 웹 프로그램을 개발하기 위해 모듈별로 개발을 하고, 개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포되는 형태를 말한다.
장점
- 개발 초기에는 단순한 아키텍처 구조로 인해 개발이 용이하다.
- 어떤 서비스든지 개발되어 있는 환경이 같아서 복잡하지 않다
- 배포가 간단하다
- 쉽게 고가용성 서버 환경을 만들 수 있다.
단점
- 프로젝트의 규모가 커짐에 따라 애플리케이션 구동 시간이 늘어나고 빌드 및 배포 시간이 길어진다.
- 조그마한 수정 사항이 있어도 전체를 다시 빌드하고 배포해야 한다.
- 많은 양의 코드가 몰려 있어서 개발자가 모든 코드를 이해하기 힘들며, 유지 보수가 어렵다.
- 일부분의 오류가 전체에 영향을 미친다.
- 기술 스택이 한 번 정해지면 바꾸기 어렵다.
- 전체 애플리케이션 확장은 쉽지만, 부하 분산을 위해 각 컴포넌트를 독립적으로 확장하기 어렵다.
MicroService Architecture (MSA)
MSA란 마이크로 서비스 아키텍처(Micro Service Architecture)의 약자로 단일 프로그램을 각 컴포넌트 별로 나누어 작은 서비스의 조합으로 구축하는 방법이다. 말 그대로 각각을 마이크로하게 나눈 독립적인 서비스를 연결한 구조이며 이러한 특성 덕분에 시스템 전체의 중단 없이 필요한 부분만 업데이트, 배포가 가능하다. 유연한 대응이 가능해 실시간으로 요구사항을 반영할 수 있어 급격히 성장한 기업들이 많이 택한 방법이다.
장점
- 각각의 서비스는 모듈화가 되어있으며 이러한 모듈끼리는 RPC 또는 message-driven API등을 이용해 통신한다
- MSA는 각각 개별의 서비스 개발을 빠르게 하며, 유지보수도 쉽게 할 수 있도록 한다.
- 팀 단위로 적절한 수준에서 기술 스택을 다르게 가져갈 수 있다.
- MSA는 서비스 별로 독립적 배포가 가능하기 때문에 지속적인 배포 CD도 모놀로식에 비해서 가볍게 할 수 있다.
- MSA는 각각 서비스의 부하에 따라 개별적으로 scale-out이 가능하다. 메모리, CPU적으로 상당부분 이득이 된다.
단점
- 서비스가 분산되어 있기 때문에 모놀로식에 비해 상대적으로 많이 복잡하다.
- 서비스가 모두 분산되어 있기 때문에 개발자는 내부 시스템의 통신을 어떻게 가져가야 할지 반드시 표준 정의가 되어 있어야 한다.
- 통신의 장애와 서버의 부하 등이 있을 경우 어떻게 transaction을 유지할지 결정하고 구현해야 한다.
- 모놀로식에서는 단일 트랜잭션을 유지하면 됐지만 MSA에서는 비즈니스에 대한 DB를 가지고 있는 서비스도 각기 다르고, 서비스의 연결을 위해서는 통신이 포함되기 때문에 트랜잭션을 유지하는 게 어렵다.
- 개발 환경과 실제 운영환경을 동일하게 가져가는 것이 쉽지 않기 때문에 통합 테스트도 매우 어렵다.
그럼에도 불구하고 MSA가 대세인 이유
한 조사에 따르면 2020년에 약 1조 원이었던 마이크로서비스 시장 규모는 21.7%씩 성장해 6년만에 3조 5천억을 넘길 예정이라고 하며, 응답 기업의 85%가 MSA를 채택하여 앱의 현대화를 수행 중에 있다고 한다. 확장 가능한 애플리케이션을 구축하고 싶어 하는 기업 입장에서 생각해 보면 경영자는 더 빠른 제품 개발을 위한 요율성을 얻어 좋고, 개발 관리자는 리소스 최적화는 물론, 더 빠른 배포가 가능하며 확장성도 더할 수 있어서 좋기 때문에 MSA에 대한 관심이 뜨거워지고 있다.
참고
https://steady-coding.tistory.com/595
https://cocoon1787.tistory.com/746
https://www.opsnow.com/%EC%9A%94%EC%A6%98-%EB%8C%80%EC%84%B8-msa/
https://mydream72.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%B3%B4%EB%8B%88-MSA%EB%9E%80
'Computer Science' 카테고리의 다른 글
네트워크 라우터 개념(Router) (0) | 2023.01.03 |
---|---|
동기와 비동기 개념과 장단점 (0) | 2022.12.30 |
OSI 7 Layer 디테일 정리(+ TCP/IP 4계층) (2) | 2022.12.30 |
프로토콜(Protocol)의 개념, 요소, 특징, 계층 구성 (2) | 2022.12.29 |
객체지향 / 절차지향 프로그래밍이란? (0) | 2022.12.27 |