[MSA] MSA정리

이건호·2025년 4월 8일
0

🌟 MSA (Microservices Architecture) 개념

  • 정의: 애플리케이션을 작은 독립적인 서비스들로 분리하여 개발, 베포, 운영하는 아키텍처 스타일.
  • 각각의 서비스는 특정 기능이나 도메인을 담당하며 독립적으로 배포 및 확장될 수 있음.

📌 MSA 특징

  1. 서비스의 독립성
    • 각 서비스는 독립적으로 배포, 개발, 운영할 수 있음.
    • 특정 서비스의 문제 발생 시 다른 서비스에는 영향을 주지 않도록 할 수 있음.
  2. 모듈화 & 단일 책임의 원칙 (Single Responsibility Principle)
    • 서비스는 특정 비즈니스 기능에 집중하여 구현됨.
    • 예를 들어, 사용자 관리 서비스, 주문 처리 서비스, 결제 서비스 등으로 분리될 수 있음.
  3. 데이터 독립성
    • 각 서비스는 자체 데이터베이스를 가질 수 없음.
    • 데이터 일관성을 유지하기 위해 서비스 간 통신은 메시지 기반 또는 API 호출로 이루어짐.
  4. 확장성 (Scalability)
    • 필요한 서비스만 독립적으로 확장할 수 있음.
    • 예를 들어, 사용자 요청이 많이 몰리는 인증 서비스만 확장할 수 있음.
  5. 기술 스택 독립성
    • 각 서비스는 서로 다른 기술 스택을 사용할 수 있음.
    • 예를 들어, 일부 서비스는 Java(Spring Boot), 다른 서비스는 Node.js로 구현 가능.

📌 MSA의 구성 요소

  1. API Gateway

    • 클라이언트의 요청을 받아 적절한 서비스로 라우팅하는 역할.
    • 인증, 로깅, 로드 밸런싱, Rate Limiting 등의 기능을 포함.
  2. Service Discovery

    • 서비스 인스턴스를 동적으로 등록하고 검색할 수 있도록 지원.
    • 예: Netflix Eureka, Consul, etcd.
  3. Load Balancer

    • 트래픽을 여러 서비스 인스턴스에 분산하여 부하를 균등하게 분배.
  4. Communication Protocol

    • 서비스 간 통신은 주로 HTTP/REST, gRPC, 메시지 브로커(Kafka, RabbitMQ등) 등을 사용
  5. Configuration Management

    • 각 서비스의 설정 정보를 중앙에서 관리하고 배포.
    • 예: Spring Cloud Config, Consul.
  6. Monitoring & Logging

    • 각 서비스의 상태를 모니터링하고 로그를 수집하여 분석.
    • 예: ELK Stack(Elasticsearch, Logstash, Kibana), Prometheus, Grafana.

📌 MSA의 장점

  1. 유연한 확장성
    • 서비스별로 독립적으로 확장 가능하여 리소스를 효율적으로 사용할 수 있음.
  2. 개발 속도 향상
    • 작은 팀 단위로 독립적인 서비스를 개발할 수 있어 전체 개발 속도를 증가시킴.
  3. 장애 격리 (Fault Isolation)
    • 특정 서비스에 문제가 발생하더라도 전체 시스템에는 영향을 최소화할 수 있음.
  4. 다양한 기술 사용 가능
    • 팀별로 적합한 기술을 자유롭게 선택할 수 있음

📌 MSA의 단점

  1. 복잡성 증가
    • 서비스가 많아질수록 관리 및 운영이 복잡해짐.
  2. 데이터 일관성 문제
    • 서비스 간 데이터베이스를 공유하지 않기 때문에, 데이터 일관성을 유지하는 것이 어려울 수 있음
  3. 통신 비용 증가
    • 서비스 간의 네트워크 호출이 증가하여 성능에 영향을 줄 수 있음.
  4. 테스트의 어려움
    • 분산된 서비스 구조로 인해 전체 시스템 테스트가 어려워질 수 있음.

📌 MSA와 모놀리식 아키텍처

특징MSA (Microservices Architecture)모놀리식 아키텍처 (Monolithic Architecture)
배포 방식개별 서비스 별로 독립적 배포 가능전체 애플리케이션을 한 번에 배포
확장성필요한 서비스만 독립적으로 확장 가능전체 애플리케이션을 확장해야 함
장애 격리특정 서비스 장애가 전체 시스템에 영향 없음전체 시스템이 중단될 수 있음
복잡성서비스 관리 및 통신 구조가 복잡단순하고 관리가 용이
데이터 접근서비스별로 독립적인 데이터베이스 사용하나의 데이터베이스 공유
기술 선택서비스별로 다른 기술 스택 사용 가능동일한 기술 스택 사용
개발 속도독립적인 서비스 개발로 병렬 작업 가능하나의 애플리케이션으로 병목 발생 가능
테스트 용이성개별 서비스 테스트 가능전체 애플리케이션 테스트 필요
통신 비용서비스 간 네트워크 호출로 비용 증가 가능내부 메서드 호출로 비용 적음
데이터 일관성분산된 데이터베이스로 일관성 유지 어려움단일 데이터베이스로 일관성 유지 용이

📌 MSA를 적용하기 좋은 상황

  • 트래픽 변화가 심한 대규모 애플리케이션.
  • 특정 기능이나 서비스의 독립적인 확장이 필요한 경우.
  • 여러 팀이 동시에 기능을 개발해야 하는 경우.
  • 클라우드 환경에서 동적으로 확장/축소가 필요한 경우.

📌 MSA의 예시

  • 넷플릭스 (Netflix)
  • 아마존 (Amazon)
  • 우버 (Uber)
  • 카카오 (Kakao)
profile
주니어 자바 개발자 이건호입니다!

0개의 댓글