Filter란? Dispatcher Servlet에 Request(요청)가 전달되기 전/후에 URL 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공하는 것 J2EE 표준 스펙 기능 ⇒ Java Servlet에서 제공 또한, Filter는 FilterChain을 통해 여러 Filter가 연쇄적으로 동작하게 할 수 있습니다. Filter의 메서드 필터를 추가하기 위해서는 `javax.servlet`의 `Filter` 인터페이스를 구현해야 합니다. `Filter` 인터페이스는 다음의 3가지 메서드를 가지고 있습니다. `init()` `doFilter` `destroy` public interface Filter { public default void init(FilterConfig fil..
Interceptor(인터셉터)란? Interceptor는 Controller가 요청을 처리하기 전/후 처리를 위한 것으로, Spring MVC에서 HTTP 요청을 가로채 처리하는 컴포넌트 입니다. 클라이언트의 요청이 Controller로 전달되기 전에 사전 작업을 수행하거나, Controller의 실행 이후 사후 작업을 수행할 수 있습니다. 즉, 서버에 들어온 Request 객체가 Controller의 Handler로 도달하기 전에 확인해 개발자가 원하는 추가적인 작업을 수행한 뒤, Handler로 보낼 수 있도록 해주는 것이 Interceptor 입니다. Interceptor를 사용하면 공통 코드 사용으로 코드의 재사용성이 증가합니다. 또한, 로깅, 모니터링 정보 수집, 접근 제어 처리 등의 실제 비..
Reactor에서의 디버깅 방법 Reactor는 처리되는 작업들이 대부분 비동기적으로 실행되고, Reactor Sequence는 선언형 프로그래밍 방식으로 구성되므로 디버깅이 쉽지 않습니다. 이러한 디버깅의 어려움을 최소화하기 위해 Reactor에서는 몇 가지 방법을 제공합니다. 1. Debug Mode를 사용한 디버깅 Reactor에서는 디버그 모드(Debug Mode)를 활성화해서 Reactor Sequence를 디버깅할 수 있습니다. @Slf4j public class DemoApplication { public static Map fruits = new HashMap(); static { fruits.put("banana", "바나나"); fruits.put("apple", "사과"); fruit..
Context란? Context는 어떠한 상황에서 그 상황을 처리하기 위해 필요한 정보 라고 할 수 있습니다. 프로그래밍에서 몇 가지 예시를 들어보면 다음과 같습니다. ServletContext := Servlet이 Servlet Container와 통신하기 위해서 필요한 정보를 제공하는 인터페이스 ApplicationContext := Spring Framework에서 애플리케이션의 정보를 제공하는 인터페이스 SecurityContext := Spring Security에서 애플리케이션 사용자의 인증 정보를 제공하는 인터페이스 이처럼 프로그래밍 세계에서 Context는 어떠한 상황을 처리하거나 해결하기 위해 필요한 정보를 제공하는 어떤 것이라고 할 수 있습니다. Java에서는 인터페이스 또는 클래스가 ..
Reactor에서 사용되는 Siganl을 프로그래밍 방식으로 전송할 수 있는 Sinks에 대해 알아봅시다. Sinks란? Sinks는 앞서 설명했던, Processor 인터페이스의 기능을 개선한 것입니다. Sinks에 대해 Reactor API 문서에서는 다음과 같이 설명하고 있습니다. 첫 문장을 보면, "Sinks는 리액티브 스트림즈의 Signal을 프로그래밍 방식으로 push 할 수 있는 구조이며, Flux or Mono의 의미 체계를 가진다" 라고 설명하고 있습니다. 지금까지 설명했던 방식은 모두 Flux 또는 Mono가 onNext 같은 Signal을 (메서드 체이닝을 이용해서)내부적으로 전송해주는 방식이었는데, Sinks를 사용하면 프로그래밍 코드를 통해 명시적으로 Signal을 전송할 수 있습..
Backpressure 란? Backpressure는 우리말로 배압 또는 역압이라고 합니다. 배관으로 유입되는 가스나 액체 등의 흐름을 제어하기 위해 역으로 가해지는 압력을 의미합니다. 리액티브 프로그래밍에서는 Publisher가 끊임없이 emit 하는 무수히 많은 데이터를 적절하게 제어해 데이터 처리에 과부하가 걸리지 않도록 제어하는 것이 Backpressure의 역할입니다. Publisher가 data 1부터 N까지를 emit하는 상황을 생각해봅시다. 먼저, Publisher가 data 1을 Subscriber에서 emit 합니다. 하지만, Subscriber가 data 1을 처리하는 속도가 느려서 처리가 끝나기도 전에, Publisher는 data 2부터 data N까지 계속해서 emit하게 됩니다..