ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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가 동일한 결과값이 나온 것을 볼 수있다.

     

     

    '서버' 카테고리의 다른 글

    [Docker] 실행중인 컨테이너 접속하기  (0) 2019.04.07
    [Docker] mac에 도커 설치하기  (0) 2019.04.07
    [Eureka] Eureka client 만들기  (0) 2019.03.24
    [Eureka] Eureka 서버 생성하기  (0) 2019.03.23
    [Eureka] Eureka란  (0) 2019.03.23
Designed by Tistory.