게이트웨이 구현 실습

이번 시간은 각 마이크로 서비스의 최 앞단에서 모든 API 서버들의 엔드포인트를 단일화하고, 라우팅을 시켜주는 게이트웨이를 다뤄 보겠습니다. 게이트웨이의 구현 프로젝트는 여러개가 있지만 그중 spring cloud 에서 사용하는 Spring Cloud Gateway 를 사용 하여 구현 실습을 진행 하겠습니다.

Gateway 의 자세한 이론 설명은 참고자료-MSA Outer 아키텍처-API Gateway page 에서 참고 하면 됩니다.

  1. 스프링 부트를 처음 시작할때 가장 좋은 방법은 스프링 부트 에서 시작하는 것입니다. 브라우저에서 접속 다음 사이트를 접속하여 스프링 부트를 시작합니다

  2. Maven Project 와 Java 를 선택하고 Artifact 이름을 gateway 로 변경합니다. 그 후, 디펜던시에 다음을 추가하여 Generate 버튼을 클릭하여 프로젝트를 생성 합니다.

    • Gateway : 스프링 클라우드의 게이트웨이 디펜던시를 추가합니다.
spring:
    cloud:
        gateway:
            routes:
            - id: google
                uri: http://google.com
                predicates:
                    - Path=/google/{param}
                filters:
                    - RewritePath=/google(?<segment>/?.*),/search
                    - AddRequestParameter=q,{param}
            - id: naver
                uri: http://search.naver.com
                predicates:
                    - Path=/naver/{param}
                filters:
                    -   name: RewritePath
                        args:
                            regexp: /naver(?<segment>/?.*)
                            replacement: /search.naver
                    -   name: AddRequestParameter
                        args:
                            name: query
                            value: '{param}'
  • 설정 후 서버를 재 실행 후 브라우저를 열고 아래와 같은 url 을 입력하여 봅니다.
  • mvn spring-boot:run
    • 서버를 실행 합니다. 8080 포트로 서버가 실행됩니다.
  • ‘검색어’ 라는 명칭을 구글에서 검색합니다.
- http://localhost:8080/google/검색어
  • ‘검색어’ 라는 명칭을 네이버에서 검색합니다.
- http://localhost:8080/naver/검색어
  • 구글에서 검색을 하는 url 은 https://www.google.com/search?q= 형식입니다. 해당 도메인으로 라우팅을 시키고, 여러 검색엔진을 사용하기 위하여 filters 에서 path 를 다시 설정 하고, url path 를 파라미터로 받는 작업이 실행 되었습니다.
  1. 이번에는 실제 게이트웨이 예제에서 어떻게 쓰였는지 보겠습니다.
    cloud:
        gateway:
        routes:
            - id: product
              uri: http://localhost:8085
              predicates:
                - Path=/product/**,,/products/**,/goods/**
            - id: order
              uri: http://localhost:8081
              predicates:
                - Path=/orders/**
            - id: delivery
                uri: http://localhost:8082
                predicates:
                  - Path=/deliveries/**
            - id: servicecenter
                uri: http://localhost:8084
                predicates:
                  - Path=/surveys/**
            - id: mypage
                uri: http://localhost:8086
                predicates:
                  - Path=/users/**,/mypage/**
            - id: oauth
                uri: http://localhost:8090
                predicates:
                  - Path=/oauth/**
        globalcors:
            corsConfigurations:
            '[/**]':
              allowedOrigins:
                - '*'
              allowedMethods:
                - '*'
              allowedHeaders:
                - '*'
              allowCredentials: true
  • 위의 샘플은 로컬 환경에서 다양한 서비스를 라우팅 한 결과 입니다.
  • 하나의 서비스에는 path 가 여러개 있을 수 있습니다. 그때 ,(콤마) 로 각 path 들을 설정하여 줍니다.
  • path 가 1개만 있지 않기 때문에 path 뒤에 /** 을 사용하여 해당 path 뒤쪽에 오는 모든 url 을 받겠다고 선언 하였습니다.
  • globalcors 라는 설정으로 cors 처리를 할 수 있습니다.

실습 리뷰

간단하게 라우팅과 필터에 대하여 spring-cloud-gateway 를 사용하여 설정하여 보았습니다.
게이트웨이는 마이크로 서비스 아키텍처 패턴에서 외부와 내부를 연결하는 중요한 역할을 담당합니다.

게이트 웨이는 라우팅이 기본이지만, 인증/인가 처리나 Rate Limiting 등의 처리등이 가능합니다.

*MSA School의 모든 콘텐츠에 대한 권리는 MSA School에 있으며, 무단 복제 및 배포를 금합니다. 영리 목적의 사용은 허용되지 않으며, 개인적 용도로 복제할 경우 반드시 출처를 표기해야 합니다.
© uEngine. All Rights Reserved. | 주소 : 서울특별시 서초구 신반포로45길 18 502호(잠원동, 주일빌딩)
사업자등록번호 : 211-87-95355 | 전화번호 : 02-567-8301 | 대표이사 : 장진영
*MSA School의 모든 콘텐츠에 대한 권리는 MSA School에 있으며, 무단 복제 및 배포를 금합니다.
영리 목적의 사용은 허용되지 않으며, 개인적 용도로 복제할 경우 반드시 출처를 표기해야 합니다.
© uEngine. All Rights Reserved.
주소 : 서울특별시 서초구 신반포로45길 18 502호(잠원동, 주일빌딩)
사업자등록번호 : 211-87-95355
전화번호 : 02-567-8301
대표이사 : 장진영