애플리케이션에서 서비스 API를 소비하는 클라이언트 종류(웹,앱,TV등등...)가 많은 경우, 아래와 같은 문제가 생긴다.
- 매번 그 클라이언트를 위한 API를 만들어줘야하고, 여러번 요청해야하는 문제. 뿐만 아니라, 여러번 요청이 LAN이 아닌 경우, 지연이 생길 수 있음
- 클라이언트가 서비스 및 API를 알아야하는 구조라서 캡슐화가 되지않고, 나중에 아키텍처와 API를 바꾸기 어렵다. (기존 API를 삭제하기 어려운 구조)
- 클라이언트가 사용하기 불편한 API일 수 있음 (프로토콜을 내부에서는 AMQP를 사용하지만, 모바일 클라이언트는 소비하기 어려울 수 있음)
API 게이트웨이 패턴
API 게이트웨이 : 애플리케이션에 API 요청을 하는 단일 창구.
API 게이트웨이 구현
- AWS API Gateway의 사용 (API 조합이 필요없는 경우)
- 콩 (엔진엑스 HTTP 서버
- 트래픽(Traefik) (Go언어 기반 API Gateway)
- 넷플릭스 주울
- 스프링 클라우드 게이트웨이
- GraphQL
- 매번 구현을 하지 않아도 되고, 클라이언트가 반환 데이터를 제어 가능.
- graphQL 스키마 필드에 리졸버함수를 붙여 활용
- 서버쪽 배칭/캐싱을 통한 성능향상