API Gateway란?
MSA는 여러 개의 프로젝트를 분리한다.
그럼 모든 요청에 대한 동일한 처리를 해야 할 때는 어떻게 해야 할까?
- API의 모든 요청에 대한 로그 파일을 만들고 싶다.
- 모든 요청에 대해 인증 및 권한을 부여하고 싶다.
- 들어온 요청을 적절한 서버에 전달하고 싶다.
위와 같은 문제를 해결하기 위해 등장하는 것이 바로 API Gateway이다.
API Gateway의 동작방식
해당 구조는 Spring Cloud Gateway의 플로우인데, 이는 API Gateway의 한 종류이다.
API Gateway는 하나의 모든 클라이언트의 요청이 하나의 서버로 들어와 해당 서버에서 요청이 정제되거나 조작되어 각자 목적에 맞는 서비스를 찾아가도록 도와준다.
또한 각 서버에서 적절한 로직을 수행한 뒤 발생하는 응답 데이터를 모아 사용자에게 분배해 주는 역할을 한다.
API Gateway의 역할
API Gateway는 대표적으로 다음과 같은 역할을 한다.
- 프록시의 역할과 로드밸런싱
- 인증 서버로서의 기능
- 로깅 서버로서의 기능
동작 과정에서 클라이언트의 모든 요청이 하나의 서버로 전송되므로 해당 서버에서는 인증을 수행하거나 로깅을 수행한다.
또한 해당 구조는 리버스 프록시와 닮아있고 실제로 그 역할을 수행한다. 따라서 로드 밸런싱과 라우팅이 가능하다.
API Gateway의 고려사항
API Gateway는 많은 마이크로서비스들의 요청이 하나의 서버를 향하므로 다음과 같은 고려사항이 존재한다.
- 병목현상
- 네트워크 Latency
병목현상
위의 구조를 본다면 만약 서비스가 100개 존재한다고 해보자.
그럼 API Gateway는 가장 앞단에서 100개의 서비스가 요청될 수 있는 트래픽을 감당해야 한다.
그럼 자연스럽게 병목 현상이 발생할 수 있으면서, 전체적인 서비스의 통신에 문제가 될 수 있다.
그래서 API Gateway는 적절한 Sale-out을 수행하지 않으면 많은 위험이 발생한다.
네트워크 Latency
당연하게 API Gateway는 네트워크를 한 번 더 타게 되어 네트워크 지연 현상이 발생할 수 있다.
이런 문제점들은 적절한 Telemetry 도구를 통해서 확인하고 이 해결 방법에 대해서 많은 고민을 해야 한다.
참고 자료 :
https://cloudificationzone.com/2021/12/04/spring-api-gateway-implementation-with-sample-apps/
https://wonit.tistory.com/489?category=854727