ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Architecture] MA와 MSA 개념 / 장단점 / 차이점
    DEV/ETC 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/

    댓글

Designed by Tistory.