MSA - 정의 및 모놀리틱과 비교

MSATIL
2024.11.20
·
7 min read

MSA (Microservices Architecture)?

  • 애플리케이션을 작은 독립된 서비스(마이크로 서비스)들로 나누어 설계하는 아키텍처 스타일

    • 서비스들은 각각 독립적으로 배포, 개발, 유지보수가 가능하며 각 서비스들은 서로 다른 기술 스택이나 언어로 구현될 수 있다

MSA의 주요 개념

  • 서비스 분리

    • 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리

  • 독립 배포

    • 분리된 서비스를 독립적으로 배포

  • 데이터베이스 분리

    • 분리된 서비스마다 개별 데이터베이스와 상호작용

  • 서비스 통신

    • 각 서비스는 주로 REST API, 메시징 등을 통해 서로 통신

MSA의 핵심 설계 원칙

  • 각 서비스들은 독립적으로 실행될 수 있어야 한다

  • 각 서비스 간의 결합도를 최소화 해야 한다

  • 장애가 발생되더라도 전체 시스템이 중단되지 않도록 설계 해야 한다


모놀리틱과의 차이점 및 장단점

모놀리틱 아키텍처 (Monolithic Architecture)

  • 애플리케이션의 모든 기능이 단일 코드 베이스로 구성된 구조이다

  • 하나의 애플리케이션이 배포 단위가 되고 하나의 프로세스로 실행된다

MSA 아키텍처 (Microservices Architecture)

  • 애플리케이션을 작고 독립적인 서비스 단위로 분리하는 구조이다

  • 각 서비스는 독립적으로 배포, 실행, 개발이 가능하고 서비스 간의 통신은 REST API, 메시징 등을 통해 서로 통신한다

모놀리틱 아키텍처의 장점

  1. 단순한 개발 및 배포

    • 코드 베이스와 배포 단위가 하나의 애플리케이션이므로 초기 개발 및 관리가 용이하다

  2. 테스트 및 디버깅

    • 모든 코드가 하나의 애플리케이션에 존재하기 때문에 디버깅과 테스트가 상대적으로 간단하다

  3. 일관된 기술 스택

    • 하나의 기술로 통일되어 일관적이다

  4. 성능 이점

    • 서비스 간의 통신 오버헤드가 없으므로 성능이 비교적 우수하다

모놀리틱 아키텍처의 단점

  1. 변경 영향

    • 하나의 코드 변경이 전체 애플리케이션에 영향을 미칠 가능성이 있다

  2. 장애 전파

    • 하나의 문제로도 전체 애플리케이션이 중단될 가능성이 있다

  3. 대규모 팀관리

    • 대규모로 작업하는 프로젝트인 경우 많은 팀의 협업이 상대적으로 어렵다

MSA 아키텍처의 장점

  1. 독립적인 배포 및 개발

    • 서비스 단위로 개발 및 배포가 가능하여 배포 주기가 비교적 빠르다

    • 팀 별로 각각 다른 서비스를 독립적으로 개발할 수 있다

  2. 장애 격리

    • 한 서비스의 장애가 다른 서비스에 영향을 미칠 가능성이 최소화된다

  3. 다양한 기술 스택 선택

    • 서비스별로 적합한 기술 스택을 사용할 수 있다

  4. 유지보수 향상

    • 각 서비스가 작고 독립적이므로 관리 및 유지보수가 용이하다

  5. CI/CD 최적화

    • 서비스 단위로 배포가 가능하므로 CI/CD 환경에 적합하다

MSA 아키텍처의 단점

  1. 복잡성 증가

    • 서비스 간의 통신, 데이터 일관성 관리, 장애 처리 등 복잡도가 증가한다

  2. 초기 설계 및 구현 비용

    • 설계 및 구축에 많은 리소스와 시간이 소요된다

  3. 운영 부담 증가

    • 서비스가 많아질 경우 모니터링, 로깅, 배포, 테스트 등이 어려워진다

  4. 통신 오버헤드

    • REST API나 메시지 큐를 통한 서비스 간의 통신으로 인해 성능 저하 가능성이 존재한다

  5. 데이터 관리 어려움

    • 서비스 별 데이터베이스 분리로 데이터 일관성 및 트랜잭션 관리가 어려워진다

주요 차이점

2217

아키텍처 선택 기준

모놀리틱

  • 소규모 애플리케이션이나 초기 단계 프로젝트에 선택

  • 팀 규모가 작고 관리할 서비스가 적은 경우에 선택

MSA

  • 대규모 애플리케이션이나 확장성이 중요한 프로젝트에 선택

  • 복잡한 도메인과 높은 트래픽을 처리해야 하는 경우에 선택

  • 팀 규모가 크고 각 팀이 독립적으로 작업해야 하는 경우에 선택

즉 모놀리틱은 단순성과 속도가 중요할 때 유리하며 MSA는 확장성과 독립성이 필요할 때 적합하다

모놀리틱으로 시작한 뒤에 애플리케이션이 확장되어야 하는 경우에 점진적으로 분리하는 것도 좋을 것 같다







- 컬렉션 아티클