-
API 게이트웨이(Gateway)란?MSA & 쿠버네티스(Kubernetes) - k8s 2022. 3. 14. 01:05
API 게이트웨이(Gateway)란?
API란?
Application Programming Interface의 약자로 컴퓨터나 컴퓨터 프로그램 사이의 연결을 제공합니다.
게이트웨이란?
컴퓨터 네트워크에서 서로 다른 통신망, 프로토콜을 사용하는 네트워크 간의 통신을 가능하게 하는 컴퓨터나 소프트웨어를 두루 일컫는 용어
Microservice Architecture(이하 MSA)에서 언급되는 컴포넌트 중 하나이며, 모든 클라이언트 요청에 대한 end point를 통합하는 서버입니다.
서비스로 전달되는 모든 API요청의 관문역할을 하는 서버로 시스템의 아키텍처를 내부로 숨기고 외부의 요청에 대한 응답만을 적절하게 합니다.
클라이언트는 서버의 구조가 Monolithic Archiecture인지 Microservice Archiecture인지 알 필요 없이 서로 약속한 형태의 API요청만을 서버로 보내면 됩니다.
마치 프록시 서버처럼 동작하며 인증 및 권한, 모니터링, logging 등 추가적인 기능이 존재합니다.
API 게이트웨이가 필요한 이유
모든 비즈니스 로직이 하나의 서버에 존재하는 Monolithic Architecture와 달리 MSA는 도메인별 데이터를 저장하고 도메인별로 하나 이상의 서버가 따로 존재합니다.
한 서비스에 한 개 이상의 서버가 존재하기 때문에 이 서비스를 이용하는 클라이언트 입장에서는 다수의 end point가 생기게 되며 end point에 변경이 일어났을 때 관리하기 힘듭니다.
따라서 MSA 환경에서 서비스에 대한 도메인을 하나로 통합할 수 있는 API 게이트웨이가 필요합니다.
API 게이트웨이의 장점
- 클라이언트의 요청을 일괄적으로 처리
- 전체 시스템의 부하를 분산시키는 로드 밸런서의 역할 수행
- 동일한 요청에 대한 불필요한 반복작업을 줄일 수 있는 캐싱
- 시스템상을 오고가는 요청과 응답에 대한 모니터링
- 시스템 내부에 아키텍처를 숨길 수 있음
어떤 API 게이트웨이들이 존재할까요?
Spring Cloud Gateway
KONG
Netflix Zuul
이외에도 다양한 오픈소스 API 게이트 웨이들이 존재합니다.
Circuit breaker란?
MSA 아키텍쳐의 장점은 여러 개의 서비스를 나누어 하나의 서비스가 장애가 나더라도 나머지 서비스들은 동작하도록 합니다.
하지만 장애가 난 컴포넌트를 호출해야하는 컴포넌트가 존재한다면 해당 컴포넌트까지 장애가 전파됩니다.
예를 들어 결제 컴포넌트가 주문 컴포넌트를 조회해야 하는데 주문 컴포넌트에 장애가 발생했다면 결제 컴포넌트까지 장애가 전파됩니다.
이러한 문제를 해결하기 위한 디자인 패턴을 Circuit breaker라고 합니다.
Service A와 Service B 사이에 Circuit breaker를 설치합니다.
Service B로의 모든 호출은 Circuit breaker를 통하게 되고 Service B가 정상적인 상황에서는 트래픽을 문제없이 전달합니다.
하지만 B에 문제가 생기게 된다면 Circuit breaker는 이를 감지하고 Service B로의 호출을 강제로 끊어 Service A에서 더 이상 요청을 기다리지 않도록 하여 장애가 전파하는 것을 방지합니다.
대표적인 예시로 넷플릭스의 Hystrix 라이브러리가 존재합니다.
출처
https://tommypagy.tistory.com/143
https://techblog.woowahan.com/2523/
https://ko.linux-console.net/?p=405
'MSA & 쿠버네티스(Kubernetes) - k8s' 카테고리의 다른 글
Message System이란? (0) 2022.03.18 서비스 메시(Service Mesh)란? + API Gateway와 차이점 (0) 2022.03.17 프록시 서버란? (0) 2022.03.13 MSA 아키텍쳐란? (0) 2022.03.05 쿠버네티스(Kubernetes,k8s)란? (0) 2022.03.02