본문 바로가기
카테고리 없음

MicroService Architecture(MSA)란 무엇일까?

by abccoco 2023. 4. 29.

MicroService Architecture(MSA)의 의미는 무엇일까요?

MSA는 분산 시스템과 관련된 개념입니다. 따라서 대규모 애플리케이션을 구축하는 과정에서 접하게 됩니다.

MSA란 대규모 sw를 이름 그대로 작은(micro) 서비스로 분해하고 독립적으로 배포, 확장, 관리할 수 있도록 설계하는 아키텍처라고 말할 수 있겠습니다.

MSA는 하나의 애플리케이션에 모든 기능이 종속되어 있는 모놀리식(Monolithic) 아키텍처의 단점을 보완하여, 시스템의 확장성과 유연성을 높일 수 있도록 만들어 졌습니다.

  • 모놀리식(Monolithic) 아키텍처에서는 전체 시스템이 하나의 큰 어플리케이션으로 구성되어 있으며, 각각의 기능이 서로 긴밀하게 결합되어 있습니다. 즉, 하나의 애플리케이션에 모든 기능이 포함되어 있어서, 이를 수정하거나 확장하기 어려운 단점이 있습니다.

이해하기 쉽게 예를 들어 설명해 보겠습니다.

예를 들어, 한 회사가 대규모의 온라인 서비스를 제공하고 있다고 가정해봅시다. 이 회사가 전통적인 *모놀리식(Monolithic) 아키텍처를 사용한다면, 서비스의 모든 기능이 단일 애플리케이션에 포함되어 있어야 합니다. 이는 일부 기능만 변경해도 전체 애플리케이션을 다시 배포해야 한다는 의미입니다. 또한, 애플리케이션 내부에서 발생하는 장애나 버그가 전체 시스템에 영향을 미칠 가능성이 높아집니다.

하지만 MicroService Architecture를 사용한다면, 애플리케이션의 여러 기능이 각각의 독립적인 서비스로 분리됩니다. 예를 들어, 사용자 인증, 상품 관리, 결제 처리, 주문 추적 등 각각의 기능은 별도의 서비스로 제공됩니다. 이렇게 분리된 서비스들은 서로 독립적으로 배포되고 실행될 수 있으며, 이러한 독립성을 유지하면서도 다른 서비스들과 통합될 수 있습니다.

이를 통해 서비스 간에 느슨한 결합을 유지할 수 있으며, 개발, 배포, 운영 등의 측면에서 유연성과 확장성을 확보할 수 있습니다.

 

MicroService Architecture(MSA)는 Event Driven과 함께 언급됩니다.

MSA는 Event Driven과 밀접하게 연관되어 있습니다.

이유가 무엇일까요? MSA에서 서비스 간의 통신 방식이 메시징 시스템을 기반으로 하기 때문입니다. 메시지 기반 아키텍처에서는 서비스 간의 통신이 메시지 전송을 기반으로 하며, 이 때 발생하는 이벤트를 통해 서비스 간의 통신을 처리합니다. MSA에서는 각 서비스가 독립적으로 개발, 배포, 확장될 수 있어야 하기 때문에, 각 서비스 간의 결합도를 최소화하고, *느슨한 결합(loose coupling)을 유지합니다.

  • 느슨한 결합(loose coupling)이란, 소프트웨어 아키텍처에서 *컴포넌트들 간의 의존성을 최소화하여, 컴포넌트 간에 독립적으로 변화할 수 있는 구조를 만드는 것을 말합니다.
  • 컴포넌트란, 재사용 가능한 부품을 말합니다. 예를들어 웹 애플리케이션을 개발할 때, 로그인 컴포넌트, 회원가입 컴포넌트, 게시판 컴포넌트 등과 같은 컴포넌트를 개발할 수 있습니다. 이 컴포넌트들은 각각 독립적으로 개발될 수 있으며, 필요한 경우 다른 시스템에서도 재사용될 수 있습니다.

 

Event Driven(이벤트 기반)이란?

이제 Event Driven에 대해 알기 위한 배경 지식을 알았으니 Event Driven이 무엇인지 좀 더 본격적으로 알아보겠습니다.

