DEV/ETC

[Architecture] MA와 MSA 개념 / 장단점 / 차이점

Imvory 2024. 5. 30. 16:11

MA : Monolithic Architecture

출처 : https://6mini.github.io/software%20architecture%20pattern/2023/01/31/monolith-micro/

모놀리식 아키텍처는 단일 코드 베이스의 애플리케이션이다.
전체 애플리케이션은 단일 코드로 작성되어 단일 데이터베이스에 연결된다.
보편적으로 많이 사용되는 방식으로 마이크로서비스 아키텍처보다 구현이 쉽고, 덜 복잡하다는 장점이 있다.

 

장점

주로 단일코드 베이스, 단일 애플리케이션에서 나오는 장점을 갖고 있다.

  • 단순성
  • 간편한 배포
  • 보편성
  • 쉬운 디버깅
  • 쉬운 테스트 (ft. E2E 테스트)
  • 쉬운 모니터링

단점

  • 큰 규모에서는 유지보수가 어려움
  • 유연하지 않은 확장성 : 일부 확장이 어렵고 전체적인 확장만 가능
  • 대규모 팀 작업의 어려움 : 동일한 코드와 환경에서 작업하기때문에 충돌 가능성이 높고 다른 기능에 영향을 줄수있음
  • 기술 유연성 낮음 : 다른 기술로 변경하는것에 어려움이 있기 때문에 오랜기간 동일한 기술 사용해야함

추천 사용 환경

  • 규모가 작은 애플리케이션
  • 복잡한 시스템 설계 및 관리가 필요하지 않은 경우
  • 아이디어 구상 단계일 경우
  • 주된 작업이 CRUD일 경우

MSA : Microservices Architecture

출처 : https://6mini.github.io/software%20architecture%20pattern/2023/01/31/monolith-micro/

마이크로서비스 아키텍처는 애플리케이션을 작은 서비스로 분할하고, 각 서비스가 서로 독립적으로 실행 및 느슨하게 결합되어 기술에 구애받지 않는다. 그래서 각각 고유한 데이터베이스를 소유할 수 있다. 이러한 많은 장점을 제공하지만 그만큼 복잡하다는 단점이 있다.

 

장점

주로 서비스가 각각 독립적으로 분리되어 나오는 장점을 가지고 있다.

  • 유연한 확장 : 다른 서비스와 독립적으로 확장 가능
  • 독립적인 배포 : 느슨하게 결합되어 있어 독립적으로 업데이트 및 배포 가능
  • 단일 실패 지점 제거
  • 전체 서비스 중단 위험 감소
  • 서비스 마다 각각 다른 데이터베이스 소유
  • 다양한 기술 수용 가능 : 각각 서비스가 서로 다른 기술 사용 가능
  • 민첩성 : 전체 애플리케이션에 큰 영향을 주지 않고, 새버전으로 배포 가능

단점

각각의 서비스가 분리되어 복잡한 관리가 주요 단점이다.

  • 개발 생산성 필요 : 로컬에서 많은 애플리케이션을 실행 할 수 있는 환경을 갖춰야함
  • 어려운 디버깅 : 하나의 테스트를 위해 둘 이상의 서비스를 실행해야함
  • 마이크로서비스 간 통신 : 동기/비동기 통신 고려해야하며 이러한 부분이 복잡성을 증가시킴
  • 오류 처리 : 두 개의 서비스를 사용해 요청할 경우 첫번째 서비스에서 문제 발생시 작업을 이전상태로 되돌릴수있도록 고려해야함
  • 표준화 부족 : 공통 플랫폼이 없어 여러언어, 로깅 표준 및 모니터링이 사용된다. 마이크로 서비스에서 발생하는 모든 오류 또는 문제를 모니터링 할 수 있는 중앙 모니터링 체계를 갖춰야한다.
  • 오류 식별의 어려움

추천 사용 환경

  • 비즈니스가 계속 성장하고 있는 경우
  • 비즈니스 도메인에 대해 잘 알고 있거나, 요구사항이 명확한 경우
  • 복잡한 애플리케이션이 될 것임을 식별할 수 있는 경우
  • 가용성 및 유연한 확장이 요구사항인 경우
  • 서비스를 만드는 서로 다른 독립적인 팀이 존재하는 경우

아키텍처의 차이점

확장성

모놀리식은 전체적인 애플리케이션을 확장할 수 있는 것에 비해, 마이크로 서비스는 필요한 서비스에 대해서만 부분적으로 확장이 가능하다.

 

복잡성

모놀리식은 단일 코드 베이스의 단일 애플리케이션으로 복잡성이 낮지만, 마이크로서비스는 애플리케이션 복잡성에 따라 소스코드, 프레임워크 및 기술이 포함되고 여러 서비스가 API를 통해 서비스 간 통신하는 형태로 구축된다.

 

지연시간

마이크로서비스는 다른 서비스와 통신할 때 네트워크를 통해 데이터를 보내거나 받는다. 반면 모놀리식은 모든 서비스가 동일한 워크플로우 내에 있기 때문에 네트워크 대기 시간이 발생하지 않는다. 때문에 마이크로서비스는 모놀리식보다 성능이 느리다.

 

신뢰성

모놀리식은 단 하나의 서버로 구성되어 장애가 발생하면 전체 애플리케이션이 다운된다. 반면 마이크로서비스는 하나가 실패하면 장애 격리를 통해 애플리케이션을 유지할 수 있다.

적합한 아키텍처를 선택하기 위한 고려사항

  • 개발하려는 애플리케이션 유형
  • 프로젝트의 타임라인
  • 예산
  • 팀의 도메인 경험

 

참고 포스팅

https://yozm.wishket.com/magazine/detail/1813/

https://6mini.github.io/software%20architecture%20pattern/2023/01/31/monolith-micro/