-
[Architecture] MA와 MSA 개념 / 장단점 / 차이점DEV/ETC 2024. 5. 30. 16:11
MA : Monolithic Architecture
모놀리식 아키텍처는 단일 코드 베이스의 애플리케이션이다.
전체 애플리케이션은 단일 코드로 작성되어 단일 데이터베이스에 연결된다.
보편적으로 많이 사용되는 방식으로 마이크로서비스 아키텍처보다 구현이 쉽고, 덜 복잡하다는 장점이 있다.장점
주로 단일코드 베이스, 단일 애플리케이션에서 나오는 장점을 갖고 있다.
- 단순성
- 간편한 배포
- 보편성
- 쉬운 디버깅
- 쉬운 테스트 (ft. E2E 테스트)
- 쉬운 모니터링
단점
- 큰 규모에서는 유지보수가 어려움
- 유연하지 않은 확장성 : 일부 확장이 어렵고 전체적인 확장만 가능
- 대규모 팀 작업의 어려움 : 동일한 코드와 환경에서 작업하기때문에 충돌 가능성이 높고 다른 기능에 영향을 줄수있음
- 기술 유연성 낮음 : 다른 기술로 변경하는것에 어려움이 있기 때문에 오랜기간 동일한 기술 사용해야함
추천 사용 환경
- 규모가 작은 애플리케이션
- 복잡한 시스템 설계 및 관리가 필요하지 않은 경우
- 아이디어 구상 단계일 경우
- 주된 작업이 CRUD일 경우
MSA : Microservices Architecture
마이크로서비스 아키텍처는 애플리케이션을 작은 서비스로 분할하고, 각 서비스가 서로 독립적으로 실행 및 느슨하게 결합되어 기술에 구애받지 않는다. 그래서 각각 고유한 데이터베이스를 소유할 수 있다. 이러한 많은 장점을 제공하지만 그만큼 복잡하다는 단점이 있다.
장점
주로 서비스가 각각 독립적으로 분리되어 나오는 장점을 가지고 있다.
- 유연한 확장 : 다른 서비스와 독립적으로 확장 가능
- 독립적인 배포 : 느슨하게 결합되어 있어 독립적으로 업데이트 및 배포 가능
- 단일 실패 지점 제거
- 전체 서비스 중단 위험 감소
- 서비스 마다 각각 다른 데이터베이스 소유
- 다양한 기술 수용 가능 : 각각 서비스가 서로 다른 기술 사용 가능
- 민첩성 : 전체 애플리케이션에 큰 영향을 주지 않고, 새버전으로 배포 가능
단점
각각의 서비스가 분리되어 복잡한 관리가 주요 단점이다.
- 개발 생산성 필요 : 로컬에서 많은 애플리케이션을 실행 할 수 있는 환경을 갖춰야함
- 어려운 디버깅 : 하나의 테스트를 위해 둘 이상의 서비스를 실행해야함
- 마이크로서비스 간 통신 : 동기/비동기 통신 고려해야하며 이러한 부분이 복잡성을 증가시킴
- 오류 처리 : 두 개의 서비스를 사용해 요청할 경우 첫번째 서비스에서 문제 발생시 작업을 이전상태로 되돌릴수있도록 고려해야함
- 표준화 부족 : 공통 플랫폼이 없어 여러언어, 로깅 표준 및 모니터링이 사용된다. 마이크로 서비스에서 발생하는 모든 오류 또는 문제를 모니터링 할 수 있는 중앙 모니터링 체계를 갖춰야한다.
- 오류 식별의 어려움
추천 사용 환경
- 비즈니스가 계속 성장하고 있는 경우
- 비즈니스 도메인에 대해 잘 알고 있거나, 요구사항이 명확한 경우
- 복잡한 애플리케이션이 될 것임을 식별할 수 있는 경우
- 가용성 및 유연한 확장이 요구사항인 경우
- 서비스를 만드는 서로 다른 독립적인 팀이 존재하는 경우
두 아키텍처의 차이점
확장성
모놀리식은 전체적인 애플리케이션을 확장할 수 있는 것에 비해, 마이크로 서비스는 필요한 서비스에 대해서만 부분적으로 확장이 가능하다.
복잡성
모놀리식은 단일 코드 베이스의 단일 애플리케이션으로 복잡성이 낮지만, 마이크로서비스는 애플리케이션 복잡성에 따라 소스코드, 프레임워크 및 기술이 포함되고 여러 서비스가 API를 통해 서비스 간 통신하는 형태로 구축된다.
지연시간
마이크로서비스는 다른 서비스와 통신할 때 네트워크를 통해 데이터를 보내거나 받는다. 반면 모놀리식은 모든 서비스가 동일한 워크플로우 내에 있기 때문에 네트워크 대기 시간이 발생하지 않는다. 때문에 마이크로서비스는 모놀리식보다 성능이 느리다.
신뢰성
모놀리식은 단 하나의 서버로 구성되어 장애가 발생하면 전체 애플리케이션이 다운된다. 반면 마이크로서비스는 하나가 실패하면 장애 격리를 통해 애플리케이션을 유지할 수 있다.
적합한 아키텍처를 선택하기 위한 고려사항
- 개발하려는 애플리케이션 유형
- 프로젝트의 타임라인
- 예산
- 팀의 도메인 경험
참고 포스팅
https://yozm.wishket.com/magazine/detail/1813/
https://6mini.github.io/software%20architecture%20pattern/2023/01/31/monolith-micro/
'DEV > ETC' 카테고리의 다른 글
소프트웨어 테스트 품질 (0) 2024.07.08 소프트웨어 테스트 원칙과 유형 (0) 2024.07.04 [Git] git 커밋 메시지 규칙 (0) 2024.06.12 [Architecture] 헥사고날 아키텍처(Hexagonal Architecture) (ft. 계층형 아키텍처, 클린 아키텍처, DDD) (2) 2024.06.05 [JWT] JSON WEB TOKEN 개념 / 구성 요소 / 동작 방식 / 장단점 / Session과 차이점 / 저장 위치 (0) 2024.05.30