MSA

API Gateway 간단 정리

따갓 2022. 10. 19. 02:53

API Gateway의 필요성?

MSA는 큰 서비스를 잘게 쪼개어 개발/운영 하는 아키텍처이다. 하나의 큰 서비스는 수십~수백개의 작은 서비스로 나뉘어지며, 만약 이를 클라이언트에서 서비스를 직접 호출하는 형태라면 다음과 같은 문제점이 생길 수 있다.

  • 각각의 서비스마다 인증/인가 등 공통된 로직을 구현해야하는 번거로움이 발생한다.
  • 수많은 API 호출기록하고 관리하기가 어렵다.
  • 클라이언트에서 여러 마이크로 서비스에 대한 번거로운 호출을 해야한다.
  • 내부의 비즈니스 로직이 드러나게 되어 보안에 취약해진다.

이러한 문제점들은 마이크로 서비스의 갯수가 많아질 수록 기하급수적으로 늘어나게 될 것이다.

✅ API Gateway

 

사용자가 설정한 라우팅의 설정에 따라서 각각의 엔드포인트로 클라이언트를 대신해서 요청하고, 응답을 받으면 다시 클라이언트에게 전달해주는 proxy역할을 한다. 클라이언트 요청의 앞단에 위치한다.

 

시스템의 내부 구조는 숨기고 외부의 요청에 대해서 적절한 형태로 가공해서 응답할 수 있다는 장점을 가지고 있다.

 

🔧 API Gateway의 기능

  1. 인증 및 서비스 권한 부여
  2. 마이크로 서비스 검색 통합
  3.  응답할 수 있는 캐싱 정보 저장
  4. 일괄적인 정책, 클라이언트로부터 요청이 들어왔던 마이크로 서비스에 문제가 생겼을 때 회로 차단기 가동
  5. 부하 분산( 로드 밸런싱 )
  6. 추적 : 하나의 마이크로 서비스는 다른 마이크로 서비스를 연관시켜 연쇄적으로 호출하는 경우가 많다. 어떤 마이크로 서비스가 누구에 의해 호출이 되었는지, 처음 진입점은 누구이며 중간단계는 누구이고 어디로 이동되는지 추적관계를 알 수 있다.
  7. 로깅 : 마이크로 서비스들의 로그를 일괄적으로 처리할 수 있다.
  8. 클라이언트 요청의 헤더정보, 쿼리 스트링을 변환할 수 있다.
  9. 허용할 IP, 차단할 IP를 설정할 수 있다.

 

🔧 API Gateway - 제공 API 유형

  • HTTP API : API 프록시 기능정도만 필요할 때 적합. 단순 / 저렴하고 빠르다.
  • REST API : API 관리 기능, 요청/응답에 대한 제어가 필요할 경우 적합, 복잡 / 비싸고 느리다.
  • WebSocket API : 웹소켓 용도. 실시간 애플리케이션에서 주로 사용한다.

 

📡 Spring cloud에서의 msa 간 통신

1)   RestTemplate

  • 필요한 외부 서비스에 연동
  • 직접적인 서버, 포트번호를 명시해야함

2)  Feign Client

  • 서버의 주소, 포트번호 없이 마이크로서비스의 이름만으로 호출할 수 있다

초창기 spring cloud는 로드 밸런서 역할을 해주는 별도의 서비스인 Netflix Ribbon을 제공했다.

 

 

✅ Netflix Ribbon ( Client Side Load Balancer )

  •  마이크로 서비스의 이름만으로 클라이언트 안에서 필요한 데이터를 호출할 수 있다.
  • Health check : 해당하는 서비스가 정상적으로 작동하는 지 확인할 수 있다.
  • 하지만 최근에는 Ribbon을 잘 사용하지 않는데, functional API, react 등의 비동기 처리 방식과 호환이 잘 안되는 문제가 있다. ( Spring Boot 2.4.x 버전에서 maintenance 상태)

✅ Netflix Zuul

  •  API gateway, routing 역할을 한다
  • 마찬가지로 maintenance 상태임
  • Zuul 대신 Spring Cloud Gateway를 이용하도록 권장됨

✅ Spring Cloud Gateway

  • Spring Reactive 환경에 구현된 API Gateway
  • 비동기 처리에 유리하기 때문에 Spring.io는 SCG를 사용하기를 권장한다.

!! 위 내용은 Dowon Lee 님의 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)" 강의를 참고하여 정리한 글입니다

 

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) - 인프런 | 강의

Spring framework의 Spring Cloud 제품군을 이용하여 마이크로서비스 애플리케이션을 개발해 보는 과정입니다. Cloud Native Application으로써의 Spring Cloud를 어떻게 사용하는지, 구성을 어떻게 하는지에 대해

www.inflearn.com

 

참고 : https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-3API-Gateway-nvk2kf0zbj