오늘은 Zuul에 대해서 알아보자.
Zuul을 이해하기 위해서는 API Gateway에 대해서 알아야 한다.
API Gateway는 API 서버 앞단에서 모든 API 서버들의 엔드포인트를 단일화 해주는 또 다른 서버이다.
아래의 그림을 보자!
MSA로 서비스를 운영하면서 각 모듈마다 URI가 다르다. 이 때, API Gateway를 통해서 "example.io"로 단일화된 인터페이스를 제공해줄 수 있다.
"example.org"와 "example.com"의 모듈이 결합이 되어도 API Gateway에 테이블만 수정하면 된다. 아래의 그림을 보자!
API Gateway로 부적절한 모듈 접근을 제한할 수 있다.
API Gateway를 통해서 트래픽에 트레이스 작업을 수행할 수 있다.
그 외 다양한 작업을 API Gateway를 통해 수행할 수 있다.
한마디로 MSA를 수행하면서 분산된 모듈들에 대한 요청을 1개의 인터페이스로 통합하는 것이다.
Netflix에서 제공하는 API Gateway 또는 API Service 기술이다. 마이크로서비스 아키텍쳐에서 여러 클라이언트 요청을 적절한 서비스로 프록시 및 라우팅하기 위한 서비스이다.
Zuul은 JVM-based router 및 Server-side load Balancer이다.
Zuul은 내부적으로 Eureka 서버를 사용하고, 부하 분산을 위해 Ribbon을 사용한다.
Zuul 또한 Eureka Client이다.
Eureka 및 Ribbon과 함께 사용할 수 있도록 만들어진 기술이다.
Spring Boot 프로젝트를 1개 생성한다.
Dependency를 추가한다.
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
#----------spring configuration 설정----------
spring:
application:
name: zuul-api-gateway
server:
port: 9999
#----------Eureka client 설정----------
eureka:
client:
enabled: true
serviceUrl:
defaultZone: http://localhost:8888/eureka/
#----------Zuul 설정----------
zuul:
## 라우팅 설정 항목
routes:
user-service:
## API Gateway path 설정
path: /user/**
service-id: USER-SERVICE
@EnableZuulProxy
@EnableDiscoveryClient
@SpringBootApplication
public class ApiGatewayServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayServiceApplication.class, args);
}
}
본격적으로 프록시 역할을 할 수 있게 되었다.
오늘은 Zuul에 대한 공부를 했다. 다음은 Ribbon에 대해서 알아보자!