CS 공부

MSA란?

까루카라 2024. 1. 26. 22:43

인턴 공고를 찾아보다가 MSA에 대한 이해가 있는 사람 이라는 항목이 있길래 궁금해서 찾아보고 정리함

 

https://wooaoe.tistory.com/57

 

[MSA] MSA란 무엇인가? 개념 이해하기

MSA가 무엇인지 자세하게 알고싶어 개인적으로 정리하는 포스팅입니다. MSA? MicroService Architecture의 줄임말 👉🏻 마이크로서비스 아키텍처에 대한 정확한 정의는 없다. 하지만 마이크로서비스란

wooaoe.tistory.com

 

MicroService Architecture (MSA)

: 작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크 (정확한 정의는 없다)

즉, 마이크로서비스는 완전히 독립적으로 배포가 가능하고, 각각의 기술 스택이 사용 가능한 단일 사업 영역에 초점을 둔다. 

 

MSA와 Monolithic의 비교

Monolithic Architecture

: 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태

 

웹 개발을 예로 들면, 웹 프로그램을 개발하기 위해 모듈별로 개발을 하고, 개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포되는 형태. 이런 어플리케이션을 모놀리식 어플리케이션이라고 하며 웹의 경우 WAR 파일로 빌드되어 WAS에 배포하는 형태를 말한다. 주로 소규모 프로젝트에서 사용된다. 

 

 

일정 규모 이상의 서비스나 수백명 이상의 개발자가 투입되는 프로젝트에서

Monolithic Architecture의 한계

 

1. 부분 장애가 전체 서비스의 장애로 확대될 수 있다. 

: 개발자의 잘못된 코드 배포, 갑작스런 트래픽 증가 등으로 인해 성능에 문제가 생겼을 때, 서비스 전체의 장애로 확대될 수 있다.

 

2. 부분적인 Scale-out(여러 server로 나누어 일을 처리하는 방식)이 어렵다. 

: 사용되지 않는 다른 모든 서비스가 Scale-out 되어야 하기 때문에 부분 Scale-out이 어렵다.

 

3. 서비스의 변경이 어렵고, 수정 시 장애의 영향 파악이 어렵다. 

: 여러 컴포넌트가 하나의 서비스에 강하게 결합되어 있기 때문에 수정에 대한 영향도 파악이 힘들다. 

 

4. 배포 시간이 오래 걸린다. 

: 최근 어플리케이션 개발 방법은 CI/CD를 통한 개발부터 배포까지 빠르게 반영하는 추세이다. 그러나 규모가 커지면 테스트 비용이 증가하거나, 많은 사람이 하나의 시스템을 개발하여 배포하기 때문에 배포까지 걸리는 시간이 증가할 수 있다. 

 

5. 한 Framework와 언어에 종속적이다. 

: Spring Framework을 사용할 경우, Blockchain 연동 모듈을 추가할 때 node.js를 사용하는 것이 보편적이나 java를 이용해야 하기 때문에 Monolithic Architecture에서는 두 프레임워크를 함께 사용할 수 없다. 

 

 

이러한 문제점들을 보완하기 위해 MSA가 등장. 특정 물리적 서버에 서버를 올리던 on-promise 서버 기반의 Monolithic Architecture에서 이제는 클라우드 환경을 이용하여 서버를 구성하는 MicroService Architecture로 많은 서비스들이 전환되고 있다. 

 

 

MSA 의 특징

MSA는 API를 통해서만 상호작용할 수 있다. 즉, 서비스의 end-point를 API 형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화. 내부의 구현 로직, 아키텍처, 프로그래밍 언어, 데이터베이스, 품질 유지 체계와 같은 기술적 사항은 서비스 API에 의해 철저하게 가려진다. 

 

따라서, SOA(Service Oriented Architecture)의 특징을 가진다. 

 

SOA
대규모 컴퓨터 시스템을 구축할 때의 개념. 
업무상 일 처리에 해당하는 SW 기능을 서비스로 판단하고 그 서비스를 네트워크상에 연동하여 시스템 전체를 구축해가는 방법론
업무 처리 변화를 시스템에 빠르게 반영하고자 하는 수요에 대응하기 적합

 

1. 제대로 설계된 마이크로서비스는 하나의 비즈니스 범위에 맞춰 하나의 기능만 수행한다. 

2. 여러 어플리케이션에서 재사용할 수 있어야 한다. 

3. 기술 중립적 프로토콜을 사용해 통신하므로 서비스 구현 기술과 무관하다. 따라서 다양한 언어와 기술로 구축 가능하다. 

4. 단, 마이크로 서비스는 SOA에서 사용되는 집중화된 관리 체계를 사용하지 않는다. 

5.  EBS와 같은 무거운 제품이 아니라 REST 등 가벼운 통신 아키텍처나 Kafka 등을 이용한 message stream을 주로 사용한다. 

 

 

MSA 장점

1. 각각의 서비스는 모듈화가 되어있으며 RPC 또는 message-driven API 등을 통해 모듈 간 통신함으로써 개별 서비스의 개발 속도를 높이고, 유지보수성을 높인다. 

 

2. 팀 단위로 적절한 수준에서 기술 스택을 다르게 가져갈 수 있다. ex) Spring과 node.js 블록체인 개발 모듈을 연동함에 무리가 없다. 

 

3. 서비스별로 독립적 배포가 가능하다. 지속적인 배포(CD)도 상대적으로 가볍게 가능하다. 

 

 

MSA 단점

1. 모놀리식에 비해 상대적으로 복잡하다. 서비스가 모두 분산되어 있기 때문에 개발자는 내부 시스템의 통신을 어떻게 가져가야 할지 결정해야 한다. 또한, 통신 장애나 서버 부하 등의 문제 발생 시 어떻게 transaction을 유지할 지 결정하고 구현해야 한다. 

 

2. 단일 transaction만 유지했던 모놀리식과는 다르게 MSA에서는 비즈니스에 따라 DB를 가지고 있는 서비스가 다르고, 서비스 연결을 위해 통신이 요구되기 때문에 transaction을 유지하기 어렵다. 

 

3. 통합 테스트가 어렵다. 개발 환경과 실제 운영환경을 동일하게 가져가는 것이 쉽지 않다. 

 

4. 실제 운영환경에 대해서 배포하는 것이 쉽지 않다. 마이크로서비스의 경우 서비스 1개를 재배포 한다고 하면 다른 서비스들과의 연계가 정상적으로 이루어지고 있는지도 고려해야 한다.