MSA 아키텍처

미미·2025년 9월 18일

MSA

목록 보기
1/5

MSA란?

Microservices Architecture (MSA)

MSA는 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처 스타일으로 각 서비스는 특정 비즈니스 기능을 수행하며, 서로 독립적으로 배포되고 확장될 수 있습니다.
서비스 간의 통신은 주로 HTTP/HTTPS, 메시지 큐 등을 통해 이루어집니다.

주요 특징

  • 독립적인 배포 가능성: 각 서비스는 독립적으로 배포할 수 있으며, 다른 서비스에 영향을 주지 않고 업데이트할 수 있습니다.
  • 작은 팀 구성: 각 서비스는 작은 팀이 독립적으로 개발하고 관리할 수 있습니다.
  • 기술 스택의 다양성: 각 서비스는 적절한 기술 스택을 자유롭게 선택할 수 있습니다.

장점

  • 확장성: 특정 서비스만 확장하여 성능을 최적화할 수 있습니다.
  • 독립적 배포: 개별 서비스의 변경 사항을 독립적으로 배포할 수 있습니다.
  • 유연성: 서비스별로 적합한 기술 스택을 선택할 수 있습니다.

단점

  • 복잡성 증가: 서비스 간 통신, 데이터 일관성 유지 등의 복잡성이 증가합니다.
  • 운영비용 증가: 각 서비스의 모니터링, 로깅 등을 개별적으로 관리해야 합니다.
  • 데이터 관리: 분산된 데이터베이스로 인해 데이터 일관성 유지가 어려울 수 있습니다.
  • 네트워크 지연: 서비스 간의 통신이 네트워크를 통해 이루어지므로 지연 시간이 발생할 수 있습니다.



MSA 아키텍처를 학습하기 위해 주문 서비스를 예시로 설계해보았습니다.

대략적인 구조는 위 그림과 같으며, 주문 처리의 플로우는 주문 확인 → 상품 확인 → 유저 확인 순서로 진행됩니다.
• 사용자는 API Gateway를 통해 요청을 보냅니다.
• API Gateway는 로그인 여부를 필터링한 뒤, 요청 경로에 따라 적절한 애플리케이션으로 요청을 전달합니다.
• 주문 서비스는 상품 서비스로 상품 정보를 요청합니다. 이때 상품 서비스가 여러 인스턴스로 구성되어 있기 때문에, Ribbon이 라운드 로빈(Round Robin) 방식으로 어느 인스턴스로 보낼지 결정합니다.

구성 요소별 설명

1. API Gateway
• 모든 클라이언트 요청의 진입점입니다.
• 인증/인가 같은 공통 로직을 처리하고, 내부 서비스로 라우팅을 담당합니다.
• 예시에서는 로그인 체크 필터를 거쳐 /order, /product, /user 요청을 각각의 서비스로 전달합니다.

2. Order Service (주문 서비스)
• 사용자의 주문을 처리하는 핵심 도메인 서비스입니다.
• 주문 생성 시 상품 서비스와 사용자 서비스를 호출하여 필요한 데이터를 검증합니다.
• 예: 주문 시 상품 재고 확인, 유저 상태 확인 등.

3. Product Service (상품 서비스)
• 상품 정보를 관리하는 서비스입니다.
• 그림에서는 Product1, Product2 두 개의 인스턴스가 있으며, 로드 밸런싱을 통해 트래픽이 분산됩니다.
• Spring Cloud Netflix Ribbon이 라운드 로빈 방식으로 요청을 분배합니다.

4. User Service (유저 서비스)
• 사용자 정보를 관리합니다.
• 주문 시 유저의 상태(예: 로그인된 사용자, 회원 등급, 결제 가능 여부 등)를 확인합니다.

5. Eureka Server & Client
• 각 서비스는 Eureka Client로 동작하며, 서비스 등록/발견을 위해 Eureka Server에 등록됩니다.
• Eureka Server는 서비스 디스커버리 역할을 하며, 게이트웨이와 다른 서비스들이 동적으로 서로를 찾을 수 있도록 돕습니다.

6. Config Server
• 각 서비스의 설정 정보(ex. yml)를 중앙에서 관리합니다.
• Git 저장소 등 외부 저장소에 있는 설정 값을 서비스에 배포하여 일관성을 유지합니다.

7. Ribbon
• 클라이언트 사이드 로드 밸런서입니다.
• Order Service가 Product Service를 호출할 때 여러 인스턴스 중 하나를 선택합니다.
• 기본 알고리즘은 Round Robin이며, 필요하면 다른 전략으로 교체할 수도 있습니다.

8. Zipkin & Resilience4j
• Zipkin: 분산 트레이싱 시스템으로, 요청이 각 서비스에서 어떻게 흘러가는지 추적하고 장애 구간을 파악할 수 있습니다.
• Resilience4j (서킷 브레이커): 특정 서비스 호출에서 장애가 발생하면 빠르게 차단하여 연쇄 장애를 막습니다.
• ex) 주문 확인 → 상품 확인 단계에서 에러 발생 시, 서킷 브레이커가 이를 감지하고 fallback 로직을 수행합니다.


지금까지 살펴본 Eureka, Ribbon, Config Server, Gateway 등은 모두 Spring Cloud에서 제공하는 핵심 라이브러리들입니다.
그렇다면 Spring Cloud란 무엇인지, 간단히 짚고 넘어가겠습니다.

Spring Cloud란?

Spring Cloud는 마이크로서비스 개발을 위해 다양한 도구와 서비스를 제공하는 스프링 프레임워크의 확장
마이크로서비스 아키텍처를 쉽게 구현하고 운영할 수 있도록 도움을 줍니다.

주요 기능

  • 서비스 등록 및 디스커버리: Eureka, Consul, Zookeeper
  • 로드 밸런싱: Ribbon, Spring Cloud LoadBalancer
  • 서킷 브레이커: Hystrix, Resilience4j
  • API 게이트웨이: Zuul, Spring Cloud Gateway
  • 구성 관리: Spring Cloud Config
  • 분산 추적: Spring Cloud Sleuth, Zipkin
  • 메시징: Spring Cloud Stream

자세한 내용은 공식문서를 참고해주세요.



다음 시리즈에서는 각 라이브러리의 역할과 사용 방법을 하나씩 살펴보겠습니다.

0개의 댓글