edu-pi / Backend-User-Server

0 stars 0 forks source link

[Feat] Gateway 조사 및 공유 #8

Closed SongGwanSeok closed 3 months ago

SongGwanSeok commented 3 months ago

📝 Description

무엇을?

왜? -Gateway를 이용한 로그인 구현

❗️Todo

ETC

기타사항

ujkkk commented 3 months ago

API GateWay

게이트웨이

Reverse Proxy

  1. 요청들을 라우팅한다.
  2. 나가는 명단을 로깅할 수 있다
  3. 인증 및 권한 부여

Gateway 종류

  1. Netflix zuul
  2. Amazon API
  3. Spring Cloud Gateway - 비동기가 적용된 게이트 웨이 image 4

Spring Cloud Gateway(SCG)

게이트웨이/SCG

Spring Reactive 환경에 구현된 API Gateway

3가지 옵션

📌 Route
응답을 보낼 목적지 uri와 필터 항목을 식별하기 위한 ID로 구성되어 있고 라우팅 목적지를 의미한다. 📌 Predicate
요청을 처리하기 전 HTTP 요청이 정의된 조건에 부합하는지 검사하며 Java 8의 Function Predicate 이다. 📌 Filter
게이트웨이에서 받은 요청과 응답을 수정하는 역할로 Spring Framework의 WebFilter 인스턴스이다.

# application.yml 예시

spring:
  cloud:
      gateway:
        default-filters:
          - name: GlobalFilter
            agrs:
            preLogger: true
            postLogger: true 
        routes:
          - id: product-service
            uri: lb://PRODUCT-SERVICE
            predicates:
              - Path=/product/**
            filters:             
              - name: UserFilter              
                args:                
                  baseMessage: productFilter                 
                  preLogger: true                
                  postLogger: true

구성이 디폴트로 적용되는 GlobalFilter와 각 서비스에 적용할 수 있는 내부 ServiceFilter로 구성

[ Spring Cloud Gateway 장점과 단점 ]

⠀출처: ~https://mangkyu.tistory.com/230~ [MangKyu's Diary:티스토리]

모든 클라이언트는 각 서비스의 엔드포인트 대신 API Gateway로 요청을 전달하여 관리가 용이해 진다

엔드포인트 서버에서 공통으로 필요한인증/인가, 사용량 제어, 요청/응답 변조 등의 다양한 기능을 플러그인 형태로 제공

API Gateway - 제공 API 유형

API Gateway에서 제공하는 API는 대표적으로 3종류가 있다.

HTTP API

API Gateway 실전 사용 (HTTP API) 출처: ~https://inpa.tistory.com/entry/AWS-📚-API-Gateway-개념-기본-사용법-정리~ [Inpa Dev 👨‍💻:티스토리]

AWS API Gateway vs spring cloud Gateway

AWS API Gateway 장점

⠀Spring Cloud Function 장점

⠀API Gateway 사용의 단점:

⠀Spring Cloud Function을 사용하는 단점:

어떤 게이트웨이를 써야하나요?

정답은 없다. 사용자가 상황에 맞게 각 기술 문서들을 보고 결정해야한다.

  1. KrakenD(크라켄)**
공식 문서가 상당히 정리가 잘되있다.
의존성이 없고 JSON 파일로 세팅이 끝난다.
zero trust 정책 - 각 API마다 header 정보를 일일히 넣어줘야 한다.
플러그인 적용 가능
header에 크라켄이 추가되서 날아온다.
로그 기본 세팅이 너무 빈약하다.

  2. kong(콩)
많은 레퍼런스들이 있다.
리소스를 많이 잡아먹는다. ex) 1개만 띄워도 1GB를 잡아먹는다.
RDB는 오직 PostgreSQL과 호환된다.
엄청나게 많은 플러그인이 지원된다.
  3. Spring Cloud Gateway
자바를 썻다면 바로 채택했을 예정이지만 우리 팀 스택은 자바가 아니라 노드라 인프라 세팅에 어려움을 겪을거 같아 바로 탈락시켰다.
  4. Tyk
공식 문서가 너무 조잡하다.
국내 사용풀이 너무 적어 관련 자료들을 얻기 쉽지 않다.
SongGwanSeok commented 3 months ago

참고 웹 사이트

API Gateway의 역할

마이크로 서비스로 구성된 시스템에서 통합된 접점을 제공한다. 여러 마이크로 서비스에 대한 요청을 하나의 엔드포인트로 보낼 수 있다. 이를 통해 시스템의 복잡성을 줄이고, 클라이언트와 서버간의 통신을 간소화하는데 도움을 준다.

또한, API 게이트웨이는 인증 및 권한 부여, 요청 및 응답의 변환, 로깅과 같은 크로스 커팅 관심사를 처리함으로써 각 마이크로서비스가 비즈니스 로직에만 집중할 수 있도록 지원합니다.

API Gateway의 종류와 선택 기준

API 게이트웨이는 크게 오픈 소스와 상용 제품으로 나눌 수 있습니다. 오픈 소스 게이트웨이로는 Kong, Tyk, Zuul 등이 있으며, 상용 제품으로는 AWS API Gateway, Azure API Management 등이 있습니다.

모든 종류의 API Gateway가 인증 및 권한 부여, 요청 변환, 로깅 등 필요한 기능을 지원하는 것은 아니기 때문에 지원하는지 확인이 필요하다.

Spring Cloud Gateway

스프링 클라우드 게이트웨이는 자바 개발자들 사이에서 인기 있는 솔루션 중 하나다.

스프링 클라우드 게이트웨이는 비동기 I/O를 기반으로 하며, Netty 서버를 사용합니다. 이는 고성능을 제공하며, 리액티브 프로그래밍 모델을 지원합니다.

자바 네트워크 애플리케이션 프레임워크.
비동기 이벤트 기반 네트워크 응용프로그램 프레임워크


AWS API Gateway

제공 API 유형


아마 Spring Cloud Gateway를 사용하지 않을까?