소프트웨어 아키텍처 : 컴포넌트와 컴포넌트와의 관계를 정리한 것
모놀리식 시스템 : 서비스 기능을 하나의 API 컴포넌트에서 처리함
하나의 시스템이 서비스 전체 기능을 처리하도록 설계
하나의 WAS(Web Application Server)에서 모든 기능을 처리
하나의 데이터 저장소 사용
하나의 서버에서 여러 기능을 제공하므로 서비스 기능이 많아지면 복잡해짐
→ 서버와 클라이언트 섞여 있으면 버그 수정 힘들고 충돌 발생
→ 기능이 확장될 수록 더 힘들어질 수 밖에 없다….
→ 로드 벨런서를 이용해서 스케일 아웃(수평적 확장) 처리시에도 기능에 따라 부하가 다를 수도 있으므로 도움이 안될수도 있다..!, 낭비 발생
분산 처리 시스템 : 기능을 분리하여 두개 이상의 API 컴포넌트에서 처리하는 구조
MSA는 분산 처리 시스템 아키텍처중 하나
기능 위주로 나뉜 어플리케이션이 있고, 각각 독립된 데이터 저장소를 사용, 각 서비스 역시 독립적으로 구성됨
ex) 예약, 항공정보, 호텔정보 다 다른 db를 사용한다….
기능과 성격에 맞게 적당한 크기로 분리해야 한다
기능을 연동할 때 API를 통해 데이터 주고받음
→ api가 사용하는 네트워크 프로토콜이 성능 저하의 원인이 될 수 있다 → 가벼워야함
보통은 JSON 형식의 메세지 주고받음, HTTP 기반의 REST-API 가장 많이 사용
gRPC (Google remote proceduere call) 나 Thrift, Avro, Protobuffer 등을 사용
또는 메세징 스트리밍 시스템 Kafka 사용
장점
db 선형 확장이 가능함
RDB는 스케일 아웃이 쉽지않음 ( 분산 저장을 해도 운영이 잘 안됨)
→ 선형 확장이 어려움
시스템 장애에 강하다 ( 회복성이 강함)