[CS] Spring Cloud Gateway에 대해 알아보자!

최지나·2024년 2월 26일
2

CS

목록 보기
52/55
post-thumbnail

API Gateway란?

  • 사용자가 설정한 라우팅 설정에 따라서 각각 엔드포인트로 클라이언트를 대신해서 요청하고, 응답을 받으면 클라이언트에게 전달해주는 proxy 역할
  • 클라이언트가 직접적으로 마이크로 서비스를 호출하지 않아도 됨
  • 예시: Netfilx Zuul(현재는 deprecated), Spring Cloud Gateway

Spring Cloud Gateway란?

MSA에서 서비스 간 통신을 효울적으로 관리하는 역할. Netty를 이용한 비동기 서버가 작동한다는 특징

핵심 기능

기능설명
라우팅 (Routing)요청을 특정 경로로 전달하여 서비스 간의 통신을 관리
필터링 (Filtering)요청과 응답에 대한 사전 및 사후 처리를 수행하여 보안, 로깅, 감사 및 변환 등 다양한 작업을 처리
보안 (Security)Spring Security와의 통합을 통해 인증 및 권한 부여
리소스 절약 (Resource Saving)비동기 및 논블로킹 특성을 활용하여 시스템 리소스를 효율적으로 활용
회로 차단 (Circuit Breaking)넷플릭스의 Hystrix와 통합되어 서비스 장애 시 회로 차단을 수행하여 전체 시스템의 안정성 유지

예시

  • 유레카 서버(port: 8761)에 다음과 같이 5개의 인스턴스가 등록되어 있다고 가정하자
- API-GATEWAY-SERVICE : Spring Cloud Gateway 역할, port = 8000
- MY-FIRST-SERVICE: test 용 서비스1. 인스턴스 2개, random port
- MY-SECOND-SERVICE: test 용 서비스1. 인스턴스 2개, random port
  • 이 때 아래와 같이 8000번 즉 gateway에 요청 시, 유레카에 등록된 서비스의 이름(ex MY-SECOND-SERVICE) 으로 찾아서 해당 서비스에 요청을 보낼 수 있다. 이 때 특정 서비스의 인스턴스가 여러개라면 로드 밸런싱을 통해 번갈아가며 요청을 보내 부하를 분산할 수 있다. 또한 필터 적용을 통해 로깅 등의 작업 처리가 가능

  • Get 요청 예시

http://localhost:8000/second-service/check
  • API Gateway 서비스의 설정 파일
server:
  port: 8000

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka  # 유레카 서버에 api gateway 등록

spring:
  application:
    name: api-gateway-service
  cloud:
    gateway:
      default-filters:
        - name: GlobalFilter
          args:
            baseMessage: Spring Cloud Gateway Global Filter
            preLogger: true
            postLogger: true
      routes:
        - id: first-service
          uri: lb://MY-FIRST-SERVICE  # 유레카에 등록된 서비스 이름으로 라우팅. 
          #lb = 로드 밸런서 (해당 서비스에 등록된 인스턴스가 여러개라면 여러개의 인스턴스에 요청을 분산)
          predicates:
            - Path=/first-service/**  # 라우팅 path
          filters:
            - CustomFilter
        - id: second-service
          uri: lb://MY-SECOND-SERVICE
          predicates:
            - Path=/second-service/**
          filters:
            - name: CustomFilter
            - name: LoggingFilter
              args:
                baseMessage: Hi, There.
                preLogger: true
                postLogger: true

느낀점

  • MSA 구조에서는 막연히 API gateway가 필요하다! 여기서 어떤 마이크로 서비스를 사용해야 할지 라우팅을 해준다! 서비스간의 통신을 도와준다
    => 이정도의 개념만 알고 있었는데 직접 유레카와 연동해서 gateway 서비스를 만들어 보고, 로드 밸런싱까지 해보니 확실히 개념이 더 와닿는 것 같다
  • 인증 및 인가 작업을 진행하는데도 효과적이라는데 이 부분도 더 알아봐야겠다

REF 공식문서

profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

2개의 댓글

comment-user-thumbnail
2024년 2월 27일

오오 게이트웨이에 돌입하셨군요!

1개의 답글