Event Driven(이벤트 기반)이란? 컴퓨터 시스템에서 이벤트가 발생할 때마다 이를 감지하고 적절한 처리를 수행하는 방식을 말합니다. 예를 들어 사용자의 클릭, 데이터베이스의 업데이트, 메시지 *큐(queue)에 새로운 메시지가 도착하는 등이 이벤트가 될 수 있습니다.

  • 큐(queue) 자료 구조는, 스텍(stack)과 다르게 데이터를 선입 선출 형태로 다룹니다.

이벤트 기반 아키텍처에서는 이벤트가 발생하면 이를 처리하기 위한 적절한 *핸들러(handler)를 호출하거나, 다른 시스템에 이벤트를 전송합니다. 이벤트 처리는 *비동기적으로 처리되기 때문에, 이벤트가 발생하면 즉시 처리될 필요 없이 이벤트 큐(queue)에 적재되고, 처리가 가능한 시점에서 이를 처리합니다.

  • 핸들러(handler)란 Event 즉 사용자의 클릭, DB 업데이트, 새로운 메시지와 같이 시스템 상에서 발생하는 모든 Event를 처리하는 코드 블록 또는 함수를 의미합니다.
  • 비동기(asynchronous)란 어떤 작업이 요청되었을 때, 그 작업이 완료될 때까지 기다리지 않고, 다른 작업을 처리하면서 결과를 기다리는 것을 말합니다. 즉 한 번에 여러 요청을 처리할 수 있도록 합니다.

이벤트 기반 아키텍처는 느슨한 결합(loose coupling)과 분산 처리(distributed processing)를 가능하게 하기 때문에, 대규모 분산 시스템에서 많이 사용됩니다. 또한 이벤트 기반 아키텍처는 기존의 모놀리식(monolithic) 아키텍처보다 유연성, 확장성, 견고성 등을 높일 수 있습니다. 이러한 이유로 이벤트 기반 아키텍처는 최근에는 많은 분야에서 사용되고 있으며, 특히 IoT, 빅 데이터 등의 분야에서 많이 활용됩니다.

 

차이점 정리

1. 아키텍처 구조

  • MSA: 분산된 서비스들로 구성되어 있으며, 각각의 서비스는 자체적으로 독립적으로 배포 가능하다.
  • 모놀리식: 모든 기능이 하나의 어플리케이션에 통합되어 있다.

2. 개발 방식

  • MSA: 각각의 서비스들은 독립적으로 개발되어 다양한 기술 스택을 사용할 수 있으며, 작은 단위의 서비스로 개발하여 유지보수 및 업데이트가 쉽다.
  • 모놀리식: 하나의 어플리케이션으로 개발되기 때문에, 개발 언어나 프레임워크를 변경하기 어렵고, 전체 어플리케이션을 통째로 배포해야 한다.

3. 확장성

  • MSA: 서비스 단위로 확장이 가능하다. 필요한 서비스만 추가하거나 제거하여 스케일링이 용이하다.
  • 모놀리식: 전체 어플리케이션을 한 번에 확장해야 한다.

4. 안정성

  • MSA: 분산 구조로 인해 하나의 서비스가 다운되더라도 다른 서비스에 영향을 미치지 않는다.
  • 모놀리식: 하나의 오류가 전체 시스템에 영향을 미칠 가능성이 있다.

 

정리

MSA(Microservice Architecture)는 하나의 대규모 어플리케이션을 여러 개의 작은 서비스로 분해하여 개발하는 아키텍처 스타일입니다. 각각의 서비스는 독립적으로 개발, 배포, 확장할 수 있으며, API를 통해 통신합니다. 이는 유연성과 확장성이 높으나 구현 및 운영이 복잡합니다.

모놀리식(monolithic)은 하나의 큰 어플리케이션으로 구성된 아키텍처 스타일입니다. 모든 기능은 하나의 어플리케이션에서 실행되며, 배포 및 관리가 간단합니다. 하지만 모든 기능이 하나의 코드베이스에서 구현되기 때문에 유연성이 떨어지며, 개발, 배포, 확장이 어렵습니다.

요약하면, MSA는 유연성과 확장성이 높으며, 개발, 운영이 복잡하고, 모놀리식은 유연성이 떨어지고, 개발, 운영이 간단합니다.


참고자료

https://techblog.woowahan.com/7835/

댓글