본문 바로가기

Tech

[MSA] 마이크로서비스 아키텍처(Microservice Architecture) 등장

MSA 등장 배경

모놀로식 아키텍처 (Monilithic Architecture) vs 마이크로서비스 아키텍처(Microservice Architecture)

https://dashbird.io/knowledge-base/well-architected/monolith-vs-microservices/

모놀리식 아키텍처에서는 애플리케이션 내의 모든 기능과 서비스가 함께 맞물려 단일 유닛으로 운영된다. 웹 개발을 예로들면, 웹 프로그램을 개발하기 위해서 모듈별로 개발을 하고, 개발이 완료된 웹 애플리케이션을 하나의 결과물로 패키징 하여 배포되는 형태를 말한다. 이런 애플리케이션을 모놀리식 애플리케이션이라 하며, 웹의 경우 WAR 파일로 빌드되어, WAS에 배포하는 형태를 말한다.

애플리케이션이 확장 될수록 다음과 같은 한계가 발생할 수 있다. 

  • 작은 수정 사항도 애플리케이션 전체를 다시 빌드/배포해야 한다.
  • 부분적인 장애가 전체 장애로 이어질 수 있다. 
  • 부분적인 scale-out이 어렵다.
  • 서비스의 변경이 어렵고 영향도 파악이 어렵다.
  • Framework와 언어가 종속적이다.

이러한 부분을 개선하고자 등장한 것이 마이크로서비스 아키텍처(Microservice Architecture)이다.

 

MSA 란?

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

 

쉽게 말하자면 기존 모놀리식 아키텍처가 단일 유닛으로 구성되어 있다면, 마이크로서비스 아키텍처는 단일 유닛을 작은 서비스 유닛으로 쪼개어 독립적으로 구성하는 것을 말한다.

마이크로서비스 아키텍처의 장점은 다음과 같다.

MSA 장점

  • 빠른 배포와 업데이트 가능하다. (서비스별 배포가 가능)
  • 장애 시 격리 및 복구가 쉬워 전체 서비스의 장애로 확장될 가능성이 적다.
  • 개별적 서비스 관리를 통해 메모리/CPU 관리에 효율적이다.
  • 각 서비스가 모듈화 되어있어 개발/유지보수가 더 용이하다.
  • 각 기능에서 최적화된 언어와 기술을 자유롭게 사용할 수 있다.

그러나 MSA가 장점만 있는 것은 아니고, MSA의 단점은 다음과 같다.

MSA 단점

  • 단순 아키텍처에 비해 설계/개발 복잡도가 늘어난다.
  • 서비스 간 호출이 API로 이루어질 경우 통신 비용, Latency가 늘어나 성능적 이슈가 있을 수 있다.
  • 서비스가 분리되어 있고, 각 서비스에 맞는 DB를 사용하기 때문에 테스트와 트랜잭션의 복잡도가 증가한다. (통합테스트의 어려움)
  • 데이터가 여러 서비스에 걸쳐 분산되기 때문에 한 번에 조회하기 어렵고, 데이터의 정합성을 관리하기 어렵다.
  • 분산 시스템에서는 모든 내용을 한 곳에 모을 수 있는 중앙집중식 로그가 필요하다. 그렇지 않으면 확장 시에 이를 관리하기가 불가능해진다.
  • 서비스가 분산되어 있어 모놀리식 아키텍처에 비해 많은 자원이 필요하다.

MSA 주로 사용하는 기술

API

API는 Application Programming Interface(애플리케이션 프로그램 인터페이스)의 줄임말로 마이크로 서비스들이 서로 호출하여 서비스 내의 정보를 공유하고, 하나로 작동할 수 있게 해주는 중요 역할을 한다. 

Event Streaming

이벤트는 서비스 내 발생하는 모든 동작을 이벤트로 정의할 수 있으며, 이벤트들이 모여 이벤트 스트림으로 형성된다.  마이크로 서비스는 API 뿐만 아니라  Event-Driven Architecture를 활용하여 이벤트를 통해서도 정보를 공유할 수 있다. 

Container

컨테이너는 하나의 운영 체제 커널에서 다른 프로세스에 영향받지 않고 독립적으로 실행되는 프로세스 상태의 단위이다. MSA에서는 애플리케이션 내 단일 구성 요소들이 기술 스택의 나머지 부분에 영향을 미치지 않고 업데이트할 수 있도록 컨테이너를 이용할 수 있고, 주로  컨테이너 오케스트레이션 플랫폼으로 Kubernetes, Docker Swarm 및 Apache Mesos를 주로 사용하고 있다.

 

결론

실제로 마이크로 아키텍처 전환을 진행해 본 경험을 토대로 보면 단점이 매우 뚜렷하기 때문에 MSA가 반드시 효율적인 아키텍처라고만은 할 수 없다. 그러나 자원이 한정적이지 않다면 대규모 서비스에서는 개발, 유지보수 관점에서 매우 유용하기 때문에 많은 기업들에서 마이크로 아키텍처로의 전환이 이루어지고 있는 것으로 보인다.

장점과 단점이 뚜렷한 만큼 도입할 서비스에 적합한지 많은 고려가 필요하다.