Spring 71

[Reactor] Backpressure

BackpressurePublisher와 Subscriber 간의 데이터 흐름을 제어하는 메커니즘Publisher가 끊임없이 내보내는 무수히 많은 데이터를 적절하게 제어하여 데이터 처리에 과부하가 걸리지 않도록 제어하는 역할Backpressure가 없다면 시스템이 과부하 되거나 메모리 부족 등의 문제가 발생할 수 있음과도한 데이터 생성: Publisher가 매우 빠르게 데이터를 생성할 때, 소비자가 그 데이터를 제시간에 처리하지 못하면 데이터가 쌓이게 됨리소스 제한: Subscriber는 제한된 리소스(메모리, CPU 등)를 사용하여 데이터를 처리하는데 Subscriber의 처리 속도가 Publisher의 생성 속도를 따라가지 못할 때 문제가 발생함시스템 안정성: Backpressure를 통해 시스템의 ..

[Reactor] Cold Sequence, Hot Sequence

컴퓨터 시스템에서의 Cold, Hot 의미Cold는 무언가를 새로 시작하고, Hot은 무언가를 새로 시작하지 않는다고 이해하는 것이 편함ex) 암호화폐의 Hot Wallet은 인터넷에 연결되어 있기 때문에 즉시 사용이 가능하지만 보안에 취약ex) 암호화폐의 Cold Wallet은 인터넷과 단절되어 있어서 사용성은 떨어지지만 보안이 강화됨 (사용하기 위해서는 인터넷에 다시 연결해야 함) SequencePublisher가 내보내는 데이터의 연속적인 흐름을 정의해 놓은 것코드로 표현하면 Operator 체인 형태로 정의 Cold SequenceSubscriber가 구독할 때마다 데이터 흐름이 처음부터 다시 시작되는 Sequence  부연 설명위 쪽에 위치한 Subscriber가 구독을 하면 Publisher는..

마블 다이어그램 (Marble Diagram)

마블 다이어그램리액티브 프로그래밍에서 사용되는 시각적 도구로, 스트림의 흐름과 데이터 변환을 이해하기 쉽게 표현한 것주로 RxJava나 Reactor와 같은 리액티브 라이브러리의 문서에서 자주 사용Reactor에서 지원하는 Operator를 이해하는 데 중요한 역할마블 다이어그램을 먼저 보고 난 후 API 문서를 읽을 때와 그렇지 않을 때의 이해도에는 상당한 차이가 존재처음 사용해 보는 Operator를 올바르게 이해하고 사용하기 위해서 해당 Operator의 API 설명을 보기 전 마블 다이어그램부터 먼저 확인하는 것을 권장  1. Publisher가 데이터를 내보내는 타임라인그림에서는 단순히 Publisher의 타임라인으로 표시했지만 해당 Publisher는 데이터 소스를 최초로 내보내는 Publis..

[Java] Reactor 간단 정리

ReactorSpring Framework 팀의 주도하에 개발된 리액티브 스트림즈의 구현체Spring Framework 5 버전부터 리액티브 스택에 포함되어 Spring WebFlux 기반의 리액티브 애플리케이션을 제작하기 위한 핵심 역할 담당간단하게 요약하면 리액티브 스트림즈의 구현체인 Reactor는 리액티브 프로그래밍을 위한 라이브러리 1. Reactor의 주요 특징Reactive Streams: 앞서 언급했다시피 Reactor는 리액티브 스트림즈 사양을 구현한 리액티브 라이브러리Non-Blocking: Reactor는 JVM 위에 실행되는 non-blocking 애플리케이션을 제작하기 위해 필요한 핵심 기술Java's Functional API: Reactor에서 Publisher와 Subscri..

[Java] 리액티브 프로그래밍

1. 리액티브 시스템과 리액티브 프로그래밍 1.1 리액티브 시스템(Reactive System)reactive의 사전적 의미는 `반응을 하는`이라는 뜻이며 어떤 이벤트나 상황이 발생했을 때, 반응을 해서 그에 따라 적절하게 행동하는 것을 의미리액티브 시스템은 `반응을 잘하는 시스템`이며 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화 1.2 리액티브 선언문(Reactive Manifesto)리액티브 선언문은 리액티브 시스템 구축을 위한 일종의 설계 원칙이자 리액티브 시스템의 특징리액티브 선언문을 통해 리액티브 시스템이 지향하는 바가 무엇인지 명확하게 알 수 있음리액티브 시스템의 설계 원칙에 따라 대규모 분산 시스템 또는 멀티코어 기반의 클라우드 시스템, 모바일 시스템 등 빠른 응답성을 바탕..

