Skip to content

MSA의 장단점

마이크로서비스 아키텍처의 장점

크고 복잡한 애플리케이션을 지속적으로 전달/배포할 수 있다. (CI/CD)

MSA를 구축하면 크고 복잡한 애플리케이션을 지속적 전달/배포할 수 있다. MSA는 다음과 같은 세가지 방법으로 지속적 전달/배포를 실현한다.

  • 테스트성: 지속적 전달/배포를 하려면 자동화 테스트가 꼭 필요하다. MSA는 상대적으로 크기가 작아서 자동화 테스트를 작성하기 쉽고 더 빨리 실행되며, 애플리케이션 버그도 적은 편이다.
  • 배포성: MSA는 독립적으로 배포할 수 있기 때문에 개발자가 자신이 담당한 서비스 변경분을 배포할때 다른 개발자와 복잡한 협의 과정을 거칠 필요가 없다. 그래서 프로덕션에 변경분을 반영하기가 훨씬 수월하다.
  • 자율성, 느슨한 결합: 작은 팀이 여러개 결합되어있는 기술 조직을 꾸려나갈 수 있다. 각 팀이 다른 팀과 독립적으로 개발, 배포, 확장할 수 있으므로 개발 속도가 빨라진다.

지속적 전달/배포를 하며 비즈니스 측면에서도 이점이 있다.

  • 제품을 시장에 내놓는 시기를 앞당길 수 있고 현장에서도 고객 피드백에 신속히 대응할 수 있다.
  • 현재 고객들이 기대하는 수준으로 확실하게 서비스를 제공할 수 있다.
  • 제품의 가치를 전단하는 데 더 많은 시간을 투자할 수 있다.

서비스가 작아 관리하기 용이하다.

  • MSA는 비교적 크기가 작아서 개발자가 코드를 이해하기 쉽다. 코드베이스가 작으면 IDE도 느려지지 않으므로 개발 생산성이 올라간다. 각 서비스를 시동하는 시간이 빠르기 때문에 개발자가 작업 후 배포하는 과정 역시 빠르고 생산적이다.

서비스를 독립적으로 배포/확장할 수 있다.

  • 마이크로서비스는 독립적으로 X축(복제)/Z축(파티셔닝) 확장을 할 수 있고, 서비스마다 상이한 리소스 요건에 맞추어 하드웨어에 배포할 수 있다. 리소스 요건이 전혀 다른 컴포넌트를 무조건 함께 배포할 수밖에 없었던 모놀리식과 큰 차이가 있다.

결함 격리가 잘된다.

  • MSA는 결함 격리가 잘된다. 만약 어느 서비스에서 메모리 누수가 발생하더라도 해당 서비스만 영향을 받고 다른 서비스는 계속 정상 가동된다.

신기술을 시험/도입하기 쉽다.

  • 특정 기술스택을 연구하느라 오랜 시간을 소비할 필요가 없다. 새로운 서비스를 개발할 떄 그 서비스에 가장 알맞은 언어와 프레임워크를 자유롭게 선택할 수 있다.

  • 서비스 규모가 작기 때문에 더 나은 언어와 기술로 얼마든지 재작성할 수 있다. 설령 새로운 기술을 시도했다가 실패하더라도 전체 프로젝트는 그대로 유지할 수 있다. 프로젝트 초기에 선택한 기술에 심하게 제약받을 필요가 없다.

마이크로서비스 아키텍처의 단점

설계가 어렵다.

  • MSA에 맞게 시스템을 여러 서비스로 분해하는, 구체적으로 정립된 알고리즘은 따로 없다. 하지만 만약 시스템을 잘못 분해할 경우 모놀리식/MSA의 단점만 있는 분산 모놀리스(distributed monolith)를 구축하게 된다.

복잡하다.

  • MSA를 사용하면 분산시스템이라는 복잡성을 감당해야한다. 서비스 간 통신에 필수적인 IPC 역시 단순 메서드 호출보다는 복잡하며, 사용 불능 또는 지연시간이 긴 원격 서비스, 부분 실패한 서비스를 처리할 수 있게 설계해야한다.

  • 여러 서비스를 상대로 유스케이스를 구현하려면 추가적으로 신경써줘야하는 부분도 있다. 특히 서비스마다 DB가 따로 있기 때문에 다중 DB에 접속하여 좆회하고 트랜잭션을 구현하기 어렵다. (이를 해결하기 위해 사가라는 기술을 사용한다. 여러 API를 조합하거나 CQRS뷰로 쿼리하는 방식을 사용하기도 한다.)

여러 서비스에 걸침 공통 기능을 배포할 시 주의해야한다.

  • 여러 서비스에 걸친 기능을 배포할때는 여러 개발 팀 간에 세심한 조율이 필요하기도 한다. 그러므로 서비스 간 디펜던시에 따라 배포를 계획적으로 수행해야한다.

도입 시기를 결정하기 어렵다.

  • 초기 버전을 개발할때는 굳이 MSA를 사용할 이유가 없다. 초기에는 오히려 개발속도가 더뎌지게 만들고, 재빠른 발전이 어려워진다.

  • 필요한 경우 애플리케이션의 도메인이 복잡해지는 시접에 기능분해하여 서서히 MSA로 리팩터링해야하는데, 이 적절한 시점을 딱 찾아내는 것도 어렵고 변환해가는 과정도 만만치 않다.

  • 마이크로서비스 도입에는 그에 따는 다양한 설계/아키테겇 이슈가 있으며, 그중 상당수에는 솔루션이 여러개이며 각자 나름의 trade-off가 있다. 완벽한 정답은 없기 때문에, 각 상황에 따라 적절하게 선택하여 구현하면 된다.