Monilithic Architecture란
MSA와 반대되는 전통적인 방식의 구조다. 모듈별로 개발한 뒤 개발 완료한 모듈을 묶어 배포하는 형태이며, 서버 하나에 모든 로직, api가 들어간 형태다. 마찬가지로 하나의 데이터베이스에 모든 데이터가 들어있다.
보통 한 언어만 사용하기 때문에 관리하기 편하고 구조가 단순하다. 하지만 유지보수 단계에서 지속적인 통합(Continuous Integration, CI), 지속적인 배포(Continuous Delivery, CD)가 어렵다. 예를 들어, 새 버전을 배포하려면 배포가 완료될 때까지 전체 서비스를 이용하지 못한다. 모든 모듈이 하나의 프로세스에서 동작하기 떄문이다.
Microservice Architecture(MSA)란
기능별로 api와 데이터베이스를 나눠서 개발하는 구조다. 쇼핑몰 웹사이트를 만든다고 가정하면 유저 관리, 상품 관리, 주문 관리 서비스를 분리해서 개발/운영하는 방식이다. 각 서비스끼리 데이터를 공유하지 않고 독립적으로 가공하고 저장한다.
따라서 기능별로 다른 언어나 기술을 쓰는 것이 가능하다. 운영 관점에서는 관리하기 복잡해지고 서비스간 데이터가 중복될 수도 있는 등 단점이 있지만 각 기능에 최적화한 기술 스택을 쓸 수 있다는 장점이 있다. 가장 큰 장점은 CI, CD가 가능하다는 점이다. 각 기능이 완전히 독립되어있기 때문에 한 기능을 수정/배포한다고 해도 전체 서비스는 끊김 없이 돌아간다.
참고문헌
질문거리) docker를 쓰면 monilithic architecture에서도 ci/cd가 가능한가?