개요
추후 MSA를 사용한 프로젝트를 진행하기 앞서 MSA가 무엇이고 어떻게 사용하는지에 대해 배워보려고 한다.
다만, MSA에 대한 이론부터 완벽하게 익히고 들어가기에는 너무 오래 걸리기 때문에 간단한 이론과 사용법을 배운 후 추후 필요한 부분에 대해 추가적인 학습을 진행하도록 할 것이다.
MSA(Microservices Architecture)?
마이크로서비스 아키텍처(MSA)는 애플리케이션을 여러 개의 독립적인 작은 서비스로 나누어 개발, 배포, 운영하는 소프트웨어 아키텍처 스타일로 각 서비스는 고유한 비즈니스 기능을 담당하며 서로 독립적으로 배포되고 관리될 수 있다.
특징
- 독립성
- 각 서비스는 독립적으로 개발, 배포 확장 가능
- 한 서비스의 변경이 다른 서비스에 영향을 최소화함
- 단일 책임 원칙
- 각 서비스는 특정 비즈니스 도메인이나 기능에 집중
- 분산 시스템
- 서비스 간 통신은 주로 HTTP/REST, gRPC, 메시지 큐 등을 통해 이루어짐
- 자율적 팀
- 팀별로 서비스를 담당하며, 서비스의 기술 스택을 자유롭게 선택 가능
- 데이터 독립성
- 각 서비스는 자체 데이터베이스를 가질 수 있음
MSA, 모놀리틱 아키텍처 장단점 비교
- 아래 글에서 한 번 정리 했기 때문에 이번에는 생략한다.
MSA가 적합한 경우
- 빠른 기능 추가/수정이 필요한 애플리케이션
- 다양한 도메인 팀이 협업해야 하는 대규모 시스템
- 트래픽이 불균형적으로 발생하는 서비스
기술 스택 예시
- API Gatewqy : Spring Cloud Gateway, Kong
- 서비스 간 통신 : REST, gRPC, Kafka
- 데이터베이스 : MongoDB, PostgreSQL (서비스별 DB 독립성)
- 배포/운영 : Docker, Kubernetes
MSA를 구현하기 위한 다양한 프레임워크와 도구가 있지만 Spring과 가장 친화적인 Spring Cloud에 대해 배우기로 했다.
Spring Cloud
Spring Cloud는 MSA 기반 애플리케이션을 쉽게 개발하고 운영할 수 있도록 도와주는 Spring 프레임워크 확장 프로젝트로 분산 시스템에서 발생하는 문제를 효율적으로 해결할 수 있는 다양한 도구와 라이브러리를 제공한다.
주요 기능
- 구성 관리(Configuration Management)
- Spring Cloud Config: 외부 설정 서버를 통해 애플리케이션 구성 파일을 중앙에서 관리
- 설정의 동적 변경이 가능
- 서비스 등록 및 발견(Service Discovery)
- Spring Cloud Netflix Eureka: 서비스 간 동적 탐색을 지원
- 클라이언트가 서비스 위치를 알 필요 없이 서비스 호출 가능
- 로드 밸런싱(Load Balancing)
- Spring Cloud LoadBalancer: 클라이언트 측 로드 밸런싱 제공
- API Gateway
- Spring Cloud Gateway: 마이크로서비스에 대한 단일 진입점으로, 인증, 라우팅, 필터링 등 제공
- 분산 트랜잭션 관리
- Spring Cloud Sleuth: 분산 환경에서 요청 추적(Tracing) 지원
- Zipkin이나 Jaeger와 연동 가능
- 메시징(Messaging)
- Spring Cloud Stream: Kafka, RabbitMQ 같은 메시지 브로커와 통합을 간소화
- 분산 구성/장애 복구
- Hystrix(대체: Resilience4j): 서비스 장애 시 대체 로직 실행(회로 차단기)
- Spring Cloud Circuit Breaker: 회로 차단 기능을 간편히 구현.
장점
- MSA 구현 간소화: 복잡한 분산 시스템을 쉽게 구축 가능.
- Spring과 통합: Spring Boot와 자연스럽게 연동되며 높은 생산성 제공.
- 확장성: 다양한 클라우드 플랫폼(AWS, GCP 등) 및 오픈소스 도구와 통합 가능.
- 표준화된 솔루션: 널리 사용되며 문서와 커뮤니티 지원이 풍부.
단점
- 학습 곡선: 많은 모듈과 설정 옵션으로 인해 초기에 학습이 필요.
- 운영 복잡성: 분산 시스템 관리 비용 증가.
- 의존성: Spring Cloud의 특정 버전에 종속될 수 있음.
정리
- 한 노트에 Spring Cloud 주요 모듈에 대한 간단한 사용법을 기록하면 너무 길어지고 깔끔하게 정리 되지 않을 것 같아 다른 노트에 추가적으로 기록하기로 한다.
- MSA와 이를 구현하기 위한 프레임워크에 대해 간단한 이론 부분만 배웠는데도 생소한 개념들이 꽤 있었고, 프로젝트에 적용하려면 충분한 학습 곡선이 필요할 것 같다.
학습 참조
스파르타코딩클럽 MSA(Microservice Architecture) 강의 1주차
ChatGPT
'자바 심화 > TIL' 카테고리의 다른 글
MSA - 기초 3 (0) | 2024.11.25 |
---|---|
MSA - 기초 2 (1) | 2024.11.22 |
클린 코드 -2 (1) | 2024.11.20 |
클린 코드 1 (2) | 2024.11.19 |
페이지네이션 Offset vs Cursor (2) | 2024.11.18 |