Netflix/zuul
Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security, and more. - Netflix/zuul
github.com
Eureka, Hystrix등과 같이 Netflix OSS에 포함 된 API 게이트웨이
Zuul 1.x은 Servlet의 Blocking API를 사용되어 개발되었기 때문에 기본적으로 Blocking 방식으로 동작을 하고, 이를 보완하기 위해 Thread pool을 사용했지만, 오랫동안 연결이 유지되어야 하는 Websocket과 같은 연결을 지원하지 않았지만, Zuul 2.0부터는 Netty 기반 Non-blocking으로 동작합니다.
💡 Spring Cloud Gateway는?
Gateway를 구현하는 또 다른 방법은 Spring Cloud 커뮤니티에서 개발한 Spring Cloud Gateway가 있습니다.
성능 비교 결과 더 좋은 성능을 보인다는 말도 있고, Spring Cloud에서 정식으로 지원하는 라이브러리 이니 추후에 WebFlux를 공부하면서 함께 사용해 볼 생각입니다.
Zuul 아키텍처
실습
먼저 라우팅 할 프로젝트를 생성했다고 가정하겠습니다.
- http://localhost:8081/
보통 Gateway를 구축하면 여러 서비스를 관리하기 위해 멀티모듈로 사용하는 경우가 많으니 Spring initializer를 이용하지 않고 Gradle에 직접 입력하는 방법으로 하겠습니다.
이건 아닌가? 암튼 저는 그래요 ㅎㅎ
사용한 Spring boot 버전 : 2.3.9.RELEASE
1. root 프로젝트의 build.gradle에 아래 설정을 추가합니다.
ext {
set('springCloudVersion', "Hoxton.SR10")
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
2. Gateway 모듈에 zuul 의존성을 추가 합니다.
dependencies {
implementation('org.springframework.cloud:spring-cloud-starter-netflix-zuul')
}
3. EnableZuulProxy 어노테이션과 라우팅 설정을 추가 해줍니다.
@EnableZuulProxy
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
zuul은 L7 로드밸런서로 request path를 기반으로 라우팅을 합니다. 아래 설정은 /target으로 들어오는 request에 대한 라우팅 설정입니다.
# application.yml
zuul:
routes:
test:
path: /target/**
url: http://localhost:8081
이 후 localhost:8080/target 으로 request를 보내면 localhost:8081/로 라우팅 되는 것을 확인할 수 있습니다.
'Spring' 카테고리의 다른 글
OAuth2.0 + JWT를 사용한 토큰 기반 서버 인증 구현하기 (0) | 2021.04.12 |
---|---|
TDD.. 테스트 코드는 습관이에요! (0) | 2021.04.02 |
헥사고날 아키텍처(Hexagonal Architecture) (1) | 2021.03.27 |
Event를 발행해 느슨한 결합을 가져보자 (0) | 2021.03.27 |
프로젝트 패키지 구성은 어떻게 하는게 좋을까? (0) | 2021.03.25 |