MSA?
개발자들은 뭐든지 분리하는 것을 선호합니다. 잡동사니들이 쌓여있는 방에서 필요한 물건을 찾는건 어렵죠? 같은 논리로 하나의 파일에 모든 기능이 담겨있으면, 프로그램이 작동하다가 실패할 경우 어떤 곳에서 bug가 발생했는지 디버깅을 따로 해야 하는 작업이 부담스러워 집니다. 이렇게 복잡하게 짜인 코드를 스파게티 코드 혹은 에일리언 코드라고 합니다.
MSA(Micro Service Architecture)란 작고 독립적으로 배포가능한 수준의 단위로 서비스를 쪼개서 수행되는 아키텍처를 의미합니다. 마이크로서비스는 완전히 독립적이어야 하고 다른 기술 스택들이 사용될 수도 있는 단일 영역으로 구분됩니다.
Monolithic VS Micro
마이크로 서비스의 반대되는 개념은 모놀리식 서비스입니다. 모든 기능이 한 바구니에 담겨있는 아키텍처입니다. 기능별 모듈별로 개발을 진행한 다음 하나의 컨테이너에 담아 배포하는 형태를 의미합니다. 모놀리식 서비스의 한계점은 명확합니다. 이게 마이크로서비스가 탄생하게 된 배경이기도 합니다.
① 부분 장애가 발생할 경우 대처가 어렵습니다.
- 개발자는 단순히 이름만 바꾸는 로직을 작성했는데, 전체 시스템이 무너질 수도 있습니다.
② 만약 우리 서비스에서 로그인에 트래픽이 많이 몰린다고 했을 때 부분적인 기능만 scale-out이 불가능합니다. 따라서 전체 서버를 증설해야 하고 이는 불필요한 비용을 늘리게 됩니다.
③ 서비스의 수정사항이 발생했을 경우 대처가 어렵습니다.
- 모놀리식 서비스는 강한 결합도를 가집니다. 올바른 프로그램은 낮은 결합도(Coupling) 높은 응집도(Cohension)을 보여줘야 합니다.
④ 배포의 민첩성이 떨어집니다.
- 한곳만 수정해서 배포하면 되는데, 전체 서비스 Unit Test+CI/CI 빌드 + 배포의 과정을 모두 거쳐야 합니다. 이는 지속적인 서비스를 운영하는데 있어 상당한 단점으로 작용합니다.
⑤ Stack의 확장성이 떨어집니다.
- 모놀리식 서비스에 적용한 스택을 변경하는 일은 어렵습니다. 기존에 작동하던 코드의 스택도 모두 변경해야 하기 때문입니다.
MSA가 작동하는 방식
MSA는 Restful API를 통해 상호작용하게 됩니다. MSA를 제대로 만들기 위해서는 하나의 메인 기능을 가진 컴포넌트 단위로 배포 단위를 쪼개는 것입니다. 우리가 PPT 만들 때 슬라이드 하나당 하나의 개념만 담으라는 말 들어봤죠?
이와 같이 마이크로 서비스는 각각 개별적이고 세부적인 기능을 담당하는 영역으로 분할되어야 합니다. 또한 마이크로 서비스를 이어주는 연결점은 ESB(Enterprise Service Bus)와 같은 무거운 통신에 의존하지 않고 가벼운 Axios 통신을 사용하게 됩니다.
MSA를 사용하면 좋은 점?
모놀리식 서비스의 단점은 마이크로 서비스의 장점이 됩니다.
🚀️ MSA 장점
① 각 서비스들을 모듈화하여 관리하기 때문에 Single Failure에 대처가 용이합니다.
② 서비스 단위로 배포단위가 쪼개져 있으므로 배포시간이 확연하게 줄어듭니다.
③ 서비스 단위로 자유로운 Scale-out이 가능합니다.
④ 다양한 Stack을 자유롭게 확장하여 사용할 수 있습니다. Login에는 JAVA를 쓰고, User CRUD에는 typescript를 사용할 수 있습니다.
MSA가 장점이 많은 아키텍처인 만큼 단점도 분명히 존재합니다.
🚀️ MSA 단점
① 일단 MSA로 구성하기 위해서는 코드의 복잡도가 올라갑니다.
② 트랜잭션 관리가 어렵습니다. 각 서비스 단위들은 API통신을 하게 되는데, ACID 준수 난이도가 올라갑니다.
SOA란?
SOA(Service Oriented Architecture)란 업무상 일 처리에 해당하는 소프트웨어 기능을 하나의 서비스로 간주해 전체 네트워크를 구성해가는 방식을 의미합니다. 서비스간 결합도를 낮추면서 상호작용이 원할한 소프트웨어를 구축하는 것을 목표로 하고 있습니다.
SOA 에서는 N-tier architecture로 서비스를 구성합니다. 즉 MVC(Model, View, Controller) 템플릿으로 불리는 3 tier 아키텍처를 하나의 서비스에 구현해 독립적인 배포단위를 만들 수 있습니다. SOA는 Micro Service Architecture의 기본 개념이 될 수 있습니다.
'Programming' 카테고리의 다른 글
[회고록] 코드스테이츠 블록체인 파이널 프로젝트 완수 후기 (2) | 2022.09.30 |
---|---|
MongoDB Atlas 백업 하는 방법 (mongodump mongorestore) (0) | 2022.09.29 |
기술 스택 badge (0) | 2022.09.27 |
React 새로고침 방법 3가지 (0) | 2022.09.25 |
React .env 사용법 (0) | 2022.09.25 |
댓글