
웹의 본질은 Request과 Response이며
Request와 Response의 주체는 Web Browser와 Web Server다.
주로 사용자가 웹 페이지를 요청할 때 발생한다.
웹 브라우저와 웹 서버의 요청과 반환은 우리가 흔히 아는 FE와 BE간의 소통이다.
FE와 BE사이의 데이터 또는 웹 페이지를 주고 받는다.
웹 서버와 웹 서버간의 요청과 반환에 대한 대표적인 예시는 Open API이다.
브라우저와 서버의 통신은 사용자의 요청에 의해 발생하지만 서버와 서버간의 통신은 사용자의 요청이 아닌, 한 서버가 다른 서버에 데이터를 요청하거나 특정 작업을 요청하는 상황에서 발생한다.
Open API는 여러 웹 서비스가 자신의 데이터를 다른 서버와 공유하거나 외부 서비스에서 데이터를 받아올 수 있도록 만들어져있다.
Monolithic과 MSA는 소프트웨어 시스템을 설계하고 배포하는 주요 방식이다.

Monolithic아키텍처는
이런 아키텍처로 인해
이렇게 단일 이슈가 전체 이슈로 퍼지는 경우를 SPOF(Single Point of Failure 라고 한다.
Scale Out과 Scale Up은 시스템의 성능을 향상시키기 위한 확장 방식으로,
둘 다 시스템을 확장하여 더 많은 트래픽을 처리하거나 더 많은 데이터를 관리할 수 있도록 하는 방법이다.
기존의 서버나 시스템의 성능을 강화하는 방식
여러 대의 서버를 추가하여 시스템을 확장하는 방식
Monolithic 아키텍처에서는
1. 애플리케이션이 하나의 코드베이스에 통합되어 있고,
2. 애플리케이션의 여러 기능이 강하게 결합되어 있다.
3. 애플리케이션 전체를 함께 배포하고 실행해야 하기 때문에
특정 부분을 확장(Scale Out)하거나, 최적화하는 것이 어렵다.
예를 들어, 애플리케이션의 특정 부분만 부하가 높아도 전체 애플리케이션을 복제해야하며 필요한 부분만 확장할 수 없다.
MSA 아키텍처는
Monolithic의 문제점인 SPOF를 극복할 수 있다.또한
SRP(Single Responsibility Principle)을 준수하고따라서
Monolithic의 문제점을 극복할 수 있는 MSA도 문제점을 가지고 있다.
MSA 클라이언트에서 서비스를 직접 호출할 때
이는 Mircroservice가 많아질 수록 문제점이 기하급수적으로 발생한다.
서비스가 많아지면서 수백개의 서버, 수백개의 API가 있을 때
어떤 서버의 어떤 API를 호출할건지에 대한 관리의 복잡성
이런 MSA의 문제점은 API Gateway로 해결할 수 있다.

Swagger를 통한 버전관리를 한다(API 명세)Consumer-Producer의 관점으로 볼 수 있다.