[Spring Security] OAuth 2.0 개요

개요이번 게시글에서는 OAuth 2.0에 대해 간략히 알아보겠습니다.OAuth 2.0을 이해하기 위해서는 아래의 개념을 알아야 하며 각각의 개념을 간략히 정리하겠습니다.인증과 인가의 차이OAuth 2.0 개념OAuth 2.0 구성 요소OAuth 2.0 Client OAuth 2.0 토큰OAuth 2.0 권한부여 유형 1. 인증 vs 인가OAuth 2.0 설명에 앞서 인증(Authentication)과 인가(Authroization)를 확실히 구분한 상태로 읽으시면 좋을 것 같습니다. 인증 (Authentication)클라이언트가 요청하는 주체가 자기 자신임을 입증하는 절차ex) 로그인 인가 (Authorization)인증받은 사용자가 어떤 권한을 갖고 있는지 체크하는 절차Role에 따라 부여받은 권한이 ..

[Spring Batch] Skip, Retry 정책

1. ItemReader Skip 기능만 제공 Retry 기능은 제공하지 않음 전체적인 흐름 Step 기능이 실행되고 RepeatTemplate 통해 반복해서 ChunkOrientedTasklet 실행시킴 ChunkOrientedTasklet은 FaultTolerantChunkProvider를 통해 Item을 읽어옴 FaultTolerantChunkProvider는 내부적으로 RepeatTemplate을 통해 ItemReader를 통해 한 건의 데이터를 반복적으로 읽어옴 예외가 발생하지 않으면 반복적으로 Item을 읽어옴 예외가 발생할 경우 Skip 기능이 설정되었는지 확인 Skip 기능이 활성화되지 않았거나 SkipLimit 횟수를 초과했을 경우 NonSkippableReadException 예외 발생..

Spring 2023.09.14

[Spring Batch] @JobScope,@StepScope

@JobScope, @StepScope @JobScope과 @StepScope 어노테이션이 붙은 Bean 선언 시 내부적으로 Bean의 Proxy 객체가 생성 두 어노테이션 모두 Bean의 Class Type 프록시 생성 @Scope(value= "job", proxyMode = ScopedProxyMode.TARGET_CLASS) @Scope(value = "step", proxyMode = ScopedProxyMode.TARGET_CLASS) Spring Framework의 핵심인 AOP를 활용해 Job 실행 시 Proxy 객체가 실제 Bean을 호출해서 해당 메서드를 실행시키는 구조 JdkDynamicAopProxy 즉, JobScope와 StepScope는 실제 대상이 되는 Bean을 동록 및 해..

Spring 2023.07.19

[Spring Batch] SimpleFlow 아키텍처

개요 FlowJob을 구성할 때 이해도 향상을 위해 SimpleFlow 아키텍처를 알아보겠습니다. FlowJob 아키텍처는 아래 글을 참고해 주세요. https://jaimemin.tistory.com/2302 [Spring Batch] FlowJob 아키텍처 개요 Job의 구현체는 아래와 같이 두 가지가 존재합니다. SimpleJob FlowJob SimpleJob 아키텍처는 https://jaimemin.tistory.com/2300에서 다루었고 이번 게시글에서는 FlowJob 아키텍처를 간단히 정리해보겠습니다 jaimemin.tistory.com SimpleFlow SimpleFlow는 start 메서드에 넘겨지는 파라미터에 따라 StateType 객체가 달라집니다. start, next, from..

Spring 2023.07.17

[Spring Batch] FlowJob 아키텍처

개요 Job의 구현체는 아래와 같이 두 가지가 존재합니다. SimpleJob FlowJob SimpleJob 아키텍처는 https://jaimemin.tistory.com/2300에서 다루었고 이번 게시글에서는 FlowJob 아키텍처를 간단히 정리해보겠습니다. [Spring Batch] SimpleJob 아키텍처 SimpleJob 간략 흐름 SimpleJob을 실행하면 Job->Step->Tasklet 순서로 실행이 되고 각 과정마다 메타데이터가 생성되어 DB에 저장이 됩니다. SimpleJob 아키텍처 1. JobLauncher가 JobParameters를 받고 JobInstance 신규 jaimemin.tistory.com FlowJob의 흐름 1. 처음에는 SimpleJob과 동일하게 시작합니다. ..

Spring 2023.07.11