MSA로 배포한다면 서비스마다 API를 갖고 있어 어떤 종류의 API를 클라이언트에 표출해야 할지 결정해야한다.
클라이언트가 서비스를 직접 호출하도록 API를 설계하면 다음과 같은 이슈가 있다.
모바일이 아닌 다른 클라리언트에도 이슈가 존재한다.
서비스에 직접 호출하면 문제 많아서 API 게이트웨이를 사용하는게 훨씬 낫다.
Facade 패턴과 유사
nginx처럼 리버스 프록시와 같음, 요청이 들어오면 라우팅 맵을 찾아보고 어느 서비스로 요청을 보낼지 결정
요청 한 번으로 필요한 데이터 조회가능하도록 대단위 API 제공
외부 REST API <-> 내부 gRPC API 변환
모바일/웹에 맞게 적합한 API 제공하도록 함
인증/인가, 사용량 제한, 캐싱, 지표 수집, 요청 로깅 등 엣지 기능도 가능
전용 엣지 서비스를 사용할 수 있지만, 인증 같은 엣지 기능은 API 게이트웨이에 구현하는게 간편하고 좋다.
API 계층 + 공통 계층
각 클라이언트 종류마다 API 게이트웨이 따로 구현
API 모듈이 서로 격리되어 신뢰성이 향상된다라는 장점 존재
성능과 확장성
리액티브 프로그래밍 추상체를 이용해 관리 가능한 코드 작성
부분 실패 처리
애플리케이션 아키텍처에서 선량한 시민 되기