✏️ 모놀리식 아키텍처(MA) VS 마이크로 서비스 아키텍처(MSA)

박상민·2024년 11월 14일
1

개념 정리!

목록 보기
19/19

⭐️ 서론

AWS SAA C-03 자격증을 준비하면서 기출 문제를 많이 풀어보고 있다.
종종 문제에 '모놀리식 아키텍처(Monolithic Architecture, MA)'가 등장한다. 기존에 알고 있던 '마이크로 서비스 아키텍처(Micro Service Architecture, MSA)'와의 차이점이 궁금해서 정리해본다.

📌 모놀리식 아키텍처(Monolithic Architecture, MA)

MA란?
모놀리식 아키텍처(Monolithic Architecture, MA)는 하나의 통합된 코드 베이스로 여러 비즈니스 기능을 수행하는 전통적인 아키텍처 스타일이다. 단일 애플리케이션 내에 서비스의 모든 로직이 들어가 있는 구조이다. 쉽게 말하자면 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합되어 있는 구조를 의미한다.

예시 그림

특징

  • 다양한 서비스들이 단일 애플리케이션 안에 포함되어 있는 구조
  • 단일 DB와 연결해서 사용하고 보안, 설정 등 모두 공통으로 사용하기 때문에 개발 속도가 빠름

장점

  • 간단한 유지보수

    • 단일 코드 베이스를 가지고 있기 때문에 변경 사항을 적용하고 유지보수하는 것이 상대적으로 간단한다. 이로 인해 코드의 일관성을 유지하고 버그를 수정하기 용이하다.
  • 개발 속도 향상

    • 작은 팀이나 프로젝트에서 빠른 개발이 가능하다. 코드베이스가 단순하고 통합이 쉬우므로 초기에 빠르게 개발하고 배포할 수 있다.
  • 통합의 편리함

    • 서로 다른 기능이나 모듈이 하나의 애플리케이션 안에 있으므로 통합 및 테스트가 간단하다. 새로운 기능을 추가하거나 변경할 때 다른 부분과의 상호작용을 고려할 필요가 적다.
  • 적은 인프라 구조 비용

    • 단일 애플리케이션으로 모든 것을 처리하기 때문에 인프라 구조의 복잡성이 낮아지고 운영 비용이 감소할 수 있다.
  • 기술 스택의 동일성

    • 단일 코드 베이스를 가지고 있기 때문에 기술 스택을 통일하기 쉽다.
  • 쉬운 디버깅 및 최적화

    • 단일 코드 베이스에서 발생한 문제를 디버깅하기가 비교적 간단하다. 모든 코드가 하나의 공간에 있기 때문에 문제를 추적하고 해결하기가 용이하다. 마찬가지로 최적화 또한 코드 베이스 전체에 대한 통합된 최적화가 가능하다.

모놀리식 아키텍처의 장점은 다양한 서비스들이 단일 애플리케이션 안에 포함되어 있는 구조라는 특징에서 파생된다. 이러한 장점은 주로 소규모 프로젝트에서는 엄청난 장점이 될 수 있다. 그러나 프로젝트의 규모가 커질수록 단점도 부각된다.

단점

  • 확장과 배포의 어려움

    • 프로젝트가 성장함에 따라 애플리케이션 전체를 확장해야 하므로, 특정 기능만을 확장하기가 어렵다.

    • 작은 변경 사항도 전체 애플리케이션을 다시 배포해야 하는 경우가 있다. 이는 배포의 번거로움과 다운 타임 문제를 초래할 수 있다.

  • 기술 스택의 제한성

    • 기술 스택을 통일시키기 쉽지만, 이는 향후 새로운 기술 도입이 어렵다는 의미가 된다. 기술 스택이 제한된 셈인 것이다.
  • 복잡성 증가

    • 프로젝트가 성장함에 따라 코드베이스가 커지고 복잡성이 증가할 수 있다. 이에 따라 코드의 일부를 이해하고 수정하는 것이 어려워 유지보수와 디버깅이 어려워질 수 있다.
  • 대규모 팀 작업의 어려움

    • 모든 팀이 동일한 코드, 동일한 프로젝트에서 작업하기 때문에 코드 병합에 대한 충돌 가능성이 높고, 기능 변경 시 다른 팀이 작업에 영향을 줄 수 있다.

MA의 장점과 단점을 알아봤다. 모놀리식 아키텍처는 소규모 프로젝트에 적합하다. 소규모 프로젝트에서의 MA의 장점들이 대규모 프로젝트에서는 단점이 된다.
따라서 프로젝트 규모가 작을 때, 빠른 MVP 개발이 필요할 때, 복잡한 비즈니스 로직이 필요하지 않을 때, 변경이 적은 시스템 등에 적용되어야 하는 아키텍처이다.

📌 마이크로 서비스 아키텍처(Microservices Architecture, MSA)

