🔍 MicroService Architecture
MSA 의 정의
"the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery."
참조 : https://martinfowler.com/articles/microservices.html
마이크로 서비스 아키텍처 스타일은 단일 애플리케이션을 작은 서비스 제품군으로 개발하는 접근 방식이며, 스스로 돌아 갈 수 있는 작은 서비스와 HTTP 리소스 API와 통신합니다.이러한 서비스는 비즈니스 기능을 중심으로 구축되며 완전히 자동화된 배포 기계를 통해 독립적으로 배포할 수 있습니다.
💁🏻♀️ 이해하기 쉬운 말로 작은 서비스 단위(ex. 유저관련 서비스, 주문관련 서비서,,,) 를 쪼개어 관리하는 아키텍쳐입니다.

MSA 장단점
MSA 장점
- 배포(deployment) : 서비스 별 배포가 가능합니다. 요구사항을 빠르게 반영 할 수 있다는 장점이 있습니다.
- 확장(scaling) : aws같은 클라우드 서비스를 이용 할 경우 특정 서비스의 서버만 늘리는 등의 확장이 가능합니다.
- 장애(failure) : 하나의 서비스에서 장애가 나면 전체 서비스가 장애가 나는게 아니라 특정 서비스에서만 장애로 멈출 수 있습니다.
MSA 단점
- 개발, 테스트, 배포, 모니터링이 모놀리식에 비해 복잡합니다.
- 서비스 간 통신의 오버헤드가 발생할 수 있습니다.
- 일관성 유지와 트랜잭션 처리가 어려울 수 있습니다.
🔍 Monolithic Architecture
특징
- 단일 애플리케이션: 모든 기능이 단일한 코드베이스와 애플리케이션으로 구성됩니다.
- 하나의 데이터베이스: 주로 하나의 데이터베이스를 사용하며, 데이터 모델이 단일화됩니다.
- 단일 배포 단위: 전체 애플리케이션을 한 번에 배포합니다.
- 모놀리식 코드: 개발, 테스트, 배포가 하나의 코드베이스로 이루어집니다.
- 쉬운 개발 및 디버깅: 단일 코드베이스로 인해 개발 및 디버깅이 쉬울 수 있습니다.
장단점
- 장점
- 간단한 구현과 유지보수가 가능합니다.
- 개발 초기에는 빠르게 개발이 가능합니다.
- 모놀리식 애플리케이션 내의 컴포넌트들이 서로 직접 호출할 수 있어 통합이 상대적으로 간단합니다.
- 단점
- 애플리케이션 규모가 커지면 복잡성과 유지보수 어려움이 발생할 수 있습니다.
- 특정 기능의 스케일링이 다른 기능에도 영향을 미칩니다.
- 새로운 기능을 추가하거나 기존 기능을 변경할 때 전체 애플리케이션을 다시 배포해야 합니다.
선택 기준
- 모놀리식 단순한 애플리케이션, 빠른 초기 개발, 유지보수 간소화를 필요로 하는 경우에 적합합니다.
- MSA 규모가 큰 조직, 팀 간 독립성, 다양한 기술 스택 사용이 필요한 경우, 서비스 단위로 스케일링이 필요한 경우에 적합합니다.
마이크로서비스 아키텍처는 더 복잡하고 관리가 어려울 수 있지만, 애플리케이션의 규모와 요구 사항에 따라 더 좋은 확장성과 유연성을 제공할 수 있다. 선택은 프로젝트의 특성과 목표에 따라 적절한 아키텍처를 고려해야 합니다.