MSA vs Monolitic

마이크로서비스 아키텍처와 모놀리식 아키텍처는 소프트웨어 애플리케이션을 설계하고 구축하는 두 가지 다른 접근 방식입니다.


모놀리식 아키텍처에서는 전체 애플리케이션이 하나의 독립된 단위로 구축됩니다. 사용자 인터페이스, 비즈니스 로직, 데이터 액세스 계층을 포함한 애플리케이션의 모든 구성 요소가 긴밀하게 결합되어 단일 코드베이스에 통합됩니다. 이 접근 방식을 사용하면 애플리케이션을 쉽게 개발하고 배포할 수 있지만, 코드베이스의 변경 사항이 전체 애플리케이션에 영향을 미칠 수 있으므로 애플리케이션을 유지 관리하고 확장하기가 어려울 수 있습니다.

마이크로서비스 아키텍처에서는 애플리케이션이 독립적으로 개발, 배포 및 확장할 수 있는 소규모의 독립적인 서비스 집합으로 나뉩니다. 각 서비스는 특정 기능 집합을 담당하며 잘 정의된 인터페이스를 사용하여 다른 서비스와 통신합니다. 이 접근 방식을 사용하면 팀이 애플리케이션의 여러 부분을 동시에 작업할 수 있으며 애플리케이션을 업데이트하고 유지 관리하기가 더 쉬워집니다. 그러나 팀이 서로 다른 서비스 간의 상호 작용을 신중하게 관리해야 하므로 개발 프로세스가 더 복잡해질 수도 있습니다.

전반적으로 마이크로서비스 아키텍처와 모놀리식 아키텍처의 주요 차이점은 애플리케이션의 구조와 빌드 방식에 있습니다. 모놀리식 아키텍처는 더 간단하고 작업하기 쉽지만 유지 관리 및 확장이 더 어려울 수 있는 반면, 마이크로서비스 아키텍처는 더 복잡하지만 유연성과 확장성이 더 뛰어납니다. 어떤 접근 방식을 선택할지는 특정 요구 사항과 애플리케이션의 요구 사항에 따라 달라집니다.

Monolithic Architecture

단일 서비스 개발 방식, 하나의 프로젝트로 구성되어 있으며 단일 패키지로 배포하는 아키텍쳐

소규모 프로젝트에 적합.

장점

  • 통합 시나리오 테스트가 수월
  • 배포가 간단하다

단점

  • 서비스가 커짐에 따라 빌드/테스트 시간이 오래 걸림
  • 개발 언어가 종속
  • 선택적으로 확장 불가, 서비스마다 관여하는 비중이 달라도 뭉쳐있기 때문에 전체 확장으로 진행
  • 하나의 서비스가 다른 모든 서비스에 영향을 준다

MicroService Architecture

하나의 큰 어플리케이션을 여러 개의 작은 어플리케이션으로 쪼개어서 배포하는 아키텍쳐, 독립적인 기능을 수행하는 작은 단위의 서비스로 나누어 개발

대형 프로젝트에 적합하고 트래픽을 많이 요구하는 곳에서 필요

장점

  • 서비스별 배포 가능
    • 배포 시에 전체 서비스 중단이 필요없고 CI/CD가 수월
  • 특정 서비스 확장 용이
  • 장애 발생시 부분적인 대처 가능, 부분적인 장애에 대해서 격리 및 대처가 수월

단점

  • 데이터가 여러 서비스에 분산되어 있어 한번에 조회하기 어렵다
  • 서비스 간 호출시 API를 이용하기 때문에 통신 비용과 letency(지연시간)이 증가
  • 서비스가 분리되어 있어 트랜잭션과 테스트가 복잡