본문 바로가기
  • Masacorgi 's Dev Bloggg
TIL/기타

MSA란 무엇일까

by masacorgi 2024. 5. 24.

MSA 란 무엇인가

1. 모놀리틱 시스템

모놀리틱 시스템이란 소프트웨어 애프리케이션을 하나의 단일한 독립 시스템으로 구축하는 소프트웨어 아키텍처 스타일을 말한다.

하나의 애플리케이션에 모든 비즈니스 로직을 통째로 모아놓은 구조로, 소규모 프로젝트에 적합하고, 개발/빌드/배포/테스트가 용이하며 인프라 구조가 단순하여 운영 비용 부담이 적다는 장점이 있다.

하나의 단일 애플리케이션으로 동작하므로 작은 프로젝트일 때는 관리나 개발이 편하지만 기업의 시스템 규모가 커지고 복잡해지면 다음과 같은 단점이 부각되기 시작한다.

* 작은 수정사항에도 전체 빌드 및 배포가 이루어져야 한다. -> 시간이 오래걸린다.
* 많은 양의 코드가 몰려있어 유지보수가 어렵다.
* 일부 오류가 전체 시스템에 영향을 미친다.
* 스케일 아웃 설정이 복잡하다. ?

2. MSA

MSA 는 이러한 모놀리틱 시스템의 대안으로 등장했다.

소프트웨어 시스템을 여러 작은 독립적인 서비스로 분할하여 개발하고 배포하는 방식으로, 하나의 애플리케이션을 구분 가능한 여러 작은 서비스로 나눠 사용자의 요청을 처리하는 구조이다.

MSA는 각 서비스별 소스 코드 수정이 쉽고, 수정한 서비스만 배포 가능하며, 배포 시 전체 서비스 중단이 없다. 또한 장애 발생 시 해당 서비스에만 한정되고, 전체 장애로 확장될 가능성이 적다.
스케일 아웃이 필요한 경우에는 해당 서비스만 추가하여 리소스의 효율적 사용이 가능하다.

모놀리틱 시스템은 간단한 구조이기에 초기 생산성이 높지만 시스템이 복잡도가 늘어날수록 생산성이 급격하게 떨어지기 시작한다.

MSA 방식은 모놀리틱보다 복잡하게 설계되기에 초반 생산성이 모놀리틱보다 떨어지지만, 시스템 복잡도가 늘어나도 생산성이 소폭 감소될 뿐 거의 유지된다고 볼 수 있다.

이는 클라우드 서비스 기반의 복잡한 시스템 구축 시 MSA 의 필요성이 커지는 이유이기도 하다.

모놀리틱 시스템 대비 MSA 방식의 자세한 장점은 다음과 같다.

  1. 개발 유연성의 한계 극복 : 기존 모놀리틱 방식은 모든 구성요소가 하나의 애플리케이션으로 구성되어 있어 변화에 대한 대응이 어렵다.
    새로운 기능 추가를 위해 전체를 빌드/배포해야 하고 이는 시간이 오래 걸린다. MSA는 독립적 서비스 단위 구성으로 수정 및 빌드/배포가 신속히 가능하다.
  2. 요구사항 처리 시 모놀리틱 시스템 대비 빠른 대처 가능
  3. 배포/롤백의 리스크 획기적 감소 : 여러개의 서비스로 구성된 MSA는 이 중 수정이 필요한 부분만 빠르게 찾아 정확한 대응이 가능하다. 또한 쿠버네티스 기능을 사용하여 서비스 무중단 배포를 할 수 있다.
  4. 장애 격리 : MSA는 각각의 서비스를 약한 결합도를 지니게 설계하기에 특정 서비스 장애가 타 서비스에 영향을 최소로 주거나 아예 주지 않도록 구성된다. 이를 통해 장애 피해를 최소화하고 해당 서비스만 빠르게 복구할 수 있다.
  5. 리소스의 효율적 사용 : 모놀리틱은 단일 구조이기 때문에 필요시 통으로 확장해야해 리소스의 낭비가 발생한다.
    반면에 MSA 시스템은 사용자 부하 발생 시 발생하는 서비스만 스케일아웃 기능을 통한 확장이 가능하여 리소스를 효율적으로 사용할 수 있다.

3. MSA 아키텍처 구성요소

MSA를 구성하는 주요요소는 다음과 같이 구성한다.

  1. 마이크로서비스 : 독립적 서비스로 특정 비즈니스 기능을 담당하며, 독립적으로 배포 및 확장
    자체 데이터베이스를 가질 수 있어 데이터 격리를 보장 가능하다. (데이터 일관성 유지가 어려워질 수 있다.)
  2. API 게이트웨이 : 통합 접점을 만들어 클라이언트 요청을 적절한 마이크로서비스로 라우팅한다.
    이곳에서 인증 및 권한 부여 기능과 로드밸런싱 기능을 추가할 수 있다.
  3. 서비스 디스커버리 ?? 좀더 알아보기,, Eureka, Consul 사용가능 동적 서비스 등록 및 조회, 마이크로서비스가 실행될 때 등록하고, 다른 서비스들이 이를 찾을 수 있도록 한다.
  4. 메시징 시스템 : 비동기 통신으로 마이크로서비스 간의 이벤트 기반 메시징을 통해 느슨한 결합을 유지한다.
  5. 서비스 메쉬 Istio, Linkerd 사용 : 서비스 간의 네트워크 통신을 관리 및 제어한다.
    보안 및 모니터링으로 트래픽을 암호화하고 서비스간 인증, 트래픽을 모니터링한다.
  6. 데이터 관리 : 각 서비스가 자신의 데이터베이스를 관리한다. 서비스간 데이터 일관성을 유지하기 위해 데이터 동기화가 필요하다.
  7. 컨테이너 오케스트레이션 : 배포 및 스케일링으로 컨테이너화 된 마이크로서비스를 배포하고 관리한다.
    Kubernetes, Docker Swarm
  8. 로깅 및 모니터링 : 로그 수집 및 분석 -> 시스템 전반의 로그를 수집하고 분석
    모니터링 -> 성능지표와 시스템 상태를 실시간으로 모니터링
    예시도구 : ELK 스택(Elasticsearch, Logstash, Kibana), Prometheus, Grafana
  9. CI/CD 파이프라인 : 코드 변경을 자동으로 빌드/테스트/배포하는 지속적 통합 및 배포 기능 구성(CI/CD)
    Jenkins, GitLab CI, CircleCI
  10. 보안: 인증 및 인가, 암호화를 통해 시스템 보안 기능 구성
    OAuth, OpenID Connect, TLS

'TIL > 기타' 카테고리의 다른 글

임베디드펌웨어 커뮤니티 방문 후기..  (1) 2024.12.10