MSA 란?

MSA : Microservices Architecture

  • MSA는 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여
    개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처 스타일
    • 하나의 애플리케이션(모놀리틱) -> 여러 개의 독립적인 서비스(MSA)
    • 소프트웨어 아키텍처 스타일이기에 강제성이 없다.
      • 강제성의 의미
        • 모든 것을 서비스 또는 도메인 단위로 분리할 필요가 없다. -> 복잡성이 증가할 수 있음.
        • 적당히 분리하자.
  • 각 서비스는 특정 비즈니스 기능을 수행하며 독립적으로 배포 및 확장될 수 있다.
  • 서비스 간의 통신은 주로 HTTP/HTTPS, 메시지 큐 등을 통해 이루어진다.
    • Feign Client -> HTTP/HTTPS
    • Kafka, RabbitMQ -> 메시지 큐

특징

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

모놀리틱 아키텍처 vs MSA 아키텍처

모놀리틱 아키텍처

정의

  • 하나의 큰 코드베이스로 구성된 애플리케이션
  • 모든 기능이 하나의 애플리케이션 내에 포함

장점

  • 간단한 배포
    • 모든 코드가 하나의 코드베이스에 포함되어 있어 배포가 단순
  • 단일 데이터베이스
    • 하나의 데이터베이스를 사용해 데이터 일관성을 쉽게 유지
  • 초기 개발엔 빠르게 프로토타입을 랜딩하것과 같이 빠르게 개발을 할때는 모놀리틱을 채택

단점

  • 확장성 부족
    • 특정 기능을 확장하려면 전체 애플리케이션을 확장해야 함.
  • 긴 개발 주기
    • 작은 변경 사항도 전체 애플리케이션을 다시 배포해야 함.
    • 애플리케이션이 커질 수록 배포시간도 길어짐
  • 유연성 부족
    • 새로운 기술 도입이 어렵고 특정 모듈에 종속적임

MSA 아키텍처

정의

  • MSA는 여러 개의 독립적인 서비스로 구성된 애플리케이션
  • 각 서비스는 특정 비즈니스 기능을 수행

장점

  • 확장성
    • 각 서비스는 독립적으로 확장 가능
    • 특정 기능에 대한 성능 최적화에 용이
  • 독립적 배포
    • 개별 서비스의 변경 사항을 독립적으로 배포할 수 있음.
    • 서비스별로 독립적 배포가 가능해 배포 주기를 단축
  • 유연성
    • 서비스별로 적합한 기술 스택을 선택할 수 있음.
  • 작은 팀 구성
    • 서비스의 크기가 커질 수록 개발 팀의 수가 많은 수록 팀을 작은 단위로 나누어 기능 단위별로 유지보수하기 좋다.
    • 서비스별로 작은 팀으로 구성되어 민첩한 개발 가능

단점

  • 복잡성 증가, 데이터 관리
    • 서비스 간 통신, 데이터 일관성 유지, 트랜잭션 관리 등의 복잡성이 증가
      • 하나의 기능이 수행될 때, 여러 서비스를 통해 수행될 경우 특정 서비스에서 실패한다면 다른 서비스에서도 작업을 취소해야함.
      • ex) 주문 서비스에서 '상품 주문'을 할때, 누가 주문하는지 회원 서비스에서 확인하고 무엇을 주문하는지 상품 서비스에서 확인해야 한다.
        그러나 '사용자가 없다면' 또는 '상품이 없다면'과 같이 실패 케이스에 대응 해야 함
    • 여러 데이터베이스를 사용할수록 분산처리를 통해 데이터 일관성 유지하는 복잡성이 증가한다.
  • 운영비용 증가
    • 각 서비스의 모니터링, 로깅 등을 개별적으로 관리해야 함
      • 분산처리된 요청들이 잘 시스템에 반영되는지 검토해야 함.
      • 각 서비스 단위로 모니터링, 로깅을 점검해야 함 -> 모니터, 로깅할 서비스가 많음
  • 네트워크 지연
    • 서비스 간의 통신이 주로 네트워크를 통해 이루어지므로 지연 시간이 발생할 수 있다.
    • 주로 HTTP/HTTPS, 메시지 큐로 이루어짐.
반응형

반응형

서비스 아키텍쳐

ERD 명세서

테이블 명세서

API 명세서

USER

SLACK

ORDER

DELIVERY

DELIVERY MAN

HUB

COMPANY

PRODUCT

 


 

 

GitHub - RUSH-1472/rush-logistic-system-2024: AI 기반 배송 소요시간 예측 물류 시스템 (MSA)

AI 기반 배송 소요시간 예측 물류 시스템 (MSA). Contribute to RUSH-1472/rush-logistic-system-2024 development by creating an account on GitHub.

github.com

 

반응형

+ Recent posts