Netflix Zuul은 API Gateway 역할을 하는 서버 애플리케이션으로, 마이크로서비스 아키텍처에서 요청 라우팅, 로드 밸런싱, 보안 등의 기능을 제공하는 도구입니다.
Zuul은 Netflix의 OSS(Open Source Software) 프로젝트 중 하나로 개발되었으며, 주로 Spring Cloud Netflix 프로젝트와 함께 사용됩니다.
✅ Zuul의 핵심 역할
Zuul은 클라이언트 요청과 여러 마이크로서비스 사이에서 중간 관문 역할을 합니다.
라우팅 (Routing)
- 클라이언트의 요청을 적절한 서비스로 전달합니다.
- 예:
/api/users
→ 사용자 서비스,/api/orders
→ 주문 서비스
로드 밸런싱 (Load Balancing)
- 여러 인스턴스 중 하나로 요청을 균등하게 분산시킵니다.
- Ribbon과 함께 사용하면 로드 밸런싱이 가능합니다.
필터링 (Filters)
- 요청과 응답에 대해 사전 또는 사후 처리 기능을 제공합니다.
- 예: 인증/인가 확인, 로깅, 헤더 추가/변경 등
보안(Security)
- 인증/인가와 관련된 필터를 통해 보안 로직을 수행합니다.
- 예: 특정 IP 차단, 토큰 검증
Monitoring & Analytics
- API 사용 현황을 모니터링하고, 로그를 수집할 수 있습니다.
✅ Zuul의 주요 특징
동적 라우팅
- Zuul은 요청 경로(Route)를 동적으로 설정할 수 있습니다.
- 예를 들어, 특정 조건에 따라 다른 서비스로 요청을 라우팅할 수 있습니다.
강력한 필터 기능
- Zuul은 필터를 통해 요청과 응답을 조작할 수 있습니다.
- 필터 타입:
- Pre Filter: 요청이 라우팅되기 전에 실행
- Routing Filter: 요청을 라우팅하는 중에 실행
- Post Filter: 요청이 완료된 후 실행
- Error Filter: 오류 발생 시 실행
Spring Cloud Netflix 통합
- Zuul은 Spring Boot 및 Spring Cloud Netflix와 쉽게 통합됩니다.
- Eureka와 함께 사용하면 서비스 등록 및 발견 기능도 지원됩니다.
✅ Zuul과 Eureka, Ribbon의 통합
- Eureka: 서비스 등록 및 발견
- Ribbon: 클라이언트 사이드 로드 밸런서
- Zuul: API Gateway로 라우팅 및 필터링
동작 예시:
- 클라이언트 → Zuul에게 요청 (
/api/users
) - Zuul은 Eureka에서 "User 서비스"의 위치를 찾음
- Zuul은 Ribbon을 통해 요청을 여러 인스턴스 중 하나로 라우팅
- User 서비스가 응답을 반환 → Zuul → 클라이언트
✅ Zuul 필터 예시 (Spring Cloud Netflix Zuul)
1. 의존성 추가
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
2. Zuul 설정 추가 (application.yml
)
zuul:
routes:
user-service:
path: /api/users/**
serviceId: user-service
prefix: /api
- 라우트 설정:
/api/users/**
요청은user-service
로 전달 - prefix:
/api
를 공통 경로로 사용
3. 필터 구현
@Component
public class PreFilter extends ZuulFilter {
@Override
public String filterType() {
return "pre"; // 사전 필터
}
@Override
public int filterOrder() {
return 1; // 필터 실행 순서
}
@Override
public boolean shouldFilter() {
return true; // 항상 필터 실행
}
@Override
public Object run() throws ZuulException {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
System.out.println("Pre Filter: " + request.getMethod() + " " + request.getRequestURL());
return null;
}
}
✅ Zuul vs Spring Cloud Gateway
- Zuul은 Netflix OSS 기반의 API Gateway입니다.
- Spring Cloud Gateway는 Spring 팀이 개발한 새로운 API Gateway로, 더 나은 성능과 확장성을 제공합니다.
- Spring Cloud Gateway는 리액티브(Non-Blocking) 기반이기 때문에 최신 프로젝트에서는 이를 더 많이 사용합니다.
✅ 정리
Netflix Zuul은 마이크로서비스에서 API Gateway 역할을 수행하며,
라우팅, 로드 밸런싱, 보안, 필터링 기능을 제공합니다.
- Spring Cloud Netflix와 통합되어 Eureka, Ribbon과 함께 사용할 수 있습니다.
- 필터를 통해 다양한 요청/응답 전후 처리를 수행할 수 있습니다.
최근에는 Spring Cloud Gateway가 Zuul을 대체하는 추세이지만, Zuul은 여전히 많은 프로젝트에서 사용되고 있습니다.
'Microservices Architecture' 카테고리의 다른 글
Spring Cloud Gateway (4) | 2024.12.16 |
---|---|
서비스 게이트웨이(Service Gateway) (0) | 2024.12.16 |
링 버퍼(Ring Buffer) (0) | 2024.12.13 |
Circuit Breaker(서킷 브레이커) (1) | 2024.12.13 |
폴백(Fallback) (0) | 2024.12.13 |