상세 컨텐츠

본문 제목

알고보니 - MSA란?

IT 정보/IT 알쓸신잡

by 마이드림72 2022. 3. 8. 15:05

본문

MSA란 무엇인가?

기존 시스템과 MSA의 비교


MSA란?

MicroService Architecture의 줄임말로 마이크로서비스 아키텍처에 대한 정확한 정의는 없다.
하지만 마이크로서비스란 작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크라고 할 수 있다.
마이크로서비스는 완전히 독립적으로 배포가 가능하고, 다른 기술 스택(개발 언어, 데이터베이스 등)이 사용 가능한 단일 사업 영역에 초점을 둔다.
독립된 서비스는 API를 통해서만 상호작용한다.

MSA의 등장배경

기존의 시스템은 정보제공을 위한 화면부터 데이터베이스까지 전체가 하나의 흐름으로 묶여있는 Monolithic Architecture이다.
즉, Monolithic Architecture는 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태로 웹 개발을 예로 들면 웹 프로그램을 개발하기 위해 모듈별로 개발을 하고, 개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포되는 형태를 말한다. 
웹의 경우 웹 서버에서 관리가 가능한 모듈 형태로 빌드되어 배포하는 형태를 말한다.
이는 불과 몇년 전까지 대다수의 프로젝트에서 사용였다.
Monolithic Architecture의 문제점으로는 부분 장애가 전체 서비스의 장애로 확대될 수 있으려, 부분적인 서비스의 변경이 어렵고, 수정 시 장애의 영향도 파악이 힘들다.
즉 내가 오류가 발생하여 수정한 부분이 예상하지 못하는 다른 부분에 영향을 주어 오류가 발생할 수 있다는 의미이다.
이러한 상황은 서비스를 수정하고 배포하는데 매우 시간이 오래 걸리며, 특정 Framework와 언어에 종속적이 될 수밖에 없다.

이러한 Monolithic Architecture의 문제점들을 보완하기 위해 MSA가 등장하게 되었다. 

MSA의 특징

MSA의 가장 큰 특징 중에 하나는 API를 통해서 모든 구성요소들이 상호작용하는 것이다. 
즉, 마이크로서비스는 서비스의 end-point(접근점)을 API 형태로 외부에 노출하여, 내부의 구현 로직, 아키텍처와 프로그래밍 언어, 데이터베이스, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려진다. 
2010년 경 전 세계적으로 대 유행을 하였던 SOA(Service Oriented Architecture)와 매우 흡사하며, 다수의 공통점을 가진다. 
제대로 설계 된 마이크로서비스는 하나의 비즈니스 범위에 맞춰 만들어지므로 하나의 기능만 수행한다.
즉, 어플리케이션 출시처럼 하나의 목표를 향해 일하지만 자기가 개발하는 서비스만 책임진다. 
그리고 여러 어플리케이션에서 재사용할 수 있어야 한다.
어플리케이션은 항상 기술 중립적 프로토콜을 사용해 통신하므로 서비스 구현 기술과는 무관하다. 
따라서 마이크로서비스 기반의 어플리케이션을 다양한 언어와 기술로 구축할 수 있다는 것을 의미한다. 
마이크로서비스는 SOA에서 사용되는 집중화된 관리 체계를 사용하지 않으며, REST 등 가벼운 통신 아키텍처, 또는 Kafka 등을 이용한 message stream을 주로 사용한다.

MSA의 장,단점

장점

각각의 서비스는 모듈화가 되어있으며 이러한 모듈까리는 RPC 또는 message-driven API등을 이용하여 통신한다. 
이러한 MSA는 각각 개별의 서비스 개발을 빠르게 하며, 유지보수도 쉽게 할 수 있도록 한다.
팀 단위로 적절한 수준에서 기술 스택을 다르게 가져갈 수 있다. 
회사가 java의 spring 기반이라도 MSA를 적용하면 node.js로 블록체인 개발 모듈을 연동함에 무리가 없다. 
마이크로서비스는 서비스 별로 독립적 배포가 가능하다. 따라서 지속적인 배포 CD도 모놀로식에 비해서 가볍게 할 수 있다.
마이크로서비스는 각각 서비스의 부하에 따라 개별적으로 scale-out이 가능하다. 메모리, CPU적으로 상당부분 이득이 된다.

 

단점

MSA는 모놀리식에 비해 상대적으로 많이 복잡하다. 
서비스가 모두 분산되어 있기 때문에 개발자는 내부 시스템의 통신을 어떻게 가져가야 할지 반드시 표준 정의가 되어 있어야 한다. 
또한, 통신의 장애와 서버의 부하 등이 있을 경우 어떻게 transaction을 유지할지 결정하고 구현해야 한다. 
모놀리식에서는 단일 트랜잭션을 유지하면 됐지만 MSA에서는 비즈니스에 대한 DB를 가지고 있는 서비스도 각기 다르고, 서비스의 연결을 위해서는 통신이 포함되기 때문에 트랜잭션을 유지하는 게 어렵다. 
또한 통합 테스트가 매우 어렵다. 개발 환경과 실제 운영환경을 동일하게 가져가는 것이 쉽지 않기 때문이다. 
실제 운영환경에 대해서 배포하는 것 또한 쉽지 않다. 
마이크로서비스의 경우 서비스 1개를 재배포 한다고 하면 다른 서비스들과의 연계가 정상적으로 이루어지고 있는지도 확인해야 한다. 

 

지금까지 MSA가 무엇인지 간단히 알아보았다.
모든 기술은 장점과 단점이 명확하게 구분되어져 있다.
즉 정답과 오답이 있는 것이 아니라는 말이다.
내가 지금 구현하고자 하는 시스템과 어울리는 최적의 환경을 구성하고 서비스를 만들면 된다.

관련글 더보기

댓글 영역