목차
Monolithic 과 MSA
Monolithic Architecture는 MSA가 등장하기 전 하나의 서비스로 하나의 애플리케이션을 만드는 것이다.
MSA는 Micro Service Architecture의 줄임말로 하나의 큰 애플리케이션을 작은 애플리케이션으로 나눠서 만드는 아키텍쳐이다.
위 그림에서 하나의 DB와 하나의 프로젝트로 모든 서비스가 구성되어 있는 구조가 Monolithic 구조이다. 흔히 작고 귀여운 나같은 대학생(이었던) 이나 부트캠프 등에서 프로젝트를 진행하면 보통 Monolithic 구조로 프로젝트를 진행했을 것이다.
우선 Monolithic Architecture의 장점은 이렇다.
- 배포 과정 간단! (= 파이프라인 구성 easy)
- 하나의 프로젝트만 관리하기 때문에 배포하는 과정이 쏘 이지하다고 할 수 있겠다.
- 통합 테스트 용이
- 하나의 프로젝트에 전체 서비스의 로직이 같이 관리되므로 단위 테스트가 아닌 통합 테스트에 유리하다.
- 프로젝트 규모가 작을 수록 유지보수 간편 !
- 일정 규모 이하의 프로젝트에서는 유지보수가 간편하다.
- 벗 규모가 커진다면 그만큼 복잡해져서 유지보수가 쉽지가 않다.
Monolithic Architecture의 단점을 알아보자
- 전체적인 구조 파악이 어렵다.
- 전체 서비스가 나눠져있지 않고 하나로 똘똘 뭉쳐져 있기 때문에 규모가 커질 수록 구조를 파악하기가 어렵다.
- 빌드 시간 및 테스트, 배포시간이 많이 소요 된다.
- 서비스 규모가 커질수록 빌드, 테스트, 배포에 많은 시간이 소요된다.
- 작은 것을 수정해도 전체적으로 빌드 - 테스트 - 배포하기 때문이다.
- 특정 부분의 *scale-out 어려움
- 실제 서비스는 사용자의 트래픽이 모든 부분에 골고루 집중되지 않는다. 그래서 특정 모듈만 성능을 높일 필요성이 생기는데 Monolithic 구조의 경우 쉽게 해결하기 어렵다. (*scale out : 서버의 대수를 늘려 처리 능력 향상)
- 개발 기술에 종속적이다.
- 전체 서비스가 하나의 언어, 프레임워크로 구성
- 강한 의존성
- 내부적으로 결합도가 높아서 특정 기능에 문제가 생긴다면 다른 기능에도 영향을 끼칠 가능성이 높다.
MSA (Micro Service Architecture)
MSA는 Monolithic Architecture를 쪼개서 독립적으로 구분하는 것이다. 즉 단일 프로그램을 각 컴포넌트 별로 나누어서 작은 서비스의 조합으로 구축하는 것이다. 마이크로 서비스는 완전히 독립적으로 배포가 가능하고 서로 다른 기술 스택이 사용 가능한 단일 사업 영역에 초점을 둔다.
MSA 장점에 대해서 알아보자
- 서비스 별로 개별 배포 가능
- 각각 독립된 서비스이기 때문에 개별 배포가 가능하며 배포 시 전체 서비스를 중단하지 않고 배포를 하기 때문에 빠르다.
- 특정 서비스에 대한 확장성에 유리하다.
- 독립되어 있기 때문에 특정 서비스만 확장 용이
- 일부 서비스의 장애가 전체 장애로 확장될 가능성이 낮다.
- 마찬가지로 독립적인 녀석이라 그렇습니다.
- 각각의 서비스에 새로운 기술을 적용하기 좋다. (새로운 언어나 프레임워크 사용 등)
- 독립된 서비스이기 때문에 전체적인 구조 파악이 Monolithic보다 쉽고 빠르게 이해가 가능하다.
단점은 이렇다.
- 독립된 서비스 간 호출시 API를 사용하므로 통신에 대한 비용, 지연시간을 고려해야하다.
- 서비스들이 분리되어 있어 통합 테스트가 어렵고 개발환경과 실제 운영환경을 동일하게 가져가는 것이 쉽지 않다.
- 데이터베이스가 분산되어 각 서비스마다 다른 DB를 사용하기 때문에 데이터 관리의 어려움이 있고 트랜잭션을 유지하기 어렵다.
- 서비스들이 많아지면 로깅, 모니터링, 배포 등이 복잡해진다.
'CS' 카테고리의 다른 글
스턱스넷 : Stuxnet 핵이 된 디지털 웜 (0) | 2024.06.21 |
---|---|
비동기 처리 (0) | 2024.01.24 |
RDBMS 와 NoSQL (+짧은 회고) (0) | 2024.01.23 |
URI vs URL (0) | 2024.01.12 |