MSA(MicroService Architecture)

Ouroboros·2023년 9월 18일
0

개발상식

목록 보기
13/17

MSA

비즈니스 요소는 마이크로서비스 단위로 분리한 후(DB까지 분리) 이들이 모여 전체적인 서비스를 구현한다.
보통 레고로 비유를 하는데, 작은 레고블록(Microservice) 하나하나를 모아 붙여 어떠한 큰 결과물을 만드는 형태를 MSA 라고 한다.

마이크로서비스(microservice)는 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는, ⑴서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법이라고 말하기도 한다.

MSA 등장 배경

Monolithic Architecture

모놀리식(Monolithic) 아키텍처는 마이크로서비스(Microservices) 아키텍처를 설명할 때 비교 등장하는 아키텍처이다.
모놀리식은 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태이다. 웹 개발을 예로 들자면, 모놀리식은 웹 프로그램을 개발하기 위해 모듈별로 개발을 하고, 개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포되는 형태이다.
아직까지는 많은 소프트웨어가 모놀리식 형태로 구현되어 있고, 소규모 프로젝트에는 모놀리식 아키텍처가 훨씬 합리적이기에 많이 쓰이고 있다. 소규모의 프로젝트에서는 모놀리식 형태는 간단하고, 유지보수가 편하기 때문이다.
하지만 일정 규모 이상의 서비스, 혹은 수백명의 개발자가 투입되는 프로젝트에서 모놀리식 아키텍처는 사용하는데 한계가 있다.

❗ 모놀리식 아키텍처의 한계

1. 유연성의 한계

모놀리식 아키텍처는 모든 구성요소가 한 프로젝트에 통합되어 있는 형태이기 때문에 개발 유연성에 한계를 띈다.

  • 한 Framework와 언어에 종속
    자바로 시작 했으면 모든 서비스를 자바로 구성해야한다. 특정 기능 구현에 강점인 경우(ex) 소켓통신, 머신러닝 등) 해당 언어를 사용하기가 힘들다.
  • 강한 결합도에 의한 기능 구현의 어려움
    모놀리식의 경우 서비스간에도, 의존성에도 강한 결합도를 가진다. 그로 인해 옛날 버전의 의존성을 그대로 활용해야하는 문제점이 있고 의존성 버전을 바꾸기가 쉽지 않아서 의도대로의 기능 구현이 힘들 수 있다.
  • 배포의 부담감
    하나의 기능이 추가되거나 버그 수정 등이 이루어질 경우에 모놀리식 시스템은 전체적인 기능에 대한 테스트와 빌드, 그리고 배포가 이루어져야 한다. 간단한 수정조차도 전체적인 테스트와 빌드, 배포가 이루어져야 하기 때문에 배포의 부담감을 느낄 수 있다.

2. 장애의 확대

여러 컴포넌트가 하나의 서비스에 강하게 결합되어 있기 때문에 수정에 대한 영향도 파악이 힘들다. 또한 모놀리식은 하나의 거대한 시스템이고 강한 결합도를 가지기 때문에 특정 서비스에서 장애가 발생하면 그 장애는 다른 서비스로 전파된다.

3. 스케일의 비효율성

모놀리식 시스템의 경우, 모든 요소가 하나의 모놀리식 시스템에 구현되어 있으므로 모놀리식 단위로 스케일링이 이루어져 스케일 아웃이 힘들다.
즉, 스케일링을 하고자 하더라도 전체 모놀리식 시스템 단위로 스케일링이 이루어져야 한다.

MSA의 특징

MSA는 API를 통해서만 상호작용한다. 즉, 마이크로 서비스는 서비스의 end-point(접근점)을 API 형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화한다. 내부의 구현 로직, 아키텍처와 프로그래밍 언어, 데이터베이스, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려진다.

MSA의 장점과 단점

🥰 MSA의 장점

MSA는 서비스가 커지면서 생겼던 Monolithic Architecture의 문제점들을 어느정도 보완해 줄 수 있다.

배포(deployment) 관점

  • 서비스 별 개별 배포 가능
  • 배포 시 전체 서비스의 중단이 없음
  • 특정 서비스의 요구사항만을 반영하여, 빠르게 배포 가능

확장(scaling) 관점

  • 특정 서비스에 대한 확장성(scale-out)이 유리
  • 클라우드 기반 서비스 사용에 적합

장애(failure) 관점

  • 일부 장애가 전체 서비스로 확장될 가능성이 적음
  • 부분적으로 발생하는 장애에 대한 격리가 수월

그 외

  • 새로운 기술을 적용하기 유연(전체 서비스가 아닌 특정 서비스만 별도의 기술 또는 언어로 구현 가능)
  • 각각의 서비스에 대한 구조 파악 및 분석이 모놀리식 구조에 비해 쉽습니다.

😞MSA의 단점

MSA는 보다 복잡한 아키텍쳐기에, 전체 서비스가 커짐에 따라 그 복잡도가 기하급수적으로 늘어날 수 있다.

성능 관점

  • 서비스 간 호출 시 API를 사용하기 때문에, 통신 비용이나, Latency가 그만큼 늘어나게 됨

테스트 / 트랜잭션 관점

  • 서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도가 증가하고, 많은 자원이 필요

데이터 관리 관점

  • 데이터가 여러 서비스에 걸쳐 분산되기 때문에 한번에 조회하기 어렵고, 데이터의 정합성 또한 관리하기 어려움

MSA와 쿠버네티스

MSA에서 컨테이너 기술은 거의 필수적이다. 하지만 꼭 쿠버네티스를 써야만 MSA라고 할 수는 없다.
다양한 MSA를 배포, 관리하는 방법(ECS, docker swarm 등) 이 존재한다.
그럼에도 쿠버네티스가 각광받는 이유는 쿠버네티스가 수많은 마이크로서비스들을 운영하고 배포하고 모니터링 해주며 관리해야하는 것을 상대적으로 쉽게 해준다.
또한 많은 MSA를 배포할 때 쿠버네티스를 사용한 활용사례와 성공 사례들이 존재해 MSA 서비스를 배포할 때 쿠버네티스가 각광받게 되었다.

주석

⑴서비스 지향 아키텍처(SOA) : 대규모 컴퓨터 시스템을 구축할 때의 개념이다. 업무상에 일 처리에 해당하는 소프트웨어 기능을 서비스로 판단하여, 그 서비스를 네트워크상에 연동하여 시스템 전체를 구축해 나가는 방법론이다. 여기에서 서비스는 기능의 독립적 단위이다.

참고자료

1) https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1-MSA%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-3sk28yrv0e
2) 사진
https://toobler.medium.com/how-lego-like-software-development-using-microservices-helped-toobler-2d08a57d12d8
3) https://velog.io/@suhongkim98/MSA%EC%99%80-DDD-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90%EB%9E%80
4) https://hahahoho5915.tistory.com/71

0개의 댓글