마이크로 서비스에서 API Gateway
마이크로 서비스 아키텍처에서 클라이언트는 하나 이상의 서비스와 상호 작용할 수 있다. 이 상황에서 클라이언트는 어떻게 호출할 엔드포인트를 알 수 있을까? 새로운 서비스가 도입되거나 기존 서비스가 리팩토링이 되면 어떻게 될까? 서비스는 SSL 종료, 인증 및 기타 문제를 어떻게 처리할까? API 게이트웨이는 이런 문제를 해결하는데 도움이 될 수 있다.
1. API 게이트웨이 ?
- 클라이언트 코드가 복잡해질 수 있다. 클라이언트는 여러 엔드포인트를 추적해야 하고 실패를 처리해야 한다.
- 클라이언트와 백엔드 사이의 연결을 생성한다. 클라이언트는 개별 서비스가 어떻게 분리되는지 알아야 한다. 그러면 클라이언트를 유지하기 더 어려워지고 서비스를 리팩토링하기도 더 어려워진다.
- 단일 작업에 여러 서비스에 대한 호출이 필요할 수 있다. 이로 인해 클라이언트와 서비스간 여러 네트워크 왕복이 발생을 야기하고 상당한 대기시간이 소요될 수 있다.
- 모든 클라이언트와 직면한 서비스는 인증, SSL 및 클라이언트 속도 제한과 같은 문제를 처리해야 한다.
- 서비스는 HTTP 또는 WebSocket과 같은 클라이언트 친화적인 프로토콜을 노출해야 한다. 이것은 통신 프로토콜 선택을 제한한다.
- 공용 엔드포인트가 있는 서비스는 잠재적인 대상이므로 강화해야 한다.
게이트웨이는 서비스에서 클라이언트를 분리하여 이러한 문제를 해결하는데 도움이 된다. 게이트웨이는 다양한 기능을 수행할 수 있으며 모든 기능을 사용할 필요도 없다. 기능은 아래와 같은 디자인 페턴으로 그룹화할 수 있다.
게이트웨이 라우팅(Gateway Routing)
레이어 7계층 라우팅(layer 7 rounting) 에서 게이트웨이를 reverse proxy로 사용하여 요청을 하나 이상의 백엔드 서비스로 라우팅한다. 게이트웨이틑 클라이언트에게 하나의 엔드포인트를 제공하고 서비스에서 클라이언트를 분리하는데 도움이 된다.
게이트웨이 집계(Gateway Aggregation)
게이트웨이를 사용하여 여러 개별 요청을 단일 요청으로 집계한다. 이 패턴은 단일 작업에 여러 백엔드 서비스에 대한 호출이 필요한 경우 적용된다. 클라이언트는 게이트웨이로 하나의 요청을 보낸다. 게이트웨이는 다양한 백엔드 서비스로 요청을 발송한 다음 결과를 집계하여 클리언트로 다시 보낸다. 이는 클라이언트와 백엔드 간 잦은 통신을 줄이는데 도움이 된다.
게이트웨이 오프로딩(Gateway Offloading)
게이트웨이를 사용하여 개별 서비스에서 게이트웨이로, 특히 교차 문제를 오프로드 한다. 이런 기능을 사용하는 모든 서비스에서 각자 만드는 것 보다 한 장소에서 통합적으로 구현하는 것이 유용하다. 이는 인증 및 권한 부여와 같이 올바르게 구현하기 위해 전문 기술이 필요한 기능에서 특히 해당된다. 다음은 게이트웨이로 오프로드할 수 있는 기능의 몇 가지 예시다.
- SSL termination
- Authentication IP allow/block list
- Client rate limiting (throttling)
- Logging and Monitoring
- Response caching
- Web application firewall
- GZIP compression
- Servicing static content
2. 게이트웨이 기술 종류
다음은 애플리케이션에서 API 게이트웨이를 구현하기 위한 몇 가지 옵션이다.
reverse proxy server
Nginx 및 HAProxy는 로드 밸런싱, SSL 및 레이어 7 라우팅과 같은 기능을 지원하는 완전 유명한 reverse proxy 서버 이다. 둘 다 무료 오픈 소스 제품이며 추가 기능과 지원 옵션을 제공하는 유료 버전이 있다. Nginx와 HAProxy는 모두 풍부한 기능과 고성능을 갖춘 성숙한 제품이다. 타사 모듈을 사용하거 Lua에서 사용자 정의 스크립트를 작성하여 확장할 수 있다. Nginx는 NGINX JavaScript라고 하는 Javascript 기반 스크립팅 모듈도 지원한다. 이 모듈의 공식 이름은 nginScript 이다.
서비스 메시 수신 컨트롤러(Service mesh ingress controller)
linkerd 또는 Istio와 같은 서비스 메시를 사용하는 경우 해당 서비스 메시에 대해 수신 컨트롤러에서 제공하는 기능을 고려한다. 예를 들어 Istio 수신 컨트롤러는 계층 7 라우팅, HTTP 리다이렉트, 재시도 및 기타 기능을 지원한다.
'Develop > Network' 카테고리의 다른 글
String contains non ISO-8859-1 code point. (0) | 2022.09.15 |
---|---|
[ssh] permissions 0644 for are too open (0) | 2022.03.04 |
[network] 네트워크 클래스, 서브넷, 서브넷 마스크, 서브넷팅 (0) | 2021.12.25 |
[nginx] nginx ssl 적용 방법 기록 (0) | 2021.10.09 |
[network] CSRF ? 🤔 (0) | 2021.09.28 |
댓글