MSA는 다양한 특징을 가지고 있다. 그 중에서 가장 핵심 특징은 독립성이다. 아래 그림을 보면 결제에 관련된 기능, 인증에 관련된 기능, 상품에 관련된 기능을 독립적으로 분리해서 프로젝트를 구성했다. 이게 바로 MSA의 방식대로 서비스를 분리해서 구성한 것이다. 이렇게 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리시킴으로써 다양한 장점이 생기게 된다.
✅ MSA의 독보적인 장점
서비스 별 독립적인 배포 → 배포 사이클이 빨라짐
개발자가 60명인 회사가 있다고 치자. 하나의 큰 프로젝트를 60명이서 작업하는 것보다, 여러 개의 프로젝트로 나눠서 각 프로젝트를 관리하는 팀을 구성해 독립적으로 작업하는 게 훨씬 효율적이다. 그 이유는 다음과 같다.
서로 의사소통할 인원이 적기 때문에 프로젝트 진행이 빠르다.
팀이 독립적으로 개발/배포를 진행할 수 있다.
코드의 양이 비교적 작기 때문에 코드 작성, 테스트, 빌드 과정의 시간이 훨씬 적게 걸린다.
실제 우아한형제들과 같이 규모가 있는 회사들의 팀 구성을 보면 배민상품시스템팀, 정산시스템팀 등 다양한 팀으로 나뉘어져있다. 배달의 민족이라는 하나의 서비스를 여러개 프로젝트로 쪼개서 각 팀에 배정해서 관리하고 있다.
데이터베이스의 독립적인 분리 → 대규모 트래픽 처리 용이
모놀리식 아키텍처에서는 단일 데이터베이스를 활용하는 구조를 많이 채택한다. 하지만 AWS의 단일 데이터베이스의 가장 좋은 성능의 데이터베이스로 셋팅을 한다고 하더라도 트래픽이 감당이 안 되는 순간이 온다.
읽기 전용 데이터베이스를 추가하거나 캐시를 활용해 트래픽을 줄이려는 시도를 하지만, 이런 셋팅을 다 해도 트래픽을 감당 못할 때가 있다. 이런 경우에 MSA 구조를 활용해 각 서비스 별로 데이터베이스를 따로따로 둠으로써 대규모 트래픽을 감당하기도 한다.
서비스를 독립적으로 분리 → 장애 전파를 최소화
모놀리식 서비스에서는 단일 데이터베이스를 사용하고 있기 때문에, 결제 API로 인해 데이터베이스에 장애가 나면 결제와 관련되지 않은 다른 기능들도 100% 같이 장애가 난다.
반면, MSA 구조에서는 각 서비스 별로 데이터베이스도 독립적으로 분리해서 구축하기 때문에, 결제 서비스가 장애가 나더라도 다른 서비스에는 영향을 덜 끼친다.
✅ 정리
MSA의 핵심 키워드를 하나 뽑자면 ‘독립성’이다. 이 ‘독립성’이라는 특징 때문에 아래의 3가지 장점이 생긴다고 했다.
서비스 별 독립적인 배포 → 배포 사이클이 빨라짐
데이터베이스의 독립적인 분리 → 대규모 트래픽 처리 용이
서비스를 독립적으로 분리 → 장애 전파를 최소화
(MSA는 사실 이 외에도 더 많은 짜잘짜잘한 장점들을 가지고 있다. 처음에는 위 3가지 핵심 장점만 기억해두면 충분하다. 나머지 다른 장점들은 MSA를 구축하다보면 자연스럽게 알게 된다.)