MSA는 MicroService Architecture의 줄임말로
작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스들로 구성된 프레임워크입니다.
// 여러 개의 서비스를 조합하여 애플리케이션을 구현하는 방식으로 서비스마다 자체 데이터베이스를 가지고 동작하기 때문에 개발부터 빌드, 배포까지 효율적으로 수행할 수 있습니다.//
msa의 예로
가장간단하게는 예전에는 모노리틱 방식으로 프론트와 벡엔드를 물리적으로 한곳에 위치해 두어, 데이터베이스도 한곳에 위치에 두어 , 한곳에서 소스관리까지 합니다. 이럴 경우 만약에 회원관리부분을 고쳤는데 결제부분이 에러 나거나 , 내가 jsp를 고쳤는데 사이트 전체가 돌아가는 않는 등의 이슈로 불편함을 겪으며
그렇게 등장한게 MSA(마이크로서비스아키텍쳐) 으로서 프론트는 S3에 , 벡엔드는 ec2에 배치되어 물리적으로 다른곳에 배치되는 아키텍쳐입니다.
저희 가는 서비스는 중 AWS가 처음에는 모늘릭틱 방식이었지만 현재는 msa방식으로 변화화여 aws 서비스 내부를 보면 100여개의 서비스를 잘게잘게 분리되어 , 이 서비스를 조합하여 애플리케이션을 구현할수 있는 방식으로 운영하고 있습니다.
애플리케이션 개발 초기에는 전체 소스 코드를 하나의 배포 유닛 (war 또는 ear)으로 내장시키는 'Monolithic' 방식을 사용하였습니다. 하지만 기존 애플리케이션의 사소한 변경사항이 있더라도 자체적인 QA(Quality Assurance) 주기에 따라 업데이트를 하거나 일부 서비스 업데이트로 오류가 발생한 경우 전체 시스템을 중단하고 오류를 해결하는 등의 다운타임이 발생하는 일이 빈번하였습니다. 이러한 문제점을 해결하기 위해 애플리케이션의 핵심 서비스를 분할하는 MicroService Architecture라는 방식이 생겨났으며 각 서비스들을 독립적으로 구축하고 배포할 수 있게 되었습니다.
각 서비스들은 API를 통해 통신하므로 네트워크 통신에 의한 오버헤드 발생
하나의 프로젝트에 수많은 서비스들이 존재하므로 모든 서비스 모니터링 오버헤드 증가
하나의 서비스에서 다른 서비스를 호출하므로 장애 발생 시 경로 및 장애 추적이 힘듦
서비스가 분산되어 있기 때문에 모놀리식에 비해 상대적으로 많이 복잡
Monolithic은 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태이며, 모듈별로 개발을 하고 개발이 완료된 하나의 결과물로 패키징 하여 배포되는 형태를 의미합니다.
참고
https://cocoon1787.tistory.com/746
https://waspro.tistory.com/429