MSA 탄생배경

지인호·2022년 2월 10일
0

TIL

목록 보기
22/28
post-thumbnail

MSA 이전의 기술들

Monolithic Architecture

대부분의 엔터프라이즈급 응용프로그램은 다음과 유사한 계층구조를 가지게 된다.

  • Presentation : UI 같이 유저에게 보여지는 부분을 담당하는 계층
  • Business Logic : 응용프로그램 내부 로직을 담당하는 계층
  • Database Access : 데이터베이스에 접근하여 영속성 데이터를 관리하기위한 계층
  • Application Integration : 다른 응용프로그램과의 통신을 위한 계층

이때 이러한 모든 계층을 하나의 서비스 또는 어플리케이션만을 사용하여 모든 기능을 하는 경우를 의미한다. (즉 Application Integration 계층이 없거나 작다. (Naver API 같은 타 API 와의 통신은 필요하므로))

이러한 모놀리식 구조는 개발초기에 한하여 개발, 테스트, 배포가 쉽고 서비스 구조가 비교적 단순하다는 장점이 있지만 아래와 같은 한계가 드러나게 된다.

  • 유연하지 않은 구조
    모놀리식 아키텍처는 기술스택으로부터 자유롭지 못하다. 예를들어서 서비스에 SpringBoot 프레임워크를 사용할 경우, 이후 추가되는 기능들 또한 SpringBoot 기반 어플리케이션에서 구현되야하므로, NodeJS, Ruby on Rails 같은 다른 기술스택을 사용할 수 없다.
  • 신뢰성이 떨어지는 구조
    모놀리식 아키텍처는 단일 서비스/어플리케이션이 모든 기능을 담당한다. 그러므로 한 기능에서 버그가 생길경우 어플리케이션 전체에 영향을 끼치게 된다.
    예를들어서, 커머스 서비스의 쿠폰 기능에서 FatalError 가 나서 서버가 다운될 경우, 회원가입 뿐 아니라 회원가입/로그인, 상품구매 같은 다른기능 또한 이용할 수 없다
  • O(2^N) 뺨치는 개발속도와 확장성 저하
    서비스가 점점 커질수록 하나의 어플리케이션에서 담당하는 부하(지원하는 기능의 수)가 증가하고, 각 기능들이 비교적 밀접한 연관관계를 가지게 된다. 이로인해 확장성이 저하되고, 복잡한 내부구조로 인해 개발속도 또한 저하된다.
  • 지속적 배포의 어려움
    아주 약간의 수정사항을 적용하려 하여도 전체 서비스를 다시 배포하여야한다. 예를들어서 메인페이지의 로그인을 수행할 경우, CAPTCHA 를 도입하는 수정사항을 적용하려면 로그인 이외의 다른 모든 기능들 또한 다시배포하여야 한다.

Service Oriented Architecture

이러한 모놀리식의 단점을 해결하기위해 SOA (서비스 지향 아키텍처) 가 고안되었다.

SOA 는 기존 모놀리식 어플리케이션내의 기능들을 비즈니스적인 의미를 가지는 기능 단위 로 묶어서, 표준화된 호출 인터페이스 를 통해 서비스로 구현하고, 이 서비스들을 통해 어플리케이션을 구성하는 아키텍처이다.

이러한 SOA 는 모놀리식에 존재하던 기술적 복합도를 낮출 수 있을 뿐더러, 점점 확장되어가는 기능들을 독립적으로 다룰 수 있다는 장점이 있었다.

  • 서비스
    플랫폼에 종속되지 않는 표준 인터페이스를 통해 기능들을 모아놓은 SW컴포넌트
    상품 주문 서비스, 회원가입 서비스 등이 이에 해당한다.
  • ESB
    엔터프라이즈 서비스 버스 의 약자로, 서비스들 논리적 집합으로 묶는 미들웨어이다.
    서비스에 대한 요청과 처리를 중계하여 느슨하게 연결되어있는 각 서비스들을 조립하여 로직을 실행한다. Application Intergration 에 대한 프록시 같은 역할

MSA 는 이러한 SOA에서의 서비스간 연결을 더욱 느슨하게 만들고, ESB 의 비대화를 해소시키기 위해 나온 아키텍처이다. 그렇다면 MSA 란 과연 무엇일까?

MSA 란

MSA 의 선두주자 Netflix 는 MSA 를 다음과 같이 정의하였다.

📌 loosely coupled service oriented architecture with bounded contexts

→ Bounded Contexts 간의 느슨한 결합으로 이루어진 SOA

  • SOA 는 전술한 서비스 지향 아키텍처 일것이다. 그런데 Boundded Contexts 는 무엇일까?
  • Bounded Context : 각 도메인간의 경계 또는 한 도메인의 범위이다. 자세한 내용은 링크 참조
  • 느슨한 결합 : 말그대로 결합이 느슨해야한다는 의미이다.
    각 BoundedContext 에 따라 분류된 도메인들을, 서비스단위로 분할하는것을 말한다.

MSA 는 도메인(관심사) 간의 느슨한 결합으로 이루어진 SOA 의 파생형 아키텍처 라는 의미이다.

이러한 MSA 방식의 아키텍처는 다음과 같은 장점을 가진다

  • 배포의 용이함
    아까 모놀리식에서 든 예시를 다시 사용해보자. 로그인시 CAPTCHA 를 도입할 경우, 로그인 또는 회원관리 서비스 만 재배포하면 된다. 그 이외의 쿠폰이나 상품주문 같은 서비스는 재배포를 하지 않아도 정상적으로 작동한다.
    즉, 달리는 자동차를 바꾸지 않고, 자동차의 바퀴나 핸들만 교체하면 된다!
  • 개별 Scale-out
    MSA 는 각 기능별로 서비스를 분리한다. 따라서 부하가 많이 일어나는 기능을 담당하는 서비스에만 개별적으로 Scale-out을 통한 확장을 진행할 수 있다.

하지만 MSA 또한 장점만 있는것은 아니다. 서비스가 분산되어, 전체 서비스의 복잡성이 증가했을 뿐더러, 한 서버의 부하나 장애로 인한 트렌젝션이슈, 통합테스트의 어려움 등 여러가지 단점이 존재한다.

그러므로 MSA 는 언제나 좋은 아키텍처가아니다. 상황에 따라서는 모놀리식 아키텍처가 오히려 좋을 수도 있다. 그러니 무엇보다 중요한건 현재 상황에 맞는 아키텍처를 도입하는 것 이다.

profile
테오의 스프린트 17기 퍼실리테이터

0개의 댓글