상세 컨텐츠

본문 제목

API Gateway 기본 예제(.yml 로 설정)

SpringCloud

by 성찬우 2022. 8. 30. 16:30

본문

API Gateway 를 활용해서 특정 api에 접근 하는 방법에 대해서 예제를 통해서 알아보려고 한다. 

 

준비 할것은 Gateway 의 역할을 할 프로잭트 하나. 

그리고 Gateway에서 들어갈 수 있는 N개의 프로잭트 이다. 

zuul 을 이용해서 해보고 싶었지만 Spring Boot 버전2.3.x대를 사용해야 하기 때문에 

어려움이 있어 gateway를 이용해서 해보도록 하겠다. 

Gateway를 타고 들어갈 프로잭트 준비하기

기본적인 localhost를 담당할 프로잭트이기 떄문에 Spring Web만을 이용하겠다. 

 

간단하게 Controller를 만들어서 확인을 해보자 

@RestController
@RequestMapping("/first")
public class GatewayServiceController {

    @GetMapping("/welcome")
    public String welcome(){
        return "First Gateway Service";
    }

}

이후 yml파일을 등록해줄 것인데 .

 

server:
  port: 8081

spring:
  application:
    name: first-gateway-client
eureka:
  client:
    fetch-registry: false
    register-with-eureka: false

서버 포트를 8081 번으로 나중에 사용할 Eureka에 대한 정보도 미리 입력해주었다. 

port만 설정해주어도 문제없다. 

 

이후 똑같은 방식으로 하나더 프로잭트(/second/welcome ["Secone Gateway Service"] , port:8082)를 만들어 주엇다. 

 

Gateway 준비하기

Gateway , Lombok을 준비하여 준다. 이후 Eureka 를 적용할 것이긴 하지만 기본 예제이기 때문에

Gateway만을 사용해 보도록하겠다. 

 

Gateway에서는 yml 파일만을 건드릴 예정인데 

server:
  port: 8000

eureka:
  client:
    fetch-registry: false
    register-with-eureka: false
    service-url:
      defaultZone: http://localhost:8761/eureka

spring:
  application:
    name: apigateway-service

  cloud:
    gateway:
      routes:
        - id: myFirstService
          uri: http://localhost:8081/
          predicates:
            - Path=/first/**
            
        - id: mySecondService
          uri: http://localhost:8082/
          predicates:
            - Path=/second/**

서버포트는 8000번으로 그리고 eureka는 무시해도 괜찮다. 

cloud 부터 확인을 하면되는데 

 

http://localhost:8081 /+ predicates(- Path) 의 조합을 보면 된다. 

 

http://localhost:8081/first/**경로로 들어올때 Gateway를 거쳐서 들어가도 되도록 

즉, http://localhost:8000/first/** 경로로 들어오더라도 8081경로로 이어준다는 것이다. 

 

결과 확인.

모든 프로잭트 (저의 경우 3개 )를 실행하고 

8081 및 8082 포트가 정상적으로 뜨는지 확인후 8000번으로 그대로 접속해 보도록 하겠다. 

 

 

이렇게 설정해둔 8081 과 8082 가 아니더라도

routes로 등록해둔 포트는 Gateway 포트로 접속을 하더라도 접속이 가능한것을 확인 할 수 있다. 

 

yml 에 설정해둔 경로가 아니라면?
@RestController
@RequestMapping("/")
public class GatewaywrongController {

    @GetMapping("/welcome")
    public String welcome(){
        return "wrong Gateway";
    }

}

이렇게 /first/** 가 아닌 /welcome 으로만 들어오게 되면 어떻게 되는지 한번 보자면 

 

정상적으로 8081포트에서는 뜨지만

8000번 포트에서는 에러가 발생한다. 

 

 

 

 

 

 마무리

 

First Gateway Service 와 같이 문자열을 수정해야할 경우 어떻게 해야하는지 

다음 포스팅에서 계속해서 알아보겠다. 

 

'SpringCloud' 카테고리의 다른 글

Gateway AbstractGatewayFilterFactory<.class> customFilter  (0) 2022.09.02
API Gateway 기본 예제(코드로 설정)  (0) 2022.08.30
API GateWay  (0) 2022.08.29
[Eureka] 기본 예제  (0) 2022.08.24
SOA vs **MSA / MSA Architecture  (0) 2022.08.23

관련글 더보기

댓글 영역