API Gateway service를 사용해 각 service 연결하기

OH JU HYEON·2022년 7월 12일
1

MSA

목록 보기
3/7
post-thumbnail

API Gateway service를 사용해 각 service 연결하기

API Gateway

API Gateway에 대해서는 전에 한 번 작성했었다. 조금 더 풀어서 설명하면 Eureka Client의 주소를 Eureka Server에 등록하고 Client의 요청이 들어오면 Gateway를 통해 각 API를 호출하게 된다.

여기서 곁들이면 API Gateway Service에서 주기적으로 Eureka한테 API Gateway로 등록 및 해제 된 service들의 정보를 전달해주고(기본 값이 30초라고 한다.) API Gateway Service가 받은 정보를 기억하고 있다가 사용하는 시점에서 해당 service로 요청을 전달하게 된다.

의존성 추가

<dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

Spring cloud에서 제공하는 gateway를 의존성 주입 받는다.

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

Eureka client도 나중에 사용해야 하니 의존성 주입을 받는다.

application.yml

server:
  port: 8000

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

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/**

Eureka 설정이나 Port 설정은 전에 체크한 글을 참고하면 되고, 이번에는 spring.cloud.gateway.routes를 체크해 본다.

- id를 통해 연결할 서비스를 등록해주고 uri에 어디로 이동이 될 것인지 주소를 적어준다. predicates는 조건절이라고 생각하면 되고 여기에 추가된 - Path는 사용자가 입력했던 Path 정보가 uri에 붙게 된다.

조금 더 자세히 predicates를 체크해 보면 이 항목에 작성하는 Path정보는 대문자 P로 시작하고 Path=경로가 하나의 문자열처럼 구분되어 경로 데이터를 분리하고 검색하는데 사용된다.

위 코드를 참고로 예를 들면 http://localhost:8081/first-service/** 이런 식으로 주소가 붙게 된다.

서버 작동


서버를 작동시키면 tomcat서버가 아닌 Netty 서버가 시작이 된다. 네티 서버는 비동기 서버이다.

@Slf4j
@RestController
@RequestMapping("/")
public class FirstServiceController {

    @GetMapping("/welcome")
    public String welcome() {
        return "Welcome to the First service.";
    }

서버를 돌리고 기존에 있던 위 경로로 들어가보면 404오류가 뜬다. Path에서 작성한 경로와 맞지 않아서 그런데 Controller에 ReqeustMapping을 @RequestMapping("/first-service")이렇게 잡아줘야 한다.

Gateway End Point : http://localhost:8081/first-service/welcome
@RequestMapping 수정 전 : http://localhost:8081/welcome (작동 안 함)
@RequestMapping 수정 후 : http://localhost:8081/first-service/welcome (작동 함)

이렇게 API Gateway service를 각 service와 연결하고 체크하면 된다.

참고

Red hat이 말하는 API Gateway
이도원님 MSA 강의 댓글

profile
읽기만 해도 이해가 되는 글을 쓰기 위해 노력합니다.

0개의 댓글