본문 바로가기
최신 IT

MSA(Micro Service Architecture)로의 전환

by 구라100단 2025. 11. 11.

개요

Monolithic vs Micro Service Architecture

  • Monolithic Architecture - App(서비스)개발시 전체 소스 코드를 하나의 Application으로 통합 빌드 및 배포하는 아키텍쳐(단위 기능별 모듈과 구조화는 되어 있으나 전체 기능을 하나의 App으로 Build & 배포하는 구조)
  • Micro Service Architecture - 서비스(도메인)별로 독립적인 애플리케이션 환경으로 개발/배포하는 아키텍쳐

MSA의 장점 (MA 대비)

  • 도메인 하나의 장애가 서비스 전체에 전파되지 않는다 (기능 하나의 장애가 전체 서비스 장애가 되지 않는다)
  • 상대적으로 각 도메인의 유지보수가 쉽다
  • 빌드 및 배포 시간을 줄여서 생산성을 높일 수 있다.
  • 도메인별로 Scale-out이 쉽다

MSA로 전환의 목적

  • 확장성, 유연성, 유지보수성을 높이기 위해
  • 향후 Project의 요구 사항 충족을 위한 중간 단계

MSA를 지원하는 공통 Infra

Monolith에서 MSA로 전환하기 위해 단순히 기능별 App으로 구분해서 API 호출하는 형태가 아니라 경험적으로 각종 필요한 Infra들이 있어야 원활하고 편한 MSA 관리를 수행할 수 있다.

  1. API 게이트웨이 (API Gateway):
    • 역할: 모든 클라이언트 요청의 단일 진입점(Single Point of Entry) 역할
    • 주요 기능: 라우팅(Routing), 인증/인가(Authentication/Authorization), 속도 제한(Rate Limiting), 로드 밸런싱, 공통 응답 처리 등을 수행. 모놀리스로 가던 트래픽을 신규 마이크로서비스로 분기하는 '교통 제어'의 핵심.
  2. 서비스 디스커버리 (Service Discovery):
    • 역할: 서비스들이 동적으로 확장/축소될 때, 다른 서비스가 특정 서비스의 네트워크 위치(IP, 포트)를 찾을 수 줌.
    • 작동: 각 서비스는 시작 시 자신을 '서비스 레지스트리(Service Registry)'에 등록하고, 다른 서비스는 레지스트리 조회를 통해 통신할 대상을 찾음. (예: Netflix Eureka, Consul)
  3. 설정 서버 (Configuration Server):
    • 역할: 여러 마이크로서비스에 흩어져 있는 설정 파일(DB 정보, API 키 등)을 중앙에서 관리토록 함.
    • 장점: 서비스 재배포 없이 설정을 변경하고 동적으로 반영할 수 있음. (예: Spring Cloud Config)
  4. 서비스 간 통신 (Inter-Service Communication):
    • 동기식 (Synchronous): 한 서비스가 다른 서비스의 응답을 기다리는 방식. (예: REST API(HTTP), gRPC)
    • 비동기식 (Asynchronous): 응답을 기다리지 않고 메시지를 보내는 방식. 서비스 간 결합도를 낮추는 데 유리. (예: 메시지 큐 - Kafka, RabbitMQ)
  5. 데이터베이스 분리 (Database per Service):
    • 핵심 원칙: 각 마이크로서비스는 자신만의 독립된 데이터베이스를 소유.
    • 이유: 다른 서비스가 내 데이터베이스 스키마에 직접 의존하는 것을 막아, 진정한 독립성을 보장.
  6. 회복성 및 장애 격리 (Resilience & Fault Tolerance):
    • 서킷 브레이커 (Circuit Breaker): 특정 서비스에 장애가 발생했을 때, 해당 서비스로의 요청을 일시적으로 차단하여 장애가 전체 시스템으로 전파(Cascading Failure)되는 것을 막음. (예: Resilience4j)
  7. 중앙화된 로깅 및 모니터링 (Centralized Logging & Monitoring):
    • 로깅: 여러 서비스에서 발생하는 로그를 한곳에 수집하여 추적. (예: ELK Stack - Elasticsearch, Logstash, Kibana)
    • 모니터링: 서비스의 상태, 성능 지표(Metric)를 시각화하고 알림을 설정함. (예: Prometheus, Grafana)
  8. 컨테이너 및 오케스트레이션 (Container & Orchestration):
    • 역할: 서비스를 독립적인 환경(컨테이너)으로 패키징하고(예: Docker), 이를 자동으로 배포, 확장, 관리. (예: Kubernetes)

 

MSA의 몇가지 특징

  • API Gateway는 외부에의 유일한 진입 경로
  • REST API가 대표적인 통신 방식이나 그외에도 Message Queue 등 다양한 통신 프로토콜을 이용할 수 있음(내부적으로)

MSA의 단점

  • 전환 또는 최초 구축에 많은 시간과 비용 발생
  • 서비스 관리 및 운영 측면의 유지보수 복잡
    • Neflix OSS 및 Spring Cloud 프레임워크 등 적극 활용 필요
      • Spring Cloud Eureka - Service Discovery
      • Spring Cloud Gateway - API Gateway
      • Spring Cloud Config - Configuration Server
      • Spring Cloud Contract WireMock
      • Spring Cloud OpenFeign - 서비스 간 통신
      • Apache Kafka, RabbitMQ - 서비스 간 통신(Message Queue)
    • K8S 도입

Reference