MSA(Microservice Architecture)
백앤드 개발자라면 최근 MSA 방법론에 대해 굉장히 많이 들어봤을 것이라 생각합니다. 최근 개발 프로젝트에서 가장 핫한 방법론이며, 특히 백앤드 개발에서 많이 사용되는 방법론 입니다.
MSA 란 Microservice Architecture의 약자로 말 그대로 작은 서비스 구조 입니다. 마이크로서비스란 작고 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스를 의미하며, 하나의 프로젝트 안에서도 각가의 마이크로서비스를 독립적으로 개발/테스트하고 배포가 가능 한 구조라고 볼 수 있습니다.
예를들어 쇼핑몰 웹서비스를 개발한다고 가정해 봤을때 클라이언트 관점에서는 그냥 하나의 웹 서비스 이지만, 회원가입/로그인, 구매, 카테고리별 쇼핑 기능, 결재, 최소/환불 이런 서비스의 기능을 각자 독립적으로 개발하여 배포 하여 하나의 서비스로 합치는 과정을 MSA라 볼 수 있습니다.
MSA의 등장배경
일반적으로 기존의 애플리케이션 서비스 개발은 대부분 monolithic architecture로 구성되어 있습니다. monolithic architecture 란 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태를 의미합니다. 이것을 웹개발로 예를 들면 웹 서비스에 필요하 각각의 모듈을 결국 하나의 결과물로 패키징하여 배포한 것을 의미합니다.
하지만 이런 한 구조는 프로그램의 사이즈가 점점 커지고, 하나의 웹 서비스상에서도 여러 가지의 기술 스텍이 필요해짐에 따라 한계를 보였습니다. 몇가지 한계점을 알아보자면
- 모듈 하나의 오류가 서비스 전체 장애를 초래할 수 있음
- 한 Framework & 언어에 종속적이다
- 단순한 모듈의 기능 수정에도 서비스 전체를 재기동 하는 경우가 만들어짐
이러한 한계점들을 보완하기 위해 애플리케이션 각 모듈들을 독립적으로 관리할 수 있는 구조를 개발자들은 고안했고, 그 결과 만들어진 방법론이 MSA 입니다.
MSA의 특징
MSA는 각각의 모듈들이 하나의 서비스 처럼 보이지만 실제로는 독립된 서비스로 구성이 되어 있습니다. MSA는 에서는 각각의 모듈이 하나의 서비스 처럼 동작하기 위해 API를 통해 서로 상호작용하는 구조를 권장합니다. 특징을 살펴보면 아래와 같습니다
- 애플리케이션을 모듈 단위로 분해하여 구상하며 필요시 이들을 조합한 솔루션을 제공한다
- 각 컴포넌트는 완전히 상호 독립적으로 배포한다
- 경량화된 통신 프로토콜을 사용한다
- 마이크로서비스는 다양한 언어, 기술로 구축이 가능하다
MSA의 장단점
장점
- 각각의 서비스가 독립적이기 때문에 개발,유지보수가 용이 하며 빠른 개발이 가능하다
- 팀 단위로 필요한 기술 스택을 달리 가져갈 수 있다
- 각각의 마이크로서비스 부하에 따라 scale-out이 가능하며 메모리/CPU의 활용도를 극대화 할 수 있다
단점
- monolithic 방식에 비해 상대적으로 복잡하다
- 통합테스트 단계에서의 어려움이 있다.