MSA 개념

2024. 11. 20. 20:21·기초 지식/MSA

MSA 란?

하나의 애플리케이션을 다수의 독립적인 서비스로 구성한 아키텍처입니다.

마틴파울러의 블로그에 따르면 MSA 는 다음의 특징을 갖습니다.

  • 서비스들은 각자 별도의 프로세스에서 실행된다.
  • HTTP API 와 같은 가벼운 매커니즘으로 통신하는 작은 애플리케이션이다.
  • 작은 서비스들은 각자의 비즈니스 기능을 담당하고 완전 자동화 된 절차에 따라 독립적으로 배포된다.
  • 각 서비스는 서로 다른 프로그맹 언어, 프레임워크, 데이터 저장 기술을 사용할 수 있다.

대표적인 사례로는 Netflix 가 있으며, 국내에는 쿠팡, 배달의 민족 등이 있습니다. MSA 의 어떤 점이 매력적이길래 이들은 MSA 를 도입한 걸까요?

MSA 의 장점

  • 빠른 Delivery
    • 각 서비스는 독립적이므로 코드 수정 영향 범위가 작습니다.
    • 결과적으로, 고객에게 가치를 빠르게 전달할 수 있어 시장 경쟁력을 강화합니다.
  • Polyglot Architecture
    • 각 서비스가 독립적으로 운영되므로 각 팀이 최적의 기술 스택을 선택할 수 있습니다.
    • 도메인 전문성이 증가하고, 팀의 자율성이 높아집니다.
  • 실험과 혁신 가능
    • 코드베이스가 작아 수정으로 인한 영향 예측이 용이합니다.
    • 혁신적인 기술을 더 쉽게 도입할 수 있어서 IT 의존적인 비즈니스들은 시장역량을 강화할 수 있습니다.
  • 탄력적이고 선택적인 확장
    • 특정 서비스만 Scale-out 할 수 있어 운영 효율성이 높아집니다.
  • 대체가능성
    • 서비스 단위로 기술을 변경하거나 외부 솔루션으로 교체가 용이합니다.
    • 이를 통해 NIH(Not Invented Here) 증후군의 위험을 줄일 수 있습니다.

 

하지만 항상 기술 선택에 따른 트레이드오프가 있기 마렵입니다. MSA 는 다음과 같은 단점이 있어서 신중한 고려가 필요합니다.

MSA 의 단점

  • 비교적 비효율적인 컴퓨타 자원 사용
    • 각 서비스가 독립적으로 실행되기 때문에 컴퓨팅 자원(중복 런타임 리소스, 네트워크)을 더 많이 사용합니다.
    • 예: JVM 런타임 중복 실행, 마샬링/언마샬링 오버헤드 등.
  • 운영 난이도 상승
    • 모니터링 대상이 증가할 뿐만아니라 모니터링 해야하는 기술도 다양해집니다.
    • 각 서비스가 상호 의존적이기 때문에 단위 테스트 난이도가 증가합니다.
  • DB 트랜잭션의 모호함
    • 서비스간 서로 다른 DB 를 사용하기 때문에 애초에 DB 수준에서 트랜잭션 관리가 안됩니다.
    • 데이터 일관성이 중요한 서비스에서는 MSA 도입을 신중히 도입해야합니다.

 

MSA는 많은 장점이 있지만, 그만큼 기술적인 어려움도 존재합니다. 이러한 어려움을 해결하기 위해 컨테이너 기술과 오케스트레이션 도구(Kubernetes) 같은 기술들이 필요합니다.

'기초 지식 > MSA' 카테고리의 다른 글

MSA 주요 패턴: 중앙화된 로그 집계 패턴  (0) 2024.11.27
MSA 전환을 위한 서비스 분리 전략  (1) 2024.11.26
MSA 주요 패턴: 사가(Saga) 패턴  (1) 2024.11.20
MSA 주요 패턴: 서비스 디스커버리(Service Discovery) 패턴  (0) 2024.11.20
'기초 지식/MSA' 카테고리의 다른 글
  • MSA 주요 패턴: 중앙화된 로그 집계 패턴
  • MSA 전환을 위한 서비스 분리 전략
  • MSA 주요 패턴: 사가(Saga) 패턴
  • MSA 주요 패턴: 서비스 디스커버리(Service Discovery) 패턴
개발프로브
개발프로브
가볍게, 오랫동안 기록하고 싶은 블로그입니다.
  • 개발프로브
    ProbeHub
    개발프로브
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • 탐구 생활 (47)
        • 개발 탐구 (8)
        • FastAPI CORS (3)
        • FastAPI Log (4)
        • gRPC&Python (4)
        • SpringBoot 파헤치기 (2)
        • Python Monorepo (3)
        • Python 과 zstd (2)
        • Python (4)
        • FastAPI (4)
        • Terraform (8)
        • MSA (0)
        • GraphQL (2)
        • 데이터베이스 (2)
        • 네트워크 (0)
      • 기초 지식 (9)
        • Terraform (2)
        • MSA (5)
        • K8s (2)
  • 블로그 메뉴

    • 링크

      • github
      • stackoverflow
    • 공지사항

    • 인기 글

    • 태그

      spring 트랜잭션
      sqlalchemy
      zstd
      springboot
      grpc
      fastapi logging
      Terraform
      django 성능 개선
      python amd64
      rest vs grpc
      오블완
      gzip
      RDBMS 성능 최적화
      python arn64
      brotli
      java
      티스토리챌린지
      ORM 성능 최적화
      FastAPI
      ORM 문제
      MSA
      PostgreSQL
      granian
      python 불변 객체
      python graviton
      ORM 성능
      python 성능 개선
      fastapi cors
      백엔드 성능
      Python
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    개발프로브
    MSA 개념
    상단으로

    티스토리툴바