API Gateway는 클라이언트와 여러 마이크로서비스 사이에서 중앙 집중적인 API 관리 역할을 하는 컴포넌트다. API 요청을 받아 적절한 서비스로 전달하고, 인증, 로드 밸런싱, 캐싱, 로깅 등의 기능을 제공한다.
/users/1 요청이 User Service로 라우팅됨Spring Boot 프로젝트에 아래 의존성을 추가
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
@SpringBootApplication
@EnableDiscoveryClient
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
}
}
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/users/**
/users/** 경로의 API 요청이 USER-SERVICE로 전달됨API Gateway에서 JWT 토큰을 검증하는 필터를 추가할 수 있다.
@Component
public class JwtAuthFilter extends AbstractGatewayFilterFactory<JwtAuthFilter.Config> {
public JwtAuthFilter() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
String token = exchange.getRequest().getHeaders().getFirst(HttpHeaders.AUTHORIZATION);
if (token == null || !validateToken(token)) {
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
};
}
private boolean validateToken(String token) {
// JWT 검증 로직
return true;
}
public static class Config {
// 필터 설정 옵션
}
}
API Gateway는 마이크로서비스 아키텍처에서 API 관리를 효율적으로 수행할 수 있도록 도와주는 필수적인 요소다. Spring Cloud Gateway와 같은 도구를 활용하면 쉽게 API Gateway를 구축하고 인증, 로드 밸런싱 등의 기능을 적용할 수 있다.