우매함의 봉우리를 넘어서며 개발하면서 기록하기

MSA 기본개념

Java Spring를 공부하면서 정리하는 포스트입니다.
내용이 잘못되었거나 문제가 있다면 댓글이나 이메일로 알려주시면 감사하겠습니다.

MSA란?


MicroService Architecture(마이크로서비스 아키텍처)의 줄임말로 하나의 큰 어플리케이션을 각각의 기능 단위로 쪼개어 여러개의 작은 어플리케이션을 만들고 이 것들을 이용하여 변경과 조합이 가능하도록 만든 아키텍처라고 할 수 있다. 마이크로서비스는 완전히 독립적으로 배포가 가능하고, 각 서비스마다 다른 기술 스택(개발 언어, DB 등)을 사용할 수 있는 단일 사업 영역에 초점을 둔다.

MSA의 등장 배경


MSA의 등장을 살펴보기 전에 먼저 살펴보아야 할 것은 기존의 개발 방식에 대한 것이다.

Monolithic vs MicroService 출처 : [레드햇, 마이크로서비스란?](https://www.redhat.com/ko/topics/microservices/what-are-microservices)

Monolithic Architecture은 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어있는 형태이다. 현재 대부분의 소프트웨어를 개발할 때의 형태이고 소규모 프로젝트에는 훨씬 합리적이다. 설계가 간단한 Architecture이기도 하고 유지보수가 용이하기 때문이다.

하지만 일정 규모 이상의 서비스이거나 수백명의 개발자가 투입되는 프로젝트에서 Monolithic Architecture는 명확한 한계를 보인다.

  • 서비스들 사이의 영향도 파악 및 시스템 구조 파악에 어려움이 존재한다.

    • 여러 컴포넌트가 하나의 서비스에 강하게 결합되어 있기 때문에 서비스의 변경 또는 수정 시에 영향도를 파악하기 힘들며 시스템 전체 구조 역시 파악하는 것이 어렵다.
  • 빌드 / 테스트 / 배포 시간이 오래 걸린다.

    • 최근 어플리케이션의 개발은 CI/CD을 활용하여 개발부터 빌드, 배포까지 자동화로 빠르게 반영하는 추세이다. 하지만 규모가 커짐에 따라 작은 변경에도 높은 수준의 테스트 비용이 발생하기도 하며 많은 사람이 하나의 시스템을 개발하고 배포하기 때문에 배포 시간에 영향을 줄 수 밖에 없다.
  • Framework와 언어에 종속적이다.

    • 만약 현 시스템에 Spring Framework을 선택했을 경우, node.js나 django 등의 다른 언어를 차용하여 개발할 수 없는 문제가 발생한다.

이러한 문제점들을 보완하기 위해 클라우드 환경을 활용하여 서버를 구성하는 MSA가 주목받게 되었고 많은 서비스들이 이미 전환되고 있는 상태이다.

MSA의 특징


MSA에서 가장 중요하게 생각되는 것은 위의 이미지에서도 볼 수 있듯 각각의 서비스가 독자적이고 독립적이라고 생각한다. 그래서 정리해보자면

  • 각 서비스는 들여다 보았을 때 Monolithic Architecture 와 유사한 형태를 띈다.
  • 각 서비스는 독립적으로 배포가 가능하다.
  • 각 서비스는 엔드포인트를 REST API와 같은 가벼운 방식으로 지정하여 통신하도록 한다.

이러한 방식은 SOA(Service Oriented Architecture)의 개념과 유사하다.

SOA는 어플리케이션을 별개의 재사용이 가능한 서비스 단위로 분할하며 이 서비스들은 Enterprise Service Bus(ESB)를 통해 통신한다. 이러한 아키텍처에서는 특정 비즈니스 프로세스를 기반으로 구성된 개별 서비스가 통신 프로토콜을 준수하며 ESB를 통해 공유되며 이를 통해 하나의 어플리케이션을 구성하는 것이다.

MSA의 장점


  • 배포 관점

    • 서비스 별 개별 배포 가능, 배포할 때 다른 서비스를 중단하지 않아도 됨.
    • 요구 사항을 신속하게 반영하여 빠르게 배포할 수 있음
  • 확장 관점

    • 개발하려는 서비스에 따라 언어와 framework를 자유롭게 설정할 수 있음. 블록체인이나 데이터 정제 등 서비스에 더 강력한 기능을 갖고 있는 언어로 기술 스택을 지정할 수 있음.
    • 신기술의 적용이 자유로움
  • 장애 관점

    • 장애가 발생했을 때 전체 서비스로 확장될 가능성이 적음.

MSA의 단점


Monolithic Architecture은 단순한 아키텍처인데 반해 MSA는 보다 복잡한 아키텍처로 전체 서비스가 커짐에 따라 복잡도가 기하급수적으로 늘어날 수 있다.

  • 데이터가 여러 서비스에 걸쳐 분산되어 있기 때문에 한번에 조회하기 어렵고 트랜잭션을 유지하기 어렵다.
  • 서비스 간 호출 시에 API를 활용하기 때문에 통신비용이나 지연 시간이 그만큼 증가한다. 또한, 많은 자원을 소모하기 때문에 서버의 비용 역시 증가한다.

참조 문서

MSA 제대로 이해하기 -(1) MSA의 기본 개념 RedHat - 마이크로서비스란?