API Gateway 없이 client가 직접적으로 MicroService의 EndPoint를 호출하는 상황
등의 상황 발생시
MicroService는 각각 독립적으로 빌드되고 배포가 가능하나,
Client가 EndPoint를 직접 호출하므로, Client의 서비스 호출부분도 함께 변경이 이루어져야함
API Gateway를 통해서 MicroService의 이름으로 호출하는 상황
각각의 MicroService를 필요로 하는 요청을 APIGateway를 통함
클라이언트는 Gateway의 내부구현에 관심을 갖지 않고
단순히 필요로하는 서비스만 요청하면 됨.
API Gateway
클라이언트의 엔드포인트 호출하는 작업을 대신해주는 프록시 역할을 수행
- 1. 시스템의 내부구조는 숨기고 외부의 요청에 대해서 적절히 가공하여 응답이 가능
- 2. 인증/인가 및 IP허용 목록관리
각 MicroService에서 매번 인증,인가 절차를 거치지 않고, APIGateway를 통해 일괄적인 처리가 가능- 3. 서비스 검색 통합
- 4. 응답 캐싱
- 5. 정책, 회로 차단기 및 Qos 다시 시도
일괄적인 정책, 특정 MicroService에서 문제 발생시 처리가 가능- 6. 속도 제한
- 7. 부하 분산
scailing을 통해 인스턴스를 유동적으로 관리하고,
요청을 수행할 인스턴스를 적절히 선택- 8. 로깅, 추적, 상관관계 파악
로깅은 application 전반에 걸친 공통적인 요소로, 일괄적인 작업을 수행.
또한 한개의 서비스가 다른 서비스를 요청하는 경우에 APIGateway를 통하므로 추적 및 상관관계를 파악하는데 용이- 9. 헤더, 쿼리 문자열 및 청구 변환
RestTemplate, FeignClient
각 서비스는 RestTemplate와 Feign Client 등을 이용해서 편리하게 통신이 가능함.
그러나
LoadBalancing을 하기 위해 LoadBalancer를 어느 Service에 구축해서 작업해야 하는지에 대한 고민
SpringCloud는 이러한 LoadBalancer 역할을 해주는 별도의 서비스를 위해 Ribbon 이라는 서비스를 제공.
Ribbon :
ClientSide LoadBalancer
- 다른 서비스와 마찬가지로 Netflix가 Spring제단에 기부한 기술
- 클라이언트에서 IP주소, port가 아닌 서비스의 이름으로 호출
- HealthCheck라는 기능을 통해 클라이언트 측에서 호출하는 서비스가 정상적으로 동작하는지 파악 가능
- 단점
- 비동기 통신에 대한 지원이 부족하여 SPA환경에선 적합하지 않음
- SpringBoot 2.4에서 Maintenance 상태