** 아래 글은 개인의 조사를 바탕으로 주관적으로 작성되었습니다. 잘못된 부분은 댓글로 남겨주시면 수정하겠습니다.
MSA (Micro Service Architecture) ?
DevOps를 공부하면서 MSA라는 단어를 많이 듣게 되었다.
처음 단어를 들었을 때는 별로 깊게 생각하지 않았었기 때문에 (다시 생각해보면 조금 부끄럽지만) AWS와 GCP와 같은 클라우드 플랫폼을 말하는 거라고 생각했었다. 하지만 우연히 다시 검색해본 MSA의 설명은 충격적이었다.
MSA : Micro Service Architecture
기존의 MA(Monorithic Architecture)는 모든 모듈이 하나의 서비스 내에 종속되어 있다.
이런 구조는 프로젝트의 개발과 빌드, 배포 등의 작업에 장점이 있지만, 만약 출시된 프로그램에 새로운 기능이 추가된다면 해당 모듈 하나를 적용하기 위해 모든 서비스를 다시 빌드하고, 배포해야 한다.
또한 추가된 기능이 기존의 프로젝트 구조와 맞지 않다면, 하나의 기능을 추가하기 위해 프로젝트 전체를 뜯어 고쳐야할 수 도 있다.
하지만 MSA는 각 기능을 독립적으로 분리하여 (단일 컴포넌트) 여러 서비스의 조합으로 하나의 시스템을 구축하며 각각의 서비스가 의존적이지 않기 때문에(API 기반) 변경이 필요한 하나의 모듈만을 수정 후 배포할 수 있다. 또한 이런 특성으로인해 각 서비스의 확장도 간단하다.
MSA에서의 조직 구조와 단점
기존의 개발 조직 구조는 기능(또는 소프트웨어 생명주기의 단계)과 역할을 기준으로 기획, 개발, 운영 등의 팀을 나누어 하나의 시스템을 이루었다. 이러한 방식은 인력관리와 운영 등의 관점에서는 효율적이지만, 각 조직간의 커뮤니케이션과 협업을 통한 생산성과 변화에 대한 대응 등의 관점에서는 비효율적이었다.
MSA에서의 조직 구조는 각각의 팀이 하나의 서비스를 맡는다.
각 팀은 서로간의 의존성이 적기때문에 각 서비스의 확장, 변경등의 지속적인 개발과 유연한 운영이 가능하고 요청에 대한 피드백이 빨라진다. 하지만 MSA에도 단점이 많다.
우선 MSA 자체는 여러 독립적인 서비스가 이루어져 하나의 시스템을 원활하게 운영해야 하기 때문에 최대한 방어적인 코딩이 필요하고 각 서비스마다 DB가 존재할 경우 분리된 DB들 간의 트랜젝션과 데이터의 동기화 문제가 존재하며 각 서비스가 도메인과 API를 기반으로 통신하기 때문에 인터페이스의 개발에도 신경을 써야한다. 또한 통합 테스트와 배포가 어려울 수 있다. 조직의 관점에서도 인력을 관리하기 어려워지고, 개발자들은 인프라에 대한 운영과 각 서비스에 대한 테스트도 진행해야한다.
팀원 개개인의 숙련도가 중요해질 수 밖에 없는 구조이다.
MSA 단점의 보완
MSA에서의 단점인 분리된 여러 DB 문제와 통합테스트, 배포에 대한 부분은 AWS, GCP와 같은 클라우드 서비스와 쿠버네티스가 등장하면서 많은 부분이 상쇄되었다.
쿠버네티스에서는 pod의 형태로 각 컴포넌트, 서비스들을 관리하며 배포와 테스트 자동화를 구축할 수도 있다.
또한 각 서비스 간의 (인그레스를 통한 도메인 중심의) 통신을 지원하기 때문에 DB와 데이터를 하나의 pod 형태로 관리할 수 있다.
그 결과로 결합도가 낮아져 설계 구조의 변경도 비교적 쉬워졌고 변화에 대한 대응과 확장도 용이해졌으며 그 외의 다양한 단점들도 많은 부분이 상쇄되었다.
팀원 개개인의 숙련도만 충분하다면 기업 입장에서는 MSA를 선택하지 않을 이유가 없다고 생각한다.
참고 링크
- http://clipsoft.co.kr/wp/blog/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98msa-%EA%B0%9C%EB%85%90/
- https://www.samsungsds.com/kr/insights/msa_architecture_edm.html
- https://suzyalrahala.tistory.com/49
'Computer Science > 소프트웨어 공학' 카테고리의 다른 글
[SE] SDLC (Software Development Life Cycle) (0) | 2022.09.12 |
---|---|
[SE] XP (eXtreme Programming) (2) | 2022.07.10 |
[SE] DevOps (0) | 2022.04.12 |
댓글