-
[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를 거친다
각 필터는 개발자가 자유롭게 커스터 마이징 가능하다.
전의 포스팅에서 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