그동안 들었던 MSA강의 내용을 전체 구조가 어떻게 이어지는지 정리했다.
1. MSA란?
MSA는 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하는 아키텍처 스타일이다.
각 서비스는 특정 비즈니스 기능을 담당하며, 독립적으로 배포 및 확장이 가능하다.
2. 모놀리틱과의 차이
모놀리틱 아키텍처는 하나의 코드베이스에 모든 기능이 포함된 구조이다.
장점은 배포가 단순하고, DB를 하나만 사용하기 때문에 데이터 일관성 유지가 쉽다는 점이다.
하지만 기능 하나를 수정해도 전체를 배포해야 하고, 확장성과 유연성이 부족하다는 단점이 있다.
대규모 트래픽 환경에서는 장애가 전체 서비스로 확산될 위험도 있다.
반면에 MSA는 특정 서비스에만 배포 및 확장이 가능하고, 장애의 확산을 줄일 수 있다는 점에서 차이가 있다.
하지만 서비스 수가 늘어날수록 통신과 운영 복잡도가 증가하게 된다.
3. Spring Cloud 란?
Spring Cloud는 스프링 부트(Spring Boot) 기반의 분산 시스템과 마이크로서비스 아키텍처(MSA)를 쉽게 구축할 수 있도록 지원하는 오픈소스 프레임워크 모음이다.
서비스 등록, 로드밸런싱, 서킷브레이커, API 게이트웨이, 설정 관리 등 MSA를 구성하는데 필요한 기능들을 제공한다.
실무에서는 Eureka, Ribbon, Resilience4j, Spring Cloud Gateway 등이 주로 사용된다.
4. 서비스 디스커버리 (Eureka)
MSA 환경에서는 서비스들이 각각 독립적으로 실행되기 때문에, 서비스의 위치를 서로 알기 어렵다.
이를 해결하기 위해 서비스 디스커버리 도구를 사용하며, 그중 하나가 Eureka이다.
Eureka는 각 서비스가 자신의 정보를 등록하고, 다른 서비스가 조회할 수 있도록 해주는 서비스 디스커버리 서버이다.
각 서비스는 Eureka 서버에 자신의 위치를 등록하고, 필요한 서비스의 위치를 조회해서 통신한다.
Eureka 서버는 헬스체크(서비스가 정상 작동하는지 주기적으로 확인)를 통해 인스턴스의 상태를 관리하며, 정상적으로 동작하지 않는 인스턴스는 제외한다.
5. 로드밸런싱
Eureka로 서비스 위치를 조회한 후, 실제로 어떤 인스턴스로 요청을 보낼 지 결정하는 과정이 필요하다.
이때 로드밸런싱과 FeignClient를 사용한다.
로드밸런싱은 트래픽을 여러 인스턴스로 분산하여 서버 부하를 줄이는 기술이다.
Ribbon은 클라이언트 사이드 로드밸런서로, 라운드 로빈 방식으로 요청을 분산한다.
Feign Client는 Annotation 기반의 선언적 HTTP 클라이언트로, 다른 서비스의 API를 인터페이스 형태로 정의하여 호출할 수 있다.
Eureka와 연동되어 서비스 이름만으로 호출할 수 있으며, 내부적으로 로드밸런싱이 적용된다
6. 서킷브레이커
서킷브레이커는 서비스 간의 호출 실패를 감지하고, 다른 서비스로 장애가 옮겨지는것을 방지하는 패턴이다.
Resilience4j는 서킷브레이커를 구현한 라이브러리중 하나이다.
호출 실패가 반복되면 요청을 잠시 차단하고, 일정 시간이 지나면 일부 요청만 다시 보내 정상 여부를 확인한다.
이를 통해 장애상황에서도 서비스가 완전히 멈추지 않도록 한다.
7. API 게이트웨이
API 게이트웨이는 클라이언트의 요청을 받아 각 서비스로 전달하는 단일 진입점 역할을 한다.
클라이언트는 여러 서비스에 직접 요청하지 않고, API Gatewat를 통해서만 요청을 보낸다.
API Gateway에서는 라우팅, 인증 및 권한 처리, 로깅, 필터링 등의 작업을 수행한다.
Spring Cloud Gateway는 API Gateway를 구현한 도구 중 하나로, Eureka와 연동하여 동적으로 서비스 인스턴스를 조회하고 요청을 전달한다.
'TIL' 카테고리의 다른 글
| TIL - 배달 서비스 설계와 도메인 주도 설계의 적용 (0) | 2026.02.25 |
|---|---|
| TIL - 모놀리식 기반 MSA 지향적 도메인 및 DB 설계 (0) | 2026.02.24 |
| TIL - Git 기반 협업 흐름 정리 (0) | 2026.02.20 |
| TIL – Spring AI 특강 (0) | 2026.02.19 |
| TIL – Gradle 멀티모듈 구성 & MSA 기초 이해 (0) | 2026.02.13 |