CS

Monolithic VS MSA

슈크림 붕어빵 2024. 2. 5. 00:15

애플리케이션 아키텍쳐 스타일

  • 모놀리식 아키텍쳐 (monolithic architecture)
  • MSA ( Microservices Architecture)

 

목표와 비지니스 요구사항에 따라 달라진다.

서비스의 규모가 확장되고, 데이터 저장 및 통신을 클라우드로 => 기존의 방식인 모놀리식과 대비되는 MSA가 대두됨

 

모놀리식 아키텍쳐란(monolithic architecture) ?

정의

모놀리식 아키텍쳐란 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합돼 있는 구조를 의미

한 가지의 코드베이스로 구성된 아키텍처

장점

  • 소프트웨어가 하나의 결합된 코드로 구성되기 때문에 초기 단계에서 설계하기 용이하며 개발이 좀 더 단순하고 코드 관리가 간편하다.
  • End to-End 테스트가 용이
    • E2E(End-to-End) 테스트 : 사용자 중심으로 처음부터 끝까지 어플리케이션 흐름을 테스트하는 소프트웨어 테스트 방법 중 하나
  • 빠르게 간단한 서비스를 만들 수 있다.

단점

  • 서비스를 운영하는 과정에서 수정이 많을 경우, 어떤 서비스에서 이뤄진 수정이 연관된 다른 서비스에 영향을 미칠 가능성이 커진다. 즉,  일부분의 오류가 전체에 영향을 미침.
  • 또한 서비스가 점점 성장해 기능이 추가될수록 처음에는 단순했던 서비스 간의 관계가 매우 복잡해질 수 있다.
  • 조그마한 수정사항이 있어도 전체를 빌드하고 배포해야 하므로 배포가 잦은 환경에서 번거로움.
  • 유지보수가 힘들다.
  • 덩치가 커지면 구동시간이 늘어난다.
  • 각 기능에 따라 다른 언어, 프레임워크를 선택할 수 없습니다. ( 스택 제한으로 기술 유연성이 낮다.)

 

MSA가 필요할 경우 예시

한 서비스의 사용량이 폭발적으로 증가해 서버를 증설해야하는 경우

=> IaaS 덕분에 사용량 증가에 따라 인프라를 증설하는 것은 어렵지 않다.

더보기

보통 "IaaS"라는 약어로 알려진 Infrastructure-as-a-Service(서비스형 인프라)는 클라우드 컴퓨팅의 한 형태입니다. IaaS는 서버, 스토리지 및 네트워크 등과 같은 사용자가 필요한 컴퓨팅 자원(IT 인프라)을 가상화된 형태로 제공하는 서비스입니다. 이 서비스를 이용하면 사용자는 서버, 스토리지, 네트워크 등의 IT 인프라를 구축할 필요 없이 클라우드 제공 업체가 제공하는 가상 인프라를 활용할 수 있습니다  IaaS에서는 사용자가 필요에 따라 리소스를 확장하고 축소하는 것이 가능합니다.

  • 한 서비스의 사용량이 늘었다고 해서 다른 서비스가 포함된 애플리케이션까지 확장하는 것은 비효율적이다.
  • 게다가 특정 서비스를 수정하는 과정에서 예기치 못한 에러가 발생한다면 해당 서비스 외에 전체 서비스를 이용할 수 없는 상황이 생길 수도 있다.

그래서 이러한 문제를 해결하는 방안 => 마이크로서비스 아키텍처가 등장

 

참고

  • 스케일 아웃(Scale-out) : 여러대의 Server로 나누어 일을 처리하는 방법
  • 스케일 업(Scale-up) : Server가 더 빠르게 동작하게 하기 위해 하드웨어 성능을 올리는 방법
  • 로드 밸런서(Load Balancer) : 스케일 아웃의 장점 중 하나로, 여러 대의 Server에게 균등하게 Traffic을 분산시켜주는 역할을 담당
- monolithic의 scaling
  • scale-up : 특정 한 부분만 확장불가, 확장되지 않아도 되는 부분까지 확장해야 됨

 

MSA (Microservices Architecture)

정의

시스템 전체가 하나의 목적을 지향하는 바는 모놀리식 아키텍처와 동일

개별 기능을 하는 작은 서비스를 각각 개발해 연결하는 데서 그 차이가 있으며 독립된 서비스를 구성하고 있다.

장점

  • 서비스가 변경됐을 때 다른 서비스에 영향을 미칠 가능성이 줄어든다.
  • 사용량의 변화에 따라 특정 서비스만 확장할 수 있다.
  • 이런 구조 덕분에 각 서비스는 필요한 기능이 특화된 데이터베이스를 선택해 개별 서비스에 할당할 수 있다. ( 각 기능에 따라 언어, 프레임워크 사용 가능 - 기술 유연성이 높다.)
  • 각 서비스는 독립적으로 동작할 수 있는 완결된 구조라서 이미 개발된 기능이 다른 서비스에 필요하다면 바로 재사용가능하다.
  • 유지보수 용이
  • 독립된 배포 단위로 한 기능을 수정하면 해당 부분만 업데이트 하므로 거대한 서비스도 빠르게 수정 가능하다.

 

단점

  • 하지만 마이크로서비스 아키텍처는 모놀리식 아키텍처보다 복잡도가 높으며 각 서비스가 서로 유기적으로 통신하는 구조로 설계되기 때문에 네트워크를 통한 호출 횟수가 증가해 성능에 영향을 줄 수 있다.
  • End-to-end 서비스 구동이 불편 (즉, 테스트가 불편하다.)
  • 특히 서비스마다 DB가 따로 있어 다중 DB에 접속하여 조회하고 트랜잭션을 구현하는 일이 어렵다. 그래서 MSA는 사가라는 기술로 서비스 간 데이터 일관성을 유지한다. 또, 단순 쿼리로 여러 서비스에 있는 데이터를 조회할 수 없으므로 AP를 조합하거나 CQRS 뷰로 쿼리한다.
  • 인프라 및 자원, 인력에 드는 막대한 비용

 

 

언제 무엇을 사용하면 좋을까?

 

모놀리식 아키텍쳐

  • 기술 복잡도가 낮은 프로젝트
  • 시장 진입을 위해 빠르고 간편하게 기능 개발 및 배포를 수행해야 할 때

MSA

  • 기술적 복잡도가 높은 대규모 프로젝트
  • 다양한 기술 스택을 사용하고, 여러 비즈니스별 요구사항이 명확한 경우
  • 장애를 줄이고 시스템 전체의 가용성과 탄력성을 높여야 할 때

 

 

 

참고 문헌