본문 바로가기

개발공부

MSA(Microservices Architecture)란?

MSA(Microservices Architecture)란?

MSA(Microservices Architecture, 마이크로서비스 아키텍처)는 애플리케이션을 작은 독립적인 서비스들로 나누어 개발하고 운영하는 아키텍처 스타일입니다. 각 서비스는 특정 비즈니스 기능을 담당하며, 독립적으로 배포 및 확장이 가능합니다.


1. MSA의 특징

  1. 독립적인 서비스 구성
    • 각 마이크로서비스는 독립적으로 개발, 배포, 운영됩니다.
    • 특정 기능(예: 사용자 관리, 주문 처리, 결제 등)을 담당하는 작은 단위의 서비스로 구성됩니다.
  2. 분산 시스템
    • 서비스 간 네트워크를 통해 통신하며, 보통 REST API, gRPC, 메시지 큐(Kafka, RabbitMQ) 등을 활용합니다.
  3. 폴리글랏 프로그래밍
    • 각 서비스는 서로 다른 프로그래밍 언어, 프레임워크, 데이터베이스를 사용할 수 있습니다.
  4. 자동화된 배포 및 CI/CD
    • MSA 환경에서는 CI/CD(Continuous Integration/Continuous Deployment)를 적극적으로 활용하여 빠르게 배포합니다.
    • Kubernetes, Docker 같은 컨테이너 기술과 오케스트레이션 도구가 많이 사용됩니다.

2. MSA의 장점

유연한 확장성

  • 서비스별로 개별적으로 확장 가능하여 트래픽 증가에 효과적으로 대응할 수 있음.

개발 및 배포 독립성

  • 특정 서비스만 수정 및 배포할 수 있어 애플리케이션 전체를 다시 빌드할 필요 없음.

다양한 기술 스택 사용 가능

  • 각 서비스별로 최적의 기술(언어, DB, 프레임워크 등)을 선택할 수 있음.

장애 격리

  • 한 서비스에 문제가 발생해도 전체 시스템이 다운되지 않도록 설계할 수 있음.

3. MSA의 단점

운영 복잡성 증가

  • 서비스가 많아질수록 네트워크 관리, 모니터링, 장애 대응이 어려워짐.

데이터 일관성 유지 어려움

  • 각 서비스가 개별 데이터베이스를 가질 경우, 데이터 동기화와 분산 트랜잭션 관리가 복잡해짐.

배포 및 테스트 어려움

  • 여러 서비스가 서로 연결되어 있기 때문에 통합 테스트와 배포 과정이 복잡할 수 있음.

4. MSA vs 모놀리식 아키텍처

비교 항목 MSA 모놀리식 아키텍처

구성 방식 여러 개의 독립된 서비스 하나의 거대한 애플리케이션
배포 방식 개별 서비스 배포 가능 전체 애플리케이션을 한 번에 배포
확장성 개별 서비스 단위 확장 전체 시스템을 확장해야 함
유지보수 특정 서비스만 수정 가능 코드 변경 시 전체 시스템 영향
기술 스택 각 서비스별 다른 기술 사용 가능 단일 기술 스택 유지

5. MSA에서 사용되는 주요 기술

  • API Gateway: Nginx, Kong, Spring Cloud Gateway
  • 서비스 디스커버리: Eureka, Consul, Zookeeper
  • 서비스 간 통신: REST API, gRPC, Kafka, RabbitMQ
  • 컨테이너 및 오케스트레이션: Docker, Kubernetes
  • 로그 및 모니터링: ELK Stack, Prometheus, Grafana

6. 언제 MSA를 도입해야 할까?

  • 서비스가 커지면서 모놀리식 아키텍처의 유지보수가 어려워지는 경우
  • 빠른 배포 및 확장이 필요한 경우
  • 여러 팀이 독립적으로 개발을 진행해야 하는 경우
  • 다양한 기술 스택을 활용해야 하는 경우

결론

MSA는 확장성과 유연성이 뛰어나지만, 운영 복잡성이 증가하는 단점이 있습니다. 따라서 모든 프로젝트에 적합한 것은 아니며, 규모와 요구사항에 맞춰 신중하게 선택해야 합니다.

'개발공부' 카테고리의 다른 글

SaaS란?  (0) 2025.02.20
Growth Hacking(그로스 해킹)란?  (0) 2025.02.19
Agile 개발이란?  (0) 2025.02.19