내일배움캠프

[내일배움캠프] MSA와 Spring Cloud

munsik22 2026. 4. 11. 15:22

🧩 MSA란?

Microservices Architecture (MSA)

  • 정의: 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처 스타일
  • 각 서비스는 특정 비즈니스 기능을 수행하며, 서로 독립적으로 배포되고 확장될 수 있음
  • 서비스 간의 통신은 주로 HTTP/HTTPS, 메시지 큐 등을 통해 이루어짐
  • 특징
    • 독립적인 배포 가능성: 각 서비스는 독립적으로 배포할 수 있으며, 다른 서비스에 영향을 주지 않고 업데이트할 수 있음
    • 작은 팀 구성: 각 서비스는 작은 팀이 독립적으로 개발하고 관리할 수 있음
    • 기술 스택의 다양성: 각 서비스는 적절한 기술 스택을 자유롭게 선택할 수 있음
  • 장점
    • 확장성: 각 서비스는 독립적으로 확장 가능, 특정 기능에 대한 성능 최적화가 용이
    • 유연성: 다양한 기술 스택을 사용하여 서비스별 최적화 가능
    • 독립적 배포: 서비스별로 독립적 배포가 가능하여 배포 주기를 단축
    • 작은 팀 구성: 서비스별 작은 팀으로 구성되어 빠르게 개발 가능
  • 단점
    • 복잡성: 서비스 간 통신, 데이터 일관성 유지, 트랜잭션 관리 등의 복잡성이 증가
    • 운영비용: 각 서비스의 모니터링, 로깅, 장애 대응 등을 개별적으로 관리해야 하므로 운영 비용이 증가
    • 데이터 관리: 분산된 데이터베이스로 인해 데이터 일관성 유지가 어려울 수 있음
    • 네트워크 지연: 서비스 간의 통신이 네트워크를 통해 이루어지므로 지연 시간이 발생할 수 있음

MA vs MSA

구분 Monolithic Architecture Micro-Service Architecture
정의 모든 기능이 하나의 애플리케이션 내에 포함됨 서로 다른 기능을 수행하는 여러 개의 독립적인 서비스로 구성된 애플리케이션
장점 간단한 배포, 단일 DB 확장적, 독립적 배포, 유연성
단점 확장성 부족, 긴 개발 주기, 유연성 부족 복잡성 증가, 운영비용 증가

🧩 Spring Cloud란?

Spring Cloud

  • 정의: 마이크로서비스 개발을 위해 다양한 도구와 서비스를 제공하는 Spring 프레임워크의 확장
  • MSA를 쉽게 구현하고 운영할 수 있도록 도움
  • 주요 기능
    • 서비스 등록 및 디스커버리: Eureka, Consul, Zookeeper
    • 로드 밸런싱: Ribbon, Spring Cloud LoadBalancer
    • 서킷 브레이커: Hystrix, Resilience4j
    • API 게이트웨이: Zuul, Spring Cloud Gateway
    • 구성 관리: Spring Cloud Config
    • 분산 추적: Spring Cloud Sleuth, Zipkin
    • 메시징: Spring Cloud Stream

Spring Cloud의 주요 모듈

  1. 서비스 등록 및 디스커버리
    • Eureka
      • 넷플릭스가 개발한 서비스 디스커버리 서버
      • MSA에서 각 서비스의 위치를 동적으로 관리
      • 특징
        • 서비스 레지스트리: 모든 서비스 인스턴스의 위치를 저장하는 중앙 저장소
        • 헬스 체크(Health check): 서비스 인스턴스의 상태를 주기적으로 확인하여 가용성을 보장
  2. 로드 밸런싱
    • Ribbon
      • 넷플릭스가 개발한 클라이언트 사이드 로드 밸런서
      • 서비스 인스턴스 간의 부하를 분산
      • 특징
        • 서버 리스트 제공자: Eureka로부터 서비스 인스턴스 리스트를 제공받아 로드 밸런싱에 사용
        • 로드밸런싱 알고리즘: 라운드 로빈, 가중치 기반 등 다양한 로드 밸런싱 알고리즘 지원
        • Failover: 요청 실패 시 다른 인스턴스로 자동 전환
  3. 서킷 브레이커
    • Hystrix
      • 넷플릭스가 개발한 서킷 브레이커 라이브러리
      • 서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지
      • 특징
        • 서킷 브레이커 상태: 클로즈드, 오픈, 하프-오픈 상태를 통해 호출 실패를 관리
        • Failback: 호출 실패 시 대체 로직을 제공하여 시스템 안정성 확보
        • 모니터링: Hystrix Dashboard를 통해 서킷 브레이커 상태 모니터링
    • Resilience4j
      • 자바 기반의 경량 서킷 브레이커 라이브러리
      • 특징
        • 서킷 브레이커: 호출 실패를 감지하고 서킷을 열어 추가적인 호출을 차단하여 시스템의 부하를 줄임
        • Failback: 호출 실패 시 대체 로직을 실행하여 시스템의 안정성을 유지
        • 타임아웃 설정: 호출의 응답 시간을 설정하여 느린 서비스 호출에 대응할 수 있음
        • 재시도: 재시도 기능을 지원하여 일시적인 네트워크 문제 등에 대응할 수 있음

Spring Cloud 구성 요소의 활용

  1. API 게이트웨이
    • Zuul
      • 넷플릭스가 개발한 API 게이트웨이
      • 모든 서비스 요청을 중앙에서 관리
      • 특징
        • 라우팅: 요청 URL에 따라 적절한 서비스로 요청 전달
        • 필터: 요청 전후에 다양한 작업을 수행할 수 있는 필터 체인 제공
        • 모니터링: 요청 로그 및 메트릭을 통해 서비스 상태 모니터링 할 수 있음
    • Cloud Gateway
      • 클라우드 게이트웨이는 스프링 클라우드에서 제공하는 API 게이트웨이
      • 마이크로서비스 아키텍처에서 필수적인 역할
      • 특징
        • 루팅 및 필터링: 요청을 받아 특정 서비스로 라우팅하고 필요한 인증 및 권한 부여를 수행
        • 보안: 외부 요청으로부터 애플리케이션을 보호하고, 보안 정책을 적용함
        • 효율성: 마이크로서비스 아키텍처에서 필요한 요청 처리 및 분산 환경의 관리를 효율적으로 수행
  2. 구성 관리
    • Spring Cloud Config
      • 분산된 환경에서 중앙 집중식 설정 관리를 제공
      • 특징
        • Config 서버: 중앙에서 설정 파일을 관리하고 각 서비스에 제공
        • Config 클라이언트: Config 서버에서 설정을 받아서 사용하는 서비스
        • 설정갱신: 설정 변경 시 서비스 재시작 없이 실시간으로 반영