Intro

최근 들어보면 다들 MSA MSA MSA 하는 것 같다. 도대체 MSA가 뭘까?
강의를 들어보려니, 너무나 가격대가 비쌌다.
다양한 시스템을 각자가 만들어서 합쳐버리는건가? 난 잘 몰랐다.
그러다 우리 회사에서 미팅을 했을 때, 난 호기심이 생겼다.
우리 회사는 MAMSA도 아닌 SOA를 도입하려고 한다.
이 세 아키텍처의 차이점은 무엇이고, 왜 우리는 SOA를 도입하려고 하는가?

SOA(Service Oriented Architecture)

서비스 지향 아키텍처란? 기업의 소프트웨어 인프라인 정보시스템을 공유와 재사용이 가능한 서비스 단위나 컴포넌트 중심으로 구축하는 정보기술 아키텍처이다. ESB(엔터프라이즈 서비스 버스)로 중앙 집권식이다.

장점

  • 비즈니스 민첩성 향상, 시장 출시 속도 개선
    • 요구사항 반영이 수월하고 대응이 신속해진다.
  • 신규 시장에서 레거시 기능을 활용하는 능력
    • 기존 기능을 사용할 수 있고 이를 신규 환경과 시장으로 확장할 수 있다.
  • 하나의 DB를 공유해서 사용할 수 있다.

단점

  • ESB에 연결하기 때문에 단일 장애 지점이 된다.
  • 서비스를 개별적으로 관리하기가 어렵다.
  • 서비스 중 하나에 장애가 발생하면 전체 비즈니스 워크플로가 영향을 받음

MA(Monolithic Architecture)

모놀리식 아키텍처란? 단일 코드 베이스의 애플리케이션이다.

장점

  • 단순성
  • 간편한 배포
  • 보편성
  • 디버깅이 쉬움

단점

  • 큐모가 커지면 유지 보수가 어려움
  • 유연하지 않은 확장성
  • 대큐모 팀 작업이 어려움
  • 기술 사용 제한

간단하다…

MSA(Microservice Architecture)

마이크로서비스 아키텍처란? 아주 작은 단위의 서비스로 소프트웨어를 구성함으로써 민첩하고 유연한 설계하는 것을 목표하는 아키텍처이다.
애플리케이션을 작은 서비스로 분할하고, 각 서비스가 서로 독립적이라 기술 구애를 받지 않아 각각 고유한 데이터베이스를 소유할 수 있다.
따라서 서비스 간의 결합도를 낮추어 변화에 능동적으로 대응할 수 있다.

장점

  • 유연한 확장
  • 독립적인 배포
  • 단일 실패 지점 제거
    • 전체에 영향을 미치는 단일 실패 지점을 제거
  • 전체 서비스 중단 위험 감소
  • 다른 데이터베이스를 소유
  • 다양한 기술 수용 가능
  • 민첩성
    • 다른 곳에 영향을 주지 않고 새로운 것을 추가할 수 있어서, 새 버전을 배포하는 것이 매우 쉽다.

단점

  • 개발 생산성 필요
    • 로컬에서 많은 애플리케이션을 실행할 수 있는 환경을 갖춰야 한다.
  • 디버깅이 어려울 수 있음
    • 디버깅이나 테스트를 하기 위해 둘 이상의 마이크로서비스를 실행해야 할 수 있다.
  • 마이크로서비스 간 통신
    • 동기/비동기 방식의 통신을 고려해야 하며, 복잡성을 증가시킨다.
  • 오류 처리
    • 둘 이상의 마이크로서비스라면, 문제 발생 시 작업을 이전 상태로 되돌릴 수도 있음을 고려
  • 표준화 부족
    • 모든 오류를 모니터링 할 수 있는 중앙 모니터링 체계 필요
  • 오류 식별의 어려움
    • 비동기 통신때가 더욱 어렵다.

MA vs SOA vs MSA

🚀 규모가 작고, CRUD 위주라면 MA!!!
🚀 DB를 하나만 쓰고, 요구사항이 불확실하여 민첩한 대응이 필요하다면 SOA!!
🚀 비즈니스가 성장해 나가는 경우, 요구사항이 명확한 경우 MSA!!

내 마지막 생각👻

참고

#25. 서비스 지향 아키텍처 (SOA : Service-Oriented Architecture) - Twolinecode
모놀리식 vs 마이크로서비스, 어떤 아키텍처를 선택할까? - 주길재