서버

[API GateWay] Zuul 적용하기

고태광이 2019. 3. 30. 15:22

[API GateWay] zuul 적용하기

 

API GateWay는 MSA(MicroService Architecture)에서 언급되는 컴포넌트중에 하나이다. 

여러 클라이언트 요청에 대한 end point를 통합하는 서버이다. 

한마디로 말하면 MSA 에서 여러 서비스들을 관리 하는데 각 서비스들마다 end point가 여러개여서 만약 몇몇의 서비스가 end point 변경이 일어났을때 관리하기가 힘들다. 따라서 MSA 환경에서 서비스에 대한 도메인을 하나로 통합할 수 있는 API GATEWAY가 필요한 것이다.

 

Zuul 이란 

netflix에서 사용하는 JVM 기반의 라우터이자 로드밸런서이다. 

다른 api gateway, load balancer 처럼 인증과 보안, 동적 라우팅, 트래픽 조정, 모니터링, 로깅 등 다양한 용도로 사용 가능하다.

또한 마이크로 서비스를 라우팅 하는 과정에서  pre filter, route filter, post filter를 거치고 에러 발생 시, error filter를 거친다 

각 필터는 개발자가 자유롭게 커스터 마이징 가능하다.

 

참조 : https://medium.com/netflix-techblog/announcing-zuul-edge-service-in-the-cloud-ab3af5be08ee

 

전의 포스팅에서 eureka 를 적용하는 법을 알아봤으니, 여기에서도 eureka를 사용하겠다. 

 

 

이제 zuul을 적용해보자.

 

maven 에 spring-cloud-starter-zuul  dependency 추가

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zuul</artifactId>
    <version>1.4.6.RELEASE</version>
</dependency>

 

어노테이션 추가 

@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ApigatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApigatewayApplication.class, args);
    }

}

@EnableZuulProxy 어노테이션과 @EnableZuulServer 두 종류가 있다. 간단히 말하면 EnableZuulProxy가 EnableZuulServer를 포함한다.

EnableZuulProxy = EnableZuulServer + PreDecorationFilter +  RibbonRoutingFilter + SimpleHostRoutingFilter

 

application.properties 설정 

spring.application.name=api-gateway
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
eureka.client.enabled=true
server.port=9999
zuul.routes.user-service.path=/sample/**
zuul.routes.user-service.strip-prefix=false

1. spring.application.name 은 eureka에 등록되는 serviceId 이다. 

2. eureka server 주소 

3. zuul,routes.{serviceId}.path : 해당 url path 요청을 {serviceId}로 보낸다. 

4. zuul.routes.{serviceId}.striptPrefix : false일 경우에는 uri 를 모두 보낸다 (만약에 /sample/list 를 요청했으면 /sample/list로 보냄)

반면에 true일 경우에는 matching 된 값을 제외하고 보낸다 (/list)

 

 

eureka server 실행 후 eureka client를 실행하면 아래처럼 서비스들이 추가된 것을 볼 수 있다. 

 

user-service는 8080포트, api-gateway 는 9999포트이다.

localhost:8080/samples 와 localhost:9999/samples가 동일한 결과값이 나온 것을 볼 수있다.