본문 바로가기
IT 기본지식

Micro Service Architecture(MSA)의 장단점

by 내기록 2022. 2. 15.
반응형

들어가기 전에

모놀리식 아키텍처(Monolithic Architecture)란?

마이크로서비스 아키텍처의 반대되는 개념으로 전통의 아키텍처를 지칭한다.

하나의 서비스 또는 어플리케이션이 하나의 거대한 아키텍처를 가질때 모놀리식하다고 한다.

특징

  • 내부 의존성이 강하다
  • 구조적인 결합이 강력하게 유지된다.
  • 비즈니스 컴포넌트들이 강한 결합 구조를 지니고 통일성이 있다.

장점

  • 개발 초기 단순한 아키텍처 구조와 개발에 용이하다.
  • 구조가 복잡하지 않다.
  • 쉽게 고가용성 서버 환경을 만들 수 있다.(하나의 프로젝트에 모든 기능들이 들어있기 때문에)
  • End-to-End 테스트가 용이하다

단점

  • 프로젝트의 규모가 커짐에 따라 어플리케이션 구동시간이 늘어나고 빌드, 배포 시간이 길어진다.
  • 작은 수정사항에도 전체를 다시 빌드하고 배포해야 한다.
  • 많은 양의 코드가 몰려있어 유지보수가 힘들다.
  • 일부분의 오류가 전체에 영향을 미친다.
  • 기능별로 알맞는 기술, 언어, 프레임워크를 선택하기가 까다롭다.
    기능별로 적절한 기술 스택을 선정하는 것이 불가능하다.

 

MSA(Micro Service Architecture)란?

어플리케이션을 핵심 기능으로 세분화 한다.
각 기능을 서비스라 하며 독립적으로 구축하고 배포 할 수 있다.

추가되는 기능에 따라 적절한 기술 스택 선정이 가능하며, 기능별로 쪼개져 있기 때문에 빌드, 배포에 걸리는 시간이 짧다.

 

분산 환경이기 때문에 장애 포인트가 늘어나고 모니터링에 어려움을 겪을 수 있다.

 

https://junhyunny.github.io/information/msa/microservice-architecture/

특징

  • Single Purpose (한 개의 목적만 수행)
    서비스 하나에 책임도 하나다. 
    어플리케이션 로직을 각자 책임이 명확한 작은 컴포넌트로 분해하고 이를 조합하여 솔루션을 제공한다.
    비즈니스 영역의 한 부분에 대해서만 책임 담당한다.
  • Loose Coupling (느슨한 결합)
    마이크로 서비스는 자신의 데이터 저장소가 있는 경우 데이터 저장소에 대한 오너십을 가지기 때문에 다른 서비스는 자신이 소유하지 않은 데이터에 접근할 때 데이터를 소유한 서비스가 제공한 인터페이스를 통해서만 접근이 가능하다.
    DB도 쪼개져있다.
  • High Cohesion (높은 응집도)
    단일 비즈니스를 수행하기 때문에 서비스의 기능들은 높은 응집도를 가진다.
    각 서비스는 관현 행위와 데이터를 캡슐화하여 관리한다.
    변경이 발생하는 경우 모든 변경사항이 하나의 단일 서비스에서만 수정되도록 해야 한다.
  • 상호 독립적으로 배포되어야 한다. 
  • 여러 어플리케이션에서 재사용할 수 있어야 한다.
  • 두 서비스 사이의 데이터 교환을 위해 HTTP나 JSON과 같은 경량 통신 프로토콜을 사용한다.
  • 마이크로서비스 기반의 어플리케이션은 다양한 언어와 기술로 구축 할 수 있다.

 

핵심 원칙

 

 

마이크로서비스 채택 전 고려해야 하는 내용

  • 마이크로서비스 아키텍처를 사용하여 달성하고자 하는 목표는 무엇인가?
    명확한 목표가 있어야 한다. 
    예) 기존 대비 1.5배 빠른 성능, 중단되지 않는 높은 가용성을 가진 서비스 등 결과를 기준으로 설명할 수 있어야 하며
    시스템 사용자에게 이점을 제공하는 방식으로 설명 될 수 있어야 한다.
  • 다른 대안을 고려했는가?
    마이크로서비스와 동일한 이점을 얻을 수 있는 다른 방법들이 있다.
    때로는 MSA를 고려하지 않고도 적용 가능한 방법이 다양하게 존재하므로 고려를 선행한 후 진행하는 것이 좋다.

 

마이크로서비스 장단점

