그래서 MSA가 무엇인가요? (특징과 장단점 모두 명확히 알고 써라)
https://youtu.be/wVpOboIlZ5I?list=LL
어김없이 삼성SDS의 MSA 시리즈를 보면서 공부하고 정리해보는 포스팅
마이크로서비스란.
애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 소프트웨어 아키텍처 스타일 (위키백과)
여기서 느슨한 결합이란,
각 서비스들이 독립적으로 실행되고 서로 통신을 하지만,
문제가 생겼을 때 서로 크게 영향을 받지 않는 유연한 서비스 구조.
시스템 아키텍처 = 소프트웨어 설계 구조 (주로 모놀리식 / MSA 대비된다)
모놀리식 아키텍처
구조가 간단하고 비교적 빠른 설계가 가능하다는 장점이 있지만,
클라우드의 빠른 확장성과 유연한 인프라 환경구조에는 부적합.
모놀리식 장점:
- 개발이 상대적으로 간단한 편.
- 흐름 단계별로 설계가 되어서 데이터 정합성을 맞추기 쉽다.
- 구조가 간단해서 전체 아키텍처 설계가 빠르다.
모놀리식 단점:
- 서비스가 커질수록 장점보다는 단점이 많아지는 구조.
- 여러 기능이 추가되면 소스코드가 복잡하고 길어져서 초기 개발자가 아니면 이해하기 어렵다.
- 새로운 기능이 추가되면 테스트 시간도 오래 걸린다는 것.
- 새로운 기술이 나와도 기존 코드가 동작하던 환경을 유지해야 해서 쉽게 적용할 수 없다.
마이크로서비스 아키텍처
MSA 장점 (독립성, 효율성, 적용성, 신속성 -> 클라우드 핵심 아키텍처로 자리 잡는 추세)
- 종속성이 낮아서 고려해야할 사항이 적다
- 다른 서비스를 신경쓰지 않고 독립적으로 배포할 수 있어서 좋다.
- 각 서비스는 느슨하게 결합되어 있기 때문에 한 서비스 장애가 전체 시스템 장애로 전파되지 않다는 게 가장 큰 장점.
- 새로운 기술을 적용하고 싶으면 언제든지 개별 서비스 단위로 적용 가능.
MSA 단점:
- 구조가 복잡해서 관리하기가 어렵다.
- 서비스 통신이 복잡하다.
- 데이터 정합성을 확보하기가 어렵다.
아키텍처에 따른 팀 구성의 차이
MSA는 기술에 영향에만 국한된 내용이 아니다.
모놀리식 아키텍처는
전체 서비스에 대해 모두가 자세히 알고 있어야 하기 때문에
서비스가 증가할수록 각 팀에서 이해해야 하는 범위가 기하급수적으로 상승.
각 단계별 서비스에 새로운 기술을 적용할 경우,
각 팀의 설정 변경이 달라 업그레이드 하기가 어려움/
(새롭게 도입하려는 기능에서 요구하는 텐서플로우 버전이 기존 것과 안 맞는다거나)
ex) 새로운 웹 표준 기술 적용 시 UX팀, 인프라팀, 개발팀 각 팀의 설정 변경이 달라 업그레이드 하기 어렵다.
MSA는
서비스별로 팀을 나눠 독자적으로 설계, 개발 운영을 하기 때문에 다른 팀에 대한 의존성이 줄어듦.
- 역할 별로 요청 및 피드백 반영 속도 증가.
- 유연하고 지속적인 운영 및 개발 가능.
- 그러나 인력 리소스 관리에 어려움이 있다.
각 역할 담당자는 기본적인 업무 성숙도가 필요하고, 개발자에게 인프라 관리 역량 요구 (원래는 운영팀 역할)
-> 그러나 클라우드 환경에서 개발하면 직접적인 물리 인프라 운영 없이 환경 설정 가능하다.
각 기능이 느슨한 결합을 가지면서 독립적인 개발 환경에서 상호 의존 없이 단일 목적 기능을 수행하도록 설계.
전체 서비스를 유연라고 빠르게 개발하고, 독립적으로 실행이 가능하다.
주의할 점: 서비스들끼리 통신을 하다가 장애 전파가 발생할 수 있다
(장애 전파: 하나의 서비스에서 발생한 장애가 다른 서비스로 전파)
서비스가 늘어날수록 통신에 많은 에너지가 소요. 관리가 어려워진다.
예를 들어 메시지가 목적지에 도착하기까지 지나치게 오래 걸린다면,
이를 인지하고 다른 경로를 전달해줌으로써 전체적인 서비스가 효율적으로 운영되도록 해준다.
서비스들 앞단에 프록시, 또는 사이드카, 즉 서비스 간의 커뮤니케이션을 담당하는 기능을 추가함으로써
하나의 서비스에서 장애가 발생할 경우
해당 프록시가 다른 서비스에게 장애가 전파되지 않도록 설계할 수 있다.
그리고 최적의 서비스를 찾아서 부하를 분산하므로 전체 서비스가 쾌적하게 운영되도록 도와준다.
MSA 도입 시 고려사항
1. 이유가 명확해야 한다. (빠른 개발을 위하거나, 유지보수성이 좋다는 이유가 명확해야 한다.)
다른 기업들을 따라서 도입하는 것은 매우 위험.
한두개의 이유가 아닌 명확한 목적성을 가지고 MSA로 전환해야 한다.
장점만 고려하지 않고 MSA의 특성을 제대로 이해하여 여러 방면에서 고려.
2. 기술만의 관점에서 바라보지 않아야 한다.
아키텍처는 기술만의 영역이 아니라, 조직 구조와 운영의 영역이 함께 포함되어 있다.
모놀리식은 조직/운영/기술이 하나에 집중되어 있는 단순한 구조이기에
서비스 운영이 어렵지 않아 보일 수 있지만,
요구사항에 빠르게 대응하거나 시스템 수정에 다양한 장애물을 마주할 수 있다.
MSA는 이런 모놀리식 구조보다 더욱 복잡하다.
3. 장단점 고려
장점:
1. 비즈니스 요구사항을 빠르게 적용하여 개발 가능
2. 변경 사항을 빠르게 운영 환경에 배포 가능
3. 부분 장애가 전체로 미치지 않아 장애 영향도 최소화
4. 서비스 별로 신기술 적용이 용이
단점:
1. 다양한 신기술에 대한 학습 및 관리가 필요함
2. 테스트가 복잡하고 운영 복잡도도 커짐
3. 서비스간 트랜잭션이 보장되지 않아 실패에 대한 데이터 정합성 보장을 직접 관리 필요
4. API, 서비스 메시, 변화 관리, 데브옵스, 로드밸런싱, 이벤트처리, 로그 관리 등에 대한 명확한 이해 필요