본문 바로가기

자바 심화/TIL

MSA - 기초 1

개요

추후 MSA를 사용한 프로젝트를 진행하기 앞서 MSA가 무엇이고 어떻게 사용하는지에 대해 배워보려고 한다.

다만, MSA에 대한 이론부터 완벽하게 익히고 들어가기에는 너무 오래 걸리기 때문에 간단한 이론과 사용법을 배운 후 추후 필요한 부분에 대해 추가적인 학습을 진행하도록 할 것이다.

MSA(Microservices Architecture)?

마이크로서비스 아키텍처(MSA)는 애플리케이션을 여러 개의 독립적인 작은 서비스로 나누어 개발, 배포, 운영하는 소프트웨어 아키텍처 스타일로 각 서비스는 고유한 비즈니스 기능을 담당하며 서로 독립적으로 배포되고 관리될 수 있다.

 

특징

  • 독립성
    • 각 서비스는 독립적으로 개발, 배포 확장 가능
    • 한 서비스의 변경이 다른 서비스에 영향을 최소화함
  • 단일 책임 원칙
    • 각 서비스는 특정 비즈니스 도메인이나 기능에 집중
  • 분산 시스템
    • 서비스 간 통신은 주로 HTTP/REST, gRPC, 메시지 큐 등을 통해 이루어짐
  • 자율적 팀
    • 팀별로 서비스를 담당하며, 서비스의 기술 스택을 자유롭게 선택 가능
  • 데이터 독립성
    • 각 서비스는 자체 데이터베이스를 가질 수 있음

 

MSA, 모놀리틱 아키텍처 장단점 비교

  • 아래 글에서 한 번 정리 했기 때문에 이번에는 생략한다.
 

아키텍처(Architecture)

개요프로젝트를 구성함에 있어 아키텍처는 필수 요소이며 개발에는 다양한 아키텍처가 활용된다.이번 팀 프로젝트를 진행함에 있어 기존에 사용하던 모놀리식 아키텍처가 아닌 유사 헥사고날

eleunadeu.tistory.com

 

MSA가 적합한 경우

  • 빠른 기능 추가/수정이 필요한 애플리케이션
  • 다양한 도메인 팀이 협업해야 하는 대규모 시스템
  • 트래픽이 불균형적으로 발생하는 서비스

 

기술 스택 예시

  1. API Gatewqy : Spring Cloud Gateway, Kong
  2. 서비스 간 통신 : REST, gRPC, Kafka
  3. 데이터베이스 : MongoDB, PostgreSQL (서비스별 DB 독립성)
  4. 배포/운영 : Docker, Kubernetes

 

MSA를 구현하기 위한 다양한 프레임워크와 도구가 있지만 Spring과 가장 친화적인 Spring Cloud에 대해 배우기로 했다.

Spring Cloud

Spring Cloud는 MSA 기반 애플리케이션을 쉽게 개발하고 운영할 수 있도록 도와주는 Spring 프레임워크 확장 프로젝트로 분산 시스템에서 발생하는 문제를 효율적으로 해결할 수 있는 다양한 도구와 라이브러리를 제공한다.

주요 기능

  1. 구성 관리(Configuration Management)
    • Spring Cloud Config: 외부 설정 서버를 통해 애플리케이션 구성 파일을 중앙에서 관리
    • 설정의 동적 변경이 가능
  2. 서비스 등록 및 발견(Service Discovery)
    • Spring Cloud Netflix Eureka: 서비스 간 동적 탐색을 지원
    • 클라이언트가 서비스 위치를 알 필요 없이 서비스 호출  가능
  3. 로드 밸런싱(Load Balancing)
    • Spring Cloud LoadBalancer: 클라이언트 측 로드 밸런싱 제공
  4. API Gateway
    • Spring Cloud Gateway: 마이크로서비스에 대한 단일 진입점으로, 인증, 라우팅, 필터링 등 제공
  5. 분산 트랜잭션 관리
    • Spring Cloud Sleuth: 분산 환경에서 요청 추적(Tracing) 지원
    • Zipkin이나 Jaeger와 연동 가능
  6. 메시징(Messaging)
    • Spring Cloud Stream: Kafka, RabbitMQ 같은 메시지 브로커와 통합을 간소화
  7. 분산 구성/장애 복구
    • 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