Spring Cloud Gateway - Logging Filter Logging Filter는 커스텀 필터이다. LoggingFilter.java 생성 OrderGatewayFilter 형식 @Override public GatewayFilter apply(Config config) { GatewayFilter filter = new OrderedGatewayFilter((exchange, chain) -> {필터 내용}, 순서); return filter; } @Component @Slf4j public class LoggingFilter extends AbstractGatewayFilterFactory { public LoggingFilter() { super(Config.class); } @Ove..
분류 전체보기
Spring Boot Webflux 반응형 및 비동기적인 웹 애플리케이션 개발을 지원하는 모듈이다. 이 모듈은 Reactive Streams 사양을 기반으로 하여, 비동기적인 이벤트 지향 프로그래밍을 통해 높은 확장성과 성능을 제공한다. Webflux를 사용하는 목적은 반응형 프로그래밍을 통해 '높은 처리량'과 '확장성'을 갖는 애플리케이션을 만드는 것을 목표로 한다. [ 더 알아보기 ] 💡 Webflux는 Spring Framework 5.0부터 지원한다고 들었는데 Spring Boot는 몇 버전이 되어야 하는가? - Spring Framework 5.0은 Spring Boot 2.0 이상을 요구하므로 Webflux를 사용하는데 Spring Boot 2.0 이상 버전이 최소 요구사항이 됩니다. Webf..
Spring Cloud Filter - Global Filter 차이점 CustomFilter : Route마다 지정해줘야 한다. Global Filter 공통 필터 어떤 Filter보다 먼저 실행되고, 제일 마지막에 종료된다. GlobalFilter PRE CustomFilter PRE CustomFilter POST GlobalFilter POST 순으로 로그가 출력 될 것이다. Global Filter GlobalFilter.java 생성 @Component @Slf4j public class GlobalFilter extends AbstractGatewayFilterFactory { public GlobalFilter() { super(Config.class); } @Override public ..
Spring Cloud Gateway - CustomFilter 적용 apigateway-service 프로젝트 CustomFilter.java 생성 CustomFilter를 사용하려면 AbstractGatewayFilterFactory를 상속받아야 한다. @Component @Slf4j public class CustomFilter extends AbstractGatewayFilterFactory { public CustomFilter() { super(Config.class); } @Override public GatewayFilter apply(Config config) { // # Custom Pre Filter return ((exchange, chain) -> { ServerHttpReques..
[MSA] Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) - API Gateway Service 3 (Spring Cloud Gateway - Filter)
filter 종류 prefilter : 사전에 호출 postfilter : 사후에 호출 작업 방법 방법1) 자바코드로 작업 방법2) 프로퍼티(property)로 작업 predicate : 요청정보가 들어오면 어떤 것인지 판단 방법1) 자바 코드 작업 기존에 설정해둔 application.yml에서 routes를 주석처리 해준다. 자바코드로 작성해보자! apigateway-service 프로젝트 Config.java클래스 생성 @Configuration을 추가하게 되면 Spring Boot가 처음 Bootsrap에 의해서 작동을 하게 될 때 @Configuration이 달려있는 Annotation을 모아서 메모리에 먼저 등록하는 작업을 한다. 이때 등록하는 빈의 이름을 RoterLocator로 등록한다. ..
Spring Cloud Gateway 프로젝트 생성 dependencies: Lombok, Gateway, Eureka Discovery Client application.yml server: port: 8000 eureka: client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http;//localhost:8761/eureka spring: application: name: apigateway-service cloud: gateway: routes: - id: first-service uri: http://localhost:8081/ predicates: # 조건절 - Path=/first-service/..
API Gateway API Gateway Service는 사용자가 설정한 Routing 설정에 따라 각 endpoint(client side에서 microservice 주소를 직접 이용)로 client를 대신해서 요청하고, 응답을 받아서 다시 client에게 전달해주는 Proxy(대리인)역할을 한다. 시스템의 내부 구조는 숨기고 외부의 요청에 대해 적절한 형태로 가공해서 응답할 수 있는 장점이 있다. API Gateway Service가 없을 시에 client에서는 microservice를 호출할 때, client쪽에서 endpoint를 설정하게 된다. 그런데 만약 microservice의 설정이 변경되어 endpoint가 변경되거나, 새로운 microservice가 추가되어 이에 해당하는 endpoi..
싱글톤 빈과 함께 사용시 Provider로 문제 해결 싱글톤 빈과 프로토타입 빈을 함께 사용할 때, 어떻게 하면 사용할 때 마다 항상 새로운 프로토타입 빈을 생성할 수 있을 까? 방법1. .스프링 컨테이너에 요청 가장 간단한 방법은 싱글톤 빈이 프로토 타입을 사용할 때 마다 스프링 컨테이너에 새로 요청하는 것이다. import static org.assertj.core.api.Assertions.assertThat; public class PrototypeProviderTest { @Test void singletonClientUsePrototype() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Clie..
ERROR 내용 maven으로 프로젝트를 생성했다. 터미널에서 mvn --version으로 버전을 확인하려 했으나.. maven 설치를 안해둔 상황.. IntellJ는 maven을 자동으로 설치해주지 않는다. 그래서 maven 설치를 했다. cmd 에서는 maven 버전확인이 되는데, 터미널에서는 오류가 뜸.. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4# 해결 "시스템 환경 변수 편집"에 들어가서 IntelliJ IDEA보다는 위에 %SystemRoot%\syst..