[241120 TIL]

MSA 학습

  • 코드카타
  • MAS 강의

모놀리식 아키텍처(Monolithic Architecture: MA)

 

  • 하나의 큰 코드베이스로 구성된 애플리케이션
  • 모든 기능이 하나의 애플리케이션 내에 포함
  • 장점
    • 간단한 배포: 모든 코드가 하나의 코드베이스에 포함되어 있어 배포가 단순
    • 단일 데이터베이스: 하나의 데이터베이스를 사용하여 데이터 일관성을 쉽게 유지
  • 단점
    • 확장성 부족: 특정 기능을 확장하려면 전체 애플리케이션을 확장해야 함
    • 긴 개발 주기: 작은 변경 사항에도 전체 애플리케이션을 다시 배포해야 함
    • 유연성 부족: 새로운 기술 도입이 어렵고, 특정 모듈에 종속적
    • ex) 회원에서 기능 변경 및 확장이 생기면, 상품/주문 서비스에서는 해당 사항이 없어도 전체 애플리케이션을 확장/배포해야 함

MSA(Microservice Architecture)

  • 여러 개의 독립적인 서비스로 구성된 애플리케이션
  • 각 서비스는 특정 비즈니스 기능을 수행
  • 장점
    • 확장성: 특정 서비스만 확장 가능, 특정 기능에 대한 성능 최적화가 용이
    • 독립적 배포: 개별 서비스의 변경 사항을 독립적으로 배포할 수 있음 -> 배포 주기 단축
    • 유연성: 다양한 기술 스택을 사용하여 서비스별 최적화 가능
    • 작은 구성: 서비스별 작은 팀으로 구성되어 민첩한 개발 가능
  • 단점
    • 복잡성 증가: 서비스 간 통신, 데이터 일관성 유지, 트랜잭션 관리 등의 복잡성 증가
    • 운영비용 증가: 각 서비스의 모니터링, 로깅, 장애 대등 등을 개별적으로 관리해야 함
    • 데이터 관리: 분산된 데이터베이스로 인해 데이터 일관성 유지가 어려울 수 있음
    • 네트워크 지연: 서비스 간의 통신이 네트워크를 통해 이루어지므로 지연 시간이 발생할 수 있음

Spring Cloud

  • 마이크로서비스 개발을 위해 다양한 도구와 서비스를 제공하는 스프링 프레임워크의 확장
  • 마이크로서비스 아키텍처를 쉽게 구현하고 운영할 수 있도록 도움

 

주요 모듈

  • 서비스 등록 및 디스커버리
    • Eureka: 넷플릭스가 개발한 서비스 디스커버리 서버로, 마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리
  • 로드 밸런싱
    • Ribbon: 넷플릭스가 개발한 클라이언트 사이드 로드 밸런서로, 서비스 인스턴스 간의 부하를 분산
  • 서킷 브레이커
    • Hystrix: 넷플릭스가 개발한 서킷 브레이커 라이브러리로, 서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성 유지
    • Resilience4j: 자바 기반의 경량 서킷 브레이커 라이브러리로, 넷플릭스 Hystrix 의 대안으로 개발

 

구성 요소의 활용

  • API 게이트웨이
    • Zuul: 넷플릭스가 개발한 API 게이트웨이로, 모든 서비스 요청을 중앙에서 관리
    • Cloud Gateway: 스프링 클라우드에서 제공하는 API 게이트웨이로, 마이크로서비스 아키텍처에서 필수적인 역할
  • 구성 관리
    • Spring Cloud Config: 분산된 환경에서 중앙 집중식 설정 관리를 제공


 


+ Recent posts