장점

  • 출시 시간 단축
    개별 마이크로 서비스에 변경 사항을 적용하고 배포 할 수 있어서 더 빠르게 제품을 출시 할 수 있다.
  • 유연한 확장
    프로세스를 독립적으로 확장 할 수 있다.
    부족한 성능을 나타내는 서비스만 별도로 확장이 가능한데 그 반대로 축소 또는 해제도 가능하다.
    SaaS 제품을 구축하는 많은 회사들이 마이크로서비스 아키텍처를 통해 운영 비용을 더 잘 제어하고 있다.
  • 마이크로 서비스를 사용하면 기능이 분해되기 때문에 한 기능에 전체 시스템에 영향을 끼치지 않는다.
  • 개발자 생산성
    기존 모놀리식 시스템에서는 개발자 수를 늘리는 것만으로 생산성을 확장하는 것에는 한계가 있다.
    MSA 적용하면 독립적으로 개발 할 수 있는 환경을 제공하여 개발자간 경합을 줄여 개발자 수를 늘리는 것이 개발 생산성과 직결될 수 있다.
  • 신기술 수용
    기존 모놀리식 시스템은 일반적으로 기술 선택을 제한한다. 하나의 배포 플렛폼, 운영체제, 데이터베이스 유형에 고정되어 있기 때문인데 MSA를 도입하면 각 서비스에 대해 기술 선택을 다양하게 할 수 있다.
    서비스 별 영역을 격리하여 새로운 기술의 이점을 적용 할 수 있고 기술에 문제가 있다고 하더라도 타 서비스로의 영향을 최소화 할 수 있다.

단점

  • 도메인이 불분명 할 때 발생 가능한 문제들
    서비스 경계를 잘못 설정하면 비용이 많이 들 수 있다.
    더 많은 서비스 간 변경, 과도하게 결합된 구성 요소로 이어 질 수 있으며 모놀리식 시스템보다 더 나빠질 수 있다.
    MSA를 적용하기 위해 서비스 전반에 걸쳐 많은 변경이 이뤄져서 높은 변경 비용이 발생할 수 있다.
    도메인을 완전히 이해하지 못했다면 MSA적용 전에 도메인을 먼저 이해하는 것이 중요하다.
  • 유지보수의 어려움
    패키지되어 고객에게 딜리버리되는 소프트웨어를 고객이 직접 운영하는 경우라면 MSA는 좋지 않을 수 있다.
    이는 운영 도메인에 많은 복잡성이 추가되기 때문인데 모놀리식 배포를 모니터링하고 문제를 해결하는데 사용했던 이전 기술들은 새로운 분산 시스템에서 제대로 작동하지 않을 수 있다.
    MSA로 마이그레이션 하기 위해서는 새로운 기술을 채택하여 문제를 해결해야 하는데 고객이 MSA를 관리하는데 사용 할 수 있는 기술이나 플랫폼을 운영할 것이라 기대하는 것은 어렵다.

마무리 하며 .. 장단점 다시보기

MSA가 핫한 이유들

  1. 작은 서비스들로 나누고 각 서비스를 독립적으로 만드는데서 오는 장점들 (loosely-coupled)
  2. 대용량 분산 환경에 적합
  3. 복잡도 감소
  4. 유연한 배포
  5. 재사용성, 확장성이 좋음
  6. 서비스별 기술 도입 및 확장이 자유로움
  7. 작은 서비스는 개발자가 이해하기 쉬워 개발/운영 단계의 생산성이 높음
  8. 지속적인 개발/deploy가 관련된 소수의 인원의 책임하에 이뤄질 수 있음
  9. fault isolation이 좋음

쉽게 사용하기 어려운 이유들

  1. 장애 추적, 모니터링, 메시징 처리가 어렵다.
    해결을 위해서는 ELK, Splink 등의 서비스를 연동하여 사용하는 방안 고려
  2. 여러 서비스에 걸쳐있는 특징을 가질 때 트랜잭션을 다루기 어렵다.
    부분적으로 서비스 병합 고려
  3. 여러 서비스에 걸쳐있는 특징을 가질 때 테스팅이 복잡하다.
    테스팅 계획 및 방법에 투자가 필요하다.
  4. 서비스 간 dependency가 있는 경우 release가 까다롭다.
    dependency 관리 체계 수립 및 관련 조직 간 계획 마련
  5. 서비스 개수가 많고 유동적이기 때문에 CI/CD 및 서비스 관리 상의 문제가 발생 할 수 있다.
    모니터링, CI/CD 자동화 기술 고려
  6. 모놀리스 시스템을 마이크로 서비스로 전환 할 때 많은 비용이 든다.

 

 

 

 

References

 

[IT정보] 모놀리식 아키텍쳐(Monolithic Architecture, MA) 개념

모놀리식 아키텍쳐(Monolithic Architecture)란? 모놀리식 아키텍쳐란, 마이크로서비스 아키텍쳐의 반대 ...

blog.naver.com

 

Micro Service Architecture

 

junhyunny.github.io

 

[MSA 개념 정립하기] MSA의 개념과 장단점

개요 본 포스팅에서는 MSA의 개념과 이후 개발 패러다임에 대해 알아보도록 하겠습니다. Microservice는 SOA (Service Oriented Architecture) 의 경량화 버전으로 (Service: 특정 기능의 집합, service..

waspro.tistory.com

 

반응형

댓글