Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Arch.] 요청에 대한 단일 진입점 API Gateway 본문
𐂂 API Gateway Service
요청에 대한 단일 진입점이자, 실제 백엔드 서비스와 접속하고,
API 호출에 대한 정책, 인증 및 Access 제어를 적용하여 중요한 데이터를 보호하는 트래픽 관리자를 말한다.
사용자가 설정한 라우팅 설정에 따라
각각 엔드포인트로 클라이언트 대신 요청하고,
응답을 받으면 다시 클라이언트로 응답을 전달하는 프록시 역할을 수행한다.
🎯 목표:
시스템 내부구조는 숨기고, 외부 요청에 대해 적절한 형태로 가공해서 응답할 수 있다.
🍩 API 관리 및 제어
: 다양한 마이크로서비스를 통합하고, 클라이언트에 필요한 API를 제공
(API 버전관리, 엔드포인트 관리 및 API문서화 기능 제공)
🍩 보안 및 인증 및 권한부여
: API 호출을 인증하고, 권한부여할 수 있으며, API 요청 or 응답을 보호하는 보안 기능 제공
(OAuth, JWT, API 키 및 사용자 인증과 같은 다양한 보안 메커니즘을 지원)
🍩 로드밸런싱(부하분산)
: 여러 마이크로서비스 사이에 트래픽을 균형적으로 분산하는 기능 제공
🍩 모니터링 분석(로깅, 추적, 상관관계)
: API호출을 모니터링하고 분석하는 기능 제공
(API 성능을 추적, 문제를 식별, 트래픽 패턴을 분석하여 최적화할 수 있다.)
🍩 응답 캐싱
: 반복적인 API호출을 최적화하기 위해 응답데이터를 캐싱할 수 있다.
🍩 라우팅
: API 엔드포인트를 해당하는 마이크로서비스로 정확한 라우팅할 수 있다.
🍩 변환 및 어댑터
: 요청 및 응답데이터를 변환하거나, 다른 프로토콜로 변환하는데 사용될 수 있다.
🍩 서비스 디스커버리와 통합
: 동적으로 서비스 인스턴스를 검색하고 호출할 수 있다. 대표적으로 Netflix Eureka와 함께 사용하여 마이크로서비스의 동적확장을 지원한다.
🍩 필터링
: 요청과 응답에 대한 필터(filter)를 지원
API 호출에 대한 정책, 인증 및 Access 제어를 적용하여 중요한 데이터를 보호하는 트래픽 관리자를 말한다.
사용자가 설정한 라우팅 설정에 따라
각각 엔드포인트로 클라이언트 대신 요청하고,
응답을 받으면 다시 클라이언트로 응답을 전달하는 프록시 역할을 수행한다.
🎯 목표:
시스템 내부구조는 숨기고, 외부 요청에 대해 적절한 형태로 가공해서 응답할 수 있다.
🍩 API 관리 및 제어
: 다양한 마이크로서비스를 통합하고, 클라이언트에 필요한 API를 제공
(API 버전관리, 엔드포인트 관리 및 API문서화 기능 제공)
🍩 보안 및 인증 및 권한부여
: API 호출을 인증하고, 권한부여할 수 있으며, API 요청 or 응답을 보호하는 보안 기능 제공
(OAuth, JWT, API 키 및 사용자 인증과 같은 다양한 보안 메커니즘을 지원)
🍩 로드밸런싱(부하분산)
: 여러 마이크로서비스 사이에 트래픽을 균형적으로 분산하는 기능 제공
🍩 모니터링 분석(로깅, 추적, 상관관계)
: API호출을 모니터링하고 분석하는 기능 제공
(API 성능을 추적, 문제를 식별, 트래픽 패턴을 분석하여 최적화할 수 있다.)
🍩 응답 캐싱
: 반복적인 API호출을 최적화하기 위해 응답데이터를 캐싱할 수 있다.
🍩 라우팅
: API 엔드포인트를 해당하는 마이크로서비스로 정확한 라우팅할 수 있다.
🍩 변환 및 어댑터
: 요청 및 응답데이터를 변환하거나, 다른 프로토콜로 변환하는데 사용될 수 있다.
🍩 서비스 디스커버리와 통합
: 동적으로 서비스 인스턴스를 검색하고 호출할 수 있다. 대표적으로 Netflix Eureka와 함께 사용하여 마이크로서비스의 동적확장을 지원한다.
🍩 필터링
: 요청과 응답에 대한 필터(filter)를 지원
𐁍 Netflix Zuul
MSA 사용되는 API Gateway Server이다.
(주로 Spring Cloud와 통합하여 사용된다.)
(클라이언트는 각각의 마이크로서비스를 직접 호출하지 않고, Zuul을 통해 통일된 엔드포인트를 사용할 수 있다.)
(주로 Spring Cloud와 통합하여 사용된다.)
(클라이언트는 각각의 마이크로서비스를 직접 호출하지 않고, Zuul을 통해 통일된 엔드포인트를 사용할 수 있다.)
𖠃 Spring Cloud Gateway
Netflix가 제공하는 API Gateway와 🌱 Spring Application의 호환성 문제때문에
일반적으로 사용하는 API Gateway이다.
(🌱 Spring Application과 호환이 잘된다.)
(비동기 처리 지원)
일반적으로 사용하는 API Gateway이다.
(🌱 Spring Application과 호환이 잘된다.)
(비동기 처리 지원)
🍟 Route
: API Gateway에서 가장 기본이 되는 요소로, id, uri, predicate, filter로 구성되어 있다.
🍟 Predicate
: API Gateway로 들어온 요청이 주어진 조건을 만족하는지 확인하는 구성요소를 말한다.
(하나 이상의 조건을 정의할 수 있으며, 조건에 맞지 않는 경우 HTTP 404 Not Found 에러를 반환)
🍟 Filter
: API Gateway로 들어오는 요청에 대해 Filter를 적용하여 전처리 및 후처리를 할 수 있는 구성요소를 말한다.
⚠ 요청된 uri의 조건이 predicate와 일치하는지 확인 후, 일치하는 경우
해당 uri 경로로 요청을 매핑시켜준다.(Gateway Handler Mapping)
⚠ Gateway Web Handler가 요청과 관련된 FilterChain을 통해 요청을 전송한다.
⚙ API Gateway Setting
🔧 application.yml
server:
port: 8000
spring:
application:
name: apigateway-service
cloud:
gateway:
routes:
-id: first-service # 실제 마이크로서비스 엔드포인트 지정
uri: http://localhost:8081/
predicates:
- Path=/first-service/**
-id: second-service
uri: http://localhost:8082/
predicates:
- Path=/second-service/**
filters:
- AddRequestHeader=second-request, second-request-header
- AddResponseHeader=second-response, second-response-header
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
'Backend > Architecture' 카테고리의 다른 글
[Arch.] 마이크로서비스를 검색하고 동적으로 관리하는 Service Discovery (Spring Cloud Netflix Eureka) (0) | 2023.10.10 |
---|---|
[Arch.] 클라우드 환경에서의 애플리케이션의 설계, 개발, 배포 방식과 12가지의 지침(+ 3 factors) (0) | 2023.09.20 |
Comments