스프링/cloud

[스프링 클라우드] Ch03. API 게이트웨이

o_b:us 2022. 5. 15. 20:53

API 게이트 웨이란

API 게이트웨이는 실제 백엔드 서비스 또는 데이터와 접속하고 API 호출에 대한 정책, 인증 및 일반 액세스 제어를 적용하여 중요한 데이터를 보호하는 트래픽 관리자입니다. API 게이트웨이는 서비스의 확장성과 고가용성을 보장합니다. 요청을 적절한 서비스로 라우팅하고 요청자에게 응답을 다시 보내는 기능을 담당합니다. API 게이트웨이는 데이터와 API 간의 보안 연결을 유지하고 회사 내부 및 외부에서 로드 밸런싱을 포함한 API 트래픽 및 요청을 관리합니다.
게이트웨이는 중요한 데이터를 보호하기 위해 API 호출에 대한 정책, 인증 및 일반 액세스 제어를 적용합니다. API 게이트웨이는 클라이언트의 모든 API 호출을 가져와 요청 라우팅, 구성 및 프로토콜 변환을 사용하여 올바른 마이크로서비스로 라우팅합니다.API 게이트웨이를 사용하는 주된 이유 중 하나는 여러 백엔드 서비스를 호출하고 결과를 집계할 수 있기 때문입니다. 고객은 각 개별 서비스에 대한 요청을 보내야 하는 대신 API 게이트웨이로 보내 거기에서 해당 요청을 관련 서비스로 전달할 수 있습니다.

API Gateway Framework Zuul, Zuul2,SCG


Zuul 1.0 구조(동기)

출처:https://www.slideshare.net/ifkakao/msa-api-gateway

Zuul 2.0 구조(비동기)

출처:https://www.slideshare.net/ifkakao/msa-api-gateway

Spring Cloud Gateway 구조

출처:출처:https://www.slideshare.net/ifkakao/msa-api-gateway

gradle, yml 설정

//build.gradle.kts
//알아야 할 코드만 따옴

//boot가 dependencies를 관리하는 부분
plugins {
    id("org.springframework.boot") version "2.4.3"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    kotlin("jvm") version "1.4.30"
    kotlin("plugin.spring") version "1.4.30"
}

dependencies {
      implementation("org.springframework.cloud:spring-cloud-starter-gateway")
}
//cloud가 dependencies를 관리하는 부분
dependencyManagement {
    imports {
        mavenBom ("org.springframework.cloud:spring-cloud-dependencies:2020.0.1")
    }
}

//application.yml
spring.cloud:
    gateway:
        httpclient:
            connect-timeout: 3000
            response-timeout: 10s
        default-filters:
            - name: GlobalFilter
                args: 
                    defaultMessage: Api gateway
                    preLogger: true
                    postLogger: true
        routes:
            - id: A
              uri: http://localhost:8080
                predicates:
                    - Path=/contents/**
                filters:
                    - name: PostFilter
                        args: 
                            defaultMessage: post filter
                            preLogger: true
                            postLogger: true
            - id: B
                uri: http://localhost:9080
                predicates:
                    - Path=/contents/**
                    - After=2022-07-14T20:00:00.126+09:00[Asia/Seoul]
                filters:
                    - name: PostFilter
                        args: 
                            defaultMessage: post filter
                            preLogger: true
                            postLogger: true
            # 헤더서비스 요청응답할때                
            - id: header-service
                uri: http://localhost:8080
                predicates:
                    - Path=/headerservice
                    - Header=X-PHOTO-API-VERSION, 1.0.0
                filters:
                    - name: PostFilter
                        args: 
                            defaultMessage: post filter
                            preLogger: true
                            postLogger: true

1

2

출처 :
https://www.tibco.com/ko/reference-center/what-is-an-api-gateway

참고자료 : https://velog.io/@tlatldms/%EC%84%9C%EB%B2%84%EA%B0%9C%EB%B0%9C%EC%BA%A0%ED%94%84-MSA-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90%EC%9D%98-API-Gateway-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EA%B2%B0%EC%A0%95