MSA

곽태민·2023년 3월 24일
0

TIL

목록 보기
60/65

개요


회사에서 개발을 할 때 우리의 개발은 MSA로 진행이 된다. 입사 초반에는 MSA가 뭔지, 왜 굳이 이렇게 나눈건지 신경쓸 일 없이 얼른 코드를 짜서 배포하느라 바빴다.

이번에 개발을하고, 서버팀 규모도 커지면서 공통적인 코드가 많아진 느낌이라 오히려 MSA가 독인 거 같아서 어떻게 하면 코드 관리를 잘 할 수 있을지 혼자서 리서치를 해보기로했다. (잘 정리되면 공유하기,,)

MSA?


MSAMicroService Architecture의 줄임말로, MicroService는 애플리케이션을 느슨하게 결합시킨 서비스의 모임을 구조화하는 서비스 지향 아키텍쳐 (SOA) 스타일 중 하나인 개발 기법이다.

SOA는 Service Oriented Architecture의 줄임말로 애플리케이션 구성요소가 통신 프로토콜을 통해서 다른 구성요서에 서비스를 제공하는 아키텍쳐 접근 방식이다.

MSA는 왜 나온거지?


기존에 Monolithic Architecture를 사용하면서 소프트웨어 모든 구성요소들을 한 프로젝트에 통합시킨 서비스로, 현재 회사들의 소프트웨어가 legacy 또는 필요로 인하여 Monolithic 형태로 구현이 되어 있다.

소규모 프로젝트에서 Monolithic 형태는 간단하고, 유지보수가 편하지만 소규모 프로젝트에서 점점 규모가 커지게 되면 Monolithic은 오히려 독이 될 수 있다.

  • Monolithic Architecture 한계
    1. 부분 장애 발생 시 전체 서비스의 장애로 확대.
    2. 전체 시스템 구조 파악 힘듬.
    3. 서비스 변경이 어려우면서, 수정 시 영향도 파악이 힘듬.
    4. 빌드 시간, 테스트 시간, 배포 시간 등 시간이 급증.
    5. 서비스의 특정 부분만 스케일아웃 하기 어려움.

위 토글에 적힌 것과 마찬가지로 Monolithic Architecture의 한계점으로 MSA가 나오게 됐다.

MSA 특징


MSA는 API를 통해서 상호작용을 한다. EndPoint API 형태로 외부에 노출하며, 실질적인 세부 사항은 모두 추상화를 한다.

내부 구현 로직, 아키텍쳐와 프로그래밍 언어, DB, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해서 철저히 가려진다.

제대로 설계된 마이크로 서비스는 어플리케이션 출시처럼 하나의 목표를 가지고 움직이지만, 자기가 개발하는 서비스만 책임을 진다. 또한 여러 애플리케이션에서 재사용이 가능해야한다.

애플리케이션은 항상 기술 중립적 프로토콜을 사용해서 통신하기 때문에 서비스 구현 기술과는 무관하다. 따라서 마이크로서비스 기반의 애플리케이셔을 다양한 언어와 기술로 구축할 수 있는 걸 의미한다.

마이크로 서비스는 SOA처럼 집중화된 관리 체계를 사용하지 않는다. 마이크로 서비스 구현체의 공통적인 특징 중 하나인 ESB(Enterprise Service Bus)와 같은 무거운 제품에 의존하지 않는다.

REST 등 가벼운 통신 아키텍쳐, 또는 Kafka를 이용한 Message Stream을 주로 사용한다.

MSA 장점


  1. 배포
    1. 서비스별 개별 배포가 가능 (배포 시 서비스 중단이 일어나지 않음)
    2. 특정 서비스의 요구사항을 반영하여, 빠르게 배포 가능.
  2. 확장
    1. 특정 서비스에 대환 확장성이 유리하다. (Scale-Out)
    2. 클라우드 기반 서비스 사용에 적합하다.
  3. 장애
    1. 일부 장애가 서비스 전체에 확장될 가능성이 낟음.
    2. 부분적으로 발생하는 장애에 대한 대응이 수월.

MSA 단점


  1. 설계 난이도
    1. MSA는 모놀리식에 비해서 많이 복잡하다. 서비스가 분산되어 있어서 내부 시스템 통신을 어떻게 설계할지 정해야한다.
    2. 통신의 장애와 서버의 부하 등이 발생할 경우 어떻게 트랙잭션을 유지할지 결정하고 구현해야한다.
  2. 성능
    1. 서비스 간 호출 시 API를 사용하므로, 통신 비용이나 Latency에 대해 이슈가 존재한다.
  3. 테스트, 데이터 트랜잭션
    1. 모놀리식에서 단일 트랜잭션을 유지하면 되는데 MSA에서는 비즈니스에 대한 DB를 가지고 있는 서비스도 각기 다르기때문에 서비스 연결을 위해서는 통신이 포함되면서 트랙잭션을 유지하기 어렵다.
    2. 개발 환경과 실제 운영 환경을 동일하게 가져가기 쉽지 않다.
  4. 데이터 관리
    1. 데이터가 여러 서비스에 분산되어 있어서 조회하기 어렵다.
    2. 데이터를 관리하기 어렵다.
profile
Node.js 백엔드 개발자입니다!

0개의 댓글