MSA란?
마이크로 서비스 아키텍처(Microservices Architecture, MSA)란 소프트웨어 애플리케이션을 여러 작고 독립적인 서비스로 나누는 아키텍처 스타일 중 하나이다. 전통적인 MA와 대조적으로 MSA는 애플리케이션을 작은, 독립적인 서비스로 나누어 각 서비스가 특정 비즈니스 기능을 수행하도록 한다.

예시 그림

장점

  • 독립성 및 확장성
    • 각 마이크로 서비스는 독립적으로 개발, 배포, 확장이 가능하며, 이는 전체 시스템의 유연성을 향상시킨다. 각 모듈간의 상호 의존성이 낮아지기 때문이다.
  • 기술의 다양성
    • 각 서비스는 자체적인 기술 스택을 선택할 수 있어, 최적의 도구나 언어를 사용할 수 있다.
  • 쉬운 유지보수
    • 특정 서비스에 대한 다른 서비스에 미치는 영향이 적어서 유지보수가 용이하다.
  • 빠른 배포
    • 각 서비스는 독립적으로 배포될 수 있어서 더 빠른 배포 주기를 가질 수 있다.
  • 스케일링의 용이성
    • 특정 서비스에 대한 수요가 증가할 때, 해당 서비스만을 확장할 수 있어 자원을 효율적으로 사용할 수 있다.

단점

  • 운영의 복잡성
    • 여러 서비스간의 통신과 관리는 복잡성을 증가시킬 수 있다. 서비스 디스커버리, 로깅, 분산 추적 등을 관리해야 한다.
  • 데이터 일관성
    • 서비스가 독립적으로 데이터를 가지고 있을 때 일관성을 유지하기 어려울 수 있다.
      • ex) 트랜잭션 ...
  • 테스트의 어려움
    • 여러 서비스 간의 통합 테스트와 종단 간 테스트를 수행하기 어려울 수 있다.
  • 시스템 전반의 복잡성 증가
    • 전체 시스템이 여러 서비스로 이루어지므로 이를 관리하고 이해하는데 추가적인 노력과 복잡성이 발생할 수 있다.
  • 시스템 전환 비용
    • 기존 MA 구조에서 MSA로의 전환은 비용과 시간이 소요될 수 있다.
  • 분산 시스템 문제
    • 트랜잭션 처리, 일관성 유지 등 분산 시스템의 특유한 문제에 대한 처리가 부가적으로 필요하다.

이러한 MSA의 장단점은 프로젝트의 특성, 규모, 팀의 역량에 따라 다르게 느껴질 수 있다. 때문에 프로젝트를 계획할 때, 이러한 측면을 고려하여 결정하는 것이 중요하다.
MSA는 대규모 및 복잡한 시스템일 때, 서비스를 만드는 독립적인 팀이 존재할 경우, 유연한 확정이 요구될 경우에 적합한 아키텍처 스타일이다.

📌 MA vs MSA

여기까지 MA, MSA에 대해 알아봤으니 그 차이점을 알아보자.

구조

  • MA는 단일 애플리케이션으로 기능을 통합한 구조로 이루어져 있다. 때문에 각 기능은 서로 강하게 의존할 수 있다.
  • MSA는 독립적인 서비스로 애플리케이션을 나누어 구성한다. 각 서비스는 API를 통해 통신하며, 분산 시스템을 형성하게 된다.

배포

  • MA는 전체 애플리케이션을 한 번에 배포해야 한다. 한 부분만 수정해도 전체 애플리케이션을 다시 배포해야 한다.
  • MSA는 각 서비스를 독립적으로 개발, 테스트, 배포되며 이는 애플리케이션 전체를 다시 배포하지 않고도 개별 서비스를 업데이트 할 수 있다는 것을 의미한다.

기술의 다양성

  • MA는 애플리케이션 전체에 동일한 기술 스택을 사용해야 한다.
  • MSA는 각 서비스를 독립적으로 개발, 테스트, 배포되며 이는 애플리케이션 전체를 다시 배포하지 않고도 개별 서비스를 업데이트 할 수 있다는 것을 의미한다.

유연성

  • MA는 애플리케이션 확장이 필요한 경우, 전체를 확장해야 하므로 특정 부분의 수요가 증가 하더라도 전체 애플리케이션을 확장해야 한다.
  • MSA는 특정 서비스에 대한 수요가 증가하면 해당 서비스만 확장할 수 잇어 자원을 효율적으로 사용할 수 있다.

지연 시간

  • MA는 모든 서비스가 단일 코드 베이스에 존재하기 때문에 네트워크 대기시간이 발생하지 않는다.
  • MSA는 다른 서비스와 통신을 해야하기 때문에 네트워크 대기시간이 발생할 수 있다. 때문에 MA와 비교하여 더 느리다.

출처
https://memodayoungee.tistory.com/155
https://aws.amazon.com/ko/compare/the-difference-between-monolithic-and-microservices-architecture/
https://velog.io/@lsj8367/Monolithic-vs-MSA

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글