비즈니스 요소는 마이크로서비스 단위로 분리한 후(DB까지 분리) 이들이 모여 전체적인 서비스를 구현한다.
보통 레고로 비유를 하는데, 작은 레고블록(Microservice) 하나하나를 모아 붙여 어떠한 큰 결과물을 만드는 형태를 MSA 라고 한다.
마이크로서비스(microservice)는 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는, ⑴서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법이라고 말하기도 한다.
모놀리식(Monolithic) 아키텍처는 마이크로서비스(Microservices) 아키텍처를 설명할 때 비교 등장하는 아키텍처이다.
모놀리식은 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태이다. 웹 개발을 예로 들자면, 모놀리식은 웹 프로그램을 개발하기 위해 모듈별로 개발을 하고, 개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포되는 형태이다.
아직까지는 많은 소프트웨어가 모놀리식 형태로 구현되어 있고, 소규모 프로젝트에는 모놀리식 아키텍처가 훨씬 합리적이기에 많이 쓰이고 있다. 소규모의 프로젝트에서는 모놀리식 형태는 간단하고, 유지보수가 편하기 때문이다.
하지만 일정 규모 이상의 서비스, 혹은 수백명의 개발자가 투입되는 프로젝트에서 모놀리식 아키텍처는 사용하는데 한계가 있다.
모놀리식 아키텍처는 모든 구성요소가 한 프로젝트에 통합되어 있는 형태이기 때문에 개발 유연성에 한계를 띈다.
여러 컴포넌트가 하나의 서비스에 강하게 결합되어 있기 때문에 수정에 대한 영향도 파악이 힘들다. 또한 모놀리식은 하나의 거대한 시스템이고 강한 결합도를 가지기 때문에 특정 서비스에서 장애가 발생하면 그 장애는 다른 서비스로 전파된다.
모놀리식 시스템의 경우, 모든 요소가 하나의 모놀리식 시스템에 구현되어 있으므로 모놀리식 단위로 스케일링이 이루어져 스케일 아웃이 힘들다.
즉, 스케일링을 하고자 하더라도 전체 모놀리식 시스템 단위로 스케일링이 이루어져야 한다.
MSA는 API를 통해서만 상호작용한다. 즉, 마이크로 서비스는 서비스의 end-point(접근점)을 API 형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화한다. 내부의 구현 로직, 아키텍처와 프로그래밍 언어, 데이터베이스, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려진다.
MSA는 서비스가 커지면서 생겼던 Monolithic Architecture의 문제점들을 어느정도 보완해 줄 수 있다.
배포(deployment) 관점
확장(scaling) 관점
장애(failure) 관점
그 외
MSA는 보다 복잡한 아키텍쳐기에, 전체 서비스가 커짐에 따라 그 복잡도가 기하급수적으로 늘어날 수 있다.
성능 관점
테스트 / 트랜잭션 관점
데이터 관리 관점
MSA에서 컨테이너 기술은 거의 필수적이다. 하지만 꼭 쿠버네티스를 써야만 MSA라고 할 수는 없다.
다양한 MSA를 배포, 관리하는 방법(ECS, docker swarm 등) 이 존재한다.
그럼에도 쿠버네티스가 각광받는 이유는 쿠버네티스가 수많은 마이크로서비스들을 운영하고 배포하고 모니터링 해주며 관리해야하는 것을 상대적으로 쉽게 해준다.
또한 많은 MSA를 배포할 때 쿠버네티스를 사용한 활용사례와 성공 사례들이 존재해 MSA 서비스를 배포할 때 쿠버네티스가 각광받게 되었다.
⑴서비스 지향 아키텍처(SOA) : 대규모 컴퓨터 시스템을 구축할 때의 개념이다. 업무상에 일 처리에 해당하는 소프트웨어 기능을 서비스로 판단하여, 그 서비스를 네트워크상에 연동하여 시스템 전체를 구축해 나가는 방법론이다. 여기에서 서비스는 기능의 독립적 단위이다.
1) https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1-MSA%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-3sk28yrv0e
2) 사진
https://toobler.medium.com/how-lego-like-software-development-using-microservices-helped-toobler-2d08a57d12d8
3) https://velog.io/@suhongkim98/MSA%EC%99%80-DDD-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90%EB%9E%80
4) https://hahahoho5915.tistory.com/71