스프링 Spring
29. Spring Cloud 기반 MSA(Microservices) 아키텍처 설계
안녕하세요! 태마입니다.
Spring 기초 강좌입니다.
강좌의 경우
1. 주제 간단 정리
2. 상세 주제 정리
으로 이루어져 있습니다.
스프링 Spring
포스팅 시작하겠습니다 :)
1. 주제 간단 정리
1. MSA(Microservices Architecture)란?
✔ MSA(Microservices Architecture)는 대규모 애플리케이션을 여러 개의 독립적인 서비스로 나누어 개발하고 운영하는 아키텍처
✔ 각 서비스는 독립적으로 배포되고, API를 통해 서로 통신하며 협력함
📌 MSA의 주요 특징
| 독립적 배포 가능 | 각 서비스가 독립적으로 배포 및 운영 가능 |
| 다양한 기술 스택 활용 가능 | 서비스마다 다른 언어 및 기술 스택 사용 가능 |
| 유지보수 및 확장 용이 | 특정 기능만 변경할 수 있어 유지보수 부담 감소 |
| 팀별 독립적인 개발 가능 | 서비스별로 별도 개발 및 배포 가능 |
| 탄력적인 확장성 | 특정 서비스만 개별적으로 확장 가능 |
📌 MSA를 활용하면 "대규모 애플리케이션을 유연하고 확장 가능하게 운영 가능"
2. Monolithic vs MSA 비교
✔ Monolithic(모놀리식) 아키텍처는 모든 기능이 하나의 애플리케이션에 포함됨
✔ MSA는 기능을 여러 개의 독립적인 서비스로 분리하여 관리
📌 Monolithic vs MSA 비교
| 배포 방식 | 한 번에 전체 배포 | 서비스별 개별 배포 |
| 기술 선택 | 통합된 기술 스택 사용 | 서비스별 독립적인 기술 스택 사용 가능 |
| 확장성 | 전체 확장 필요 | 특정 서비스만 개별 확장 가능 |
| 장애 전파 | 하나의 장애가 전체 시스템에 영향 | 특정 서비스에서만 장애 발생 |
📌 MSA를 활용하면 "대규모 시스템을 더 유연하고 확장성 있게 운영 가능"
✅ 여기까지 MSA의 개념과 Monolithic 아키텍처와의 차이를 배웠습니다!
👉 "그렇다면, Spring Cloud를 활용하여 MSA를 어떻게 설계할까?"
✅ 2부에서 Spring Cloud의 주요 컴포넌트와 MSA 구현 방법을 배워봅시다!
2. 상세 주제 정리
1. Spring Cloud의 주요 컴포넌트
✔ Spring Cloud는 MSA 환경에서 서비스 간 통신 및 운영을 쉽게 할 수 있도록 다양한 컴포넌트를 제공
📌 Spring Cloud의 주요 구성 요소
| Spring Cloud Gateway | API Gateway 역할 (라우팅 및 필터링) |
| Eureka | 서비스 디스커버리 (Service Registry) |
| Config Server | 중앙 집중형 설정 관리 |
| Circuit Breaker (Resilience4J) | 장애 발생 시 서비스 보호 |
| Zipkin/Sleuth | 분산 트레이싱 및 로깅 |
📌 Spring Cloud를 활용하면 "MSA 환경에서 서비스 간 통신 및 관리가 용이해짐"
2. Spring Cloud Eureka (서비스 디스커버리)
✔ Eureka는 서비스 디스커버리를 제공하는 레지스트리 서버
✔ 각 마이크로서비스는 Eureka 서버에 등록되고, 동적으로 서비스 위치를 찾을 수 있음
📌 1️⃣ Eureka Server 설정 (eureka-server)
server:
port: 8761
eureka:
client:
registerWithEureka: false
fetchRegistry: false
✔ Eureka Server는 8761 포트에서 실행되며, 클라이언트는 레지스트리에 서비스 정보를 등록 가능
📌 2️⃣ Eureka Client 설정 (application.yml)
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
✔ 각 서비스는 Eureka Server에 자신의 정보를 등록하여 다른 서비스와 연결 가능
📌 Eureka를 활용하면 "서비스 간 동적인 위치 탐색이 가능하고, 확장성이 뛰어남"
3. Spring Cloud Gateway (API Gateway)
✔ Spring Cloud Gateway는 클라이언트와 마이크로서비스 간 요청을 관리하는 API Gateway 역할
✔ 인증, 로드 밸런싱, 라우팅 등의 기능을 제공
📌 Spring Cloud Gateway 설정 (application.yml)
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/users/**
✔ lb://USER-SERVICE를 사용하여 Eureka에서 동적으로 서비스 위치를 탐색
📌 API Gateway를 활용하면 "서비스 간 요청을 효율적으로 관리 가능"
4. Spring Cloud Config Server (환경 설정 중앙 관리)
✔ 각 마이크로서비스가 별도로 설정 파일을 관리하면 유지보수 어려움
✔ Spring Cloud Config Server를 활용하면 중앙에서 설정을 관리 가능
📌 1️⃣ Config Server 설정 (application.yml)
server:
port: 8888
spring:
cloud:
config:
server:
git:
uri: https://github.com/my-config-repo
✔ Git 저장소에 환경 설정을 저장하고, Config Server에서 이를 제공
📌 Config Server를 활용하면 "모든 서비스의 설정을 중앙에서 관리 가능"
5. Circuit Breaker (Resilience4J) 적용
✔ 마이크로서비스 간의 장애 전파를 막기 위해 Circuit Breaker 패턴을 적용 가능
✔ Resilience4J를 사용하여 장애 발생 시 자동으로 요청 차단 및 복구 가능
📌 Resilience4J 설정 (application.yml)
resilience4j:
circuitbreaker:
instances:
myService:
failureRateThreshold: 50
waitDurationInOpenState: 5000
✔ 장애 발생률이 50%를 넘으면 자동으로 차단하고, 5초 후 다시 연결 시도
📌 Circuit Breaker를 활용하면 "서비스 장애가 전체 시스템에 영향을 주지 않도록 방지 가능"
✅ 여기까지 Spring Cloud 기반 MSA 아키텍처 설계 방법을 배웠습니다!
👉 "그렇다면, Spring Cloud Gateway vs API Gateway의 차이는 무엇일까?"
✅ 다음 회차에서 Spring Cloud Gateway vs API Gateway의 차이점과 선택 기준을 배워봅시다!
'IT Developer > Spring' 카테고리의 다른 글
| Spring 기초 <33. Spring Boot에서 A/B 테스트와 Feature Toggle 적용> (0) | 2025.04.18 |
|---|---|
| Spring 기초 <32. Spring Boot에서 OpenTelemetry를 활용한 애플리케이션 모니터링> (0) | 2025.04.17 |
| Spring 기초 <31. ElasticSearch + Spring Data를 활용한 검색 서비스 구축> (0) | 2025.04.16 |
| Spring 기초 <30. Spring Cloud Gateway vs API Gateway 차이> (0) | 2025.04.16 |
| Spring 기초 <28. Spring Boot와 Kubernetes를 활용한 클라우드 배포 전략> (0) | 2025.04.14 |
| Spring 기초 <27. Spring Boot에서 트랜잭션 관리 최적화 (@Transactional, REQUIRES_NEW)> (1) | 2025.04.13 |
| Spring 기초 <26. JPA + QueryDSL을 활용한 복잡한 쿼리 최적화> (0) | 2025.04.12 |
| Spring 기초 <25. Spring Boot에서 GraphQL API 개발 (Spring GraphQL)> (0) | 2025.04.11 |