반응형

spring 12

Liferay Service Builder 완전 가이드: 엔터프라이즈급 데이터 레이어 자동 생성 도구

Liferay Service Builder는 개발자들이 복잡한 데이터베이스 관련 코드를 직접 작성하지 않고도 비즈니스 로직을 구현할 수 있도록 도와주는 강력한 코드 생성 도구입니다. 이 도구는 단일 XML 파일을 기반으로 모델, 퍼시스턴스, 서비스 레이어를 자동으로 생성하는 객체-관계형 매핑(ORM) 도구로 작동합니다.Service Builder의 핵심 개념은 Model-Driven 코드 생성 방식으로, WEB-INF/service.xml 파일에 정의된 엔티티를 참조하여 필요한 모든 클래스들을 자동으로 생성해주는 것입니다. 이를 통해 개발자는 비즈니스 로직 구현에만 집중할 수 있게 됩니다.Service Builder의 주요 기능과 장점자동 생성되는 레이어 구조Service Builder는 세 가지 핵심 ..

[WebFlux] Scheduler의 역할과 활용 방법

Spring WebFlux는 Reactor 프로젝트를 기반으로 비동기·논블로킹 애플리케이션을 구축합니다. 이 환경에서 Scheduler는 스레드 관리를 담당하며, 병렬 처리와 리소스 최적화의 핵심 요소입니다. 1. Scheduler 기본 개념 1.1 물리 스레드 vs 논리 스레드구분설명물리 스레드CPU 코어 수에 해당, 하드웨어적으로 생성 (예: 8코어 CPU → 8물리 스레드)논리 스레드소프트웨어적으로 생성·관리, 동시성 구현을 위해 사용 1.2 Scheduler의 역할스레드 풀 관리: 작업을 적절한 스레드에 할당실행 컨텍스트 제어: subscribeOn, publishOn과 조합해 실행 흐름 최적화리소스 제한: 스레드 개수, 대기 큐 크기 등을 제어해 시스템 과부하 방지 2. 주요 Schedule..

[WebFlux] 리액티브 스트림즈 Sinks: 핵심 개념과 활용 가이드

Reactor의 Sinks는 리액티브 스트림즈에서 프로그래밍 방식으로 Signal을 전송하는 표준 메커니즘입니다. 기존 Processor의 한계를 극복하고, 멀티스레드 환경에서 안정적인 데이터 방출을 보장합니다.(Reactor 3.4.0+부터 도입, Processor는 3.5.0+에서 deprecated) 1. Sinks의 주요 특징Signal 수동 방출: onNext, onComplete, onError를 코드로 직접 제어 가능스레드 안전성(Thread Safety): 동시 접근 시 경쟁 조건 방지 (예: FAIL_FAST 전략)다중 구독자 지원: unicast, multicast, replay 등 다양한 전략 제공백프레셔 관리: 구독자의 요청에 따른 자동 흐름 제어 2. Sinks 종류 및 사용법..

WebFlux Cold Sequence와 Hot Sequence: 데이터 흐름의 두 가지 방식

리액티브 프로그래밍에서 Cold Sequence와 Hot Sequence는 데이터 발행 방식을 결정하는 핵심 개념입니다. 이 두 방식은 구독자(Subscriber)와의 관계와 데이터 처리 타이밍에 근본적인 차이를 가지며, Spring WebFlux 환경에서 효율적인 시스템 설계를 위해 반드시 이해해야 합니다. 1. Cold Sequence: 매번 새로 시작되는 데이터 흐름정의Cold Publisher가 생성하는 데이터 흐름각 구독 발생 시마다 데이터 스트림을 처음부터 재생성독립적인 데이터 처리 파이프라인 제공특징독립적 실행: 구독자마다 별도의 데이터 스트림 생성Flux coldFlux = Flux.just("A", "B", "C") .map(String:..

[WebFlux] 마블 다이어그램(Marble Diagram): 리액티브 프로그래밍의 시각적 도구

마블 다이어그램은 리액티브 프로그래밍에서 데이터 흐름과 연산자(Operator)의 동작을 시각적으로 표현하는 강력한 도구입니다. 특히 Reactor와 같은 리액티브 라이브러리에서 비동기 데이터 흐름을 이해하고 설계하는 데 큰 도움이 됩니다. 이번 글에서는 마블 다이어그램의 개념, 구성 요소, 그리고 활용 방법에 대해 알아보겠습니다.마블 다이어그램이란?마블 다이어그램은 구슬 모양의 도형으로 구성된 도표로, 데이터 흐름과 연산자의 동작을 시간의 흐름에 따라 시각적으로 표현합니다. 이는 복잡한 비동기 로직을 이해하고 설계하는 데 매우 유용한 도구입니다.마블 다이어그램의 주요 특징구슬 모양의 표현각 구슬은 특정 데이터를 나타내며, 구슬의 흐름은 데이터 스트림을 의미합니다.Operator 이해다양한 연산자의 동작..

Reactor: Spring WebFlux의 리액티브 스트림즈 구현체

Reactor는 Spring WebFlux의 핵심 라이브러리로, 비동기 데이터 스트림을 처리하기 위한 리액티브 스트림즈 구현체입니다. Spring Framework 5부터 공식적으로 채택되어 사용되고 있으며, 비동기 프로그래밍 모델을 통해 효율적인 리소스 사용과 확장성을 제공합니다. Reactor의 핵심 특징리액티브 스트림즈 구현Reactor는 리액티브 스트림즈 사양을 준수하는 라이브러리로, 비동기 데이터 처리를 위한 표준 인터페이스를 구현합니다. 이를 통해 Publisher, Subscriber, Subscription, Processor와 같은 리액티브 스트림즈의 핵심 인터페이스를 제공합니다. 비동기 논블로킹 처리Reactor는 비동기 논블로킹 방식으로 작동하여 적은 수의 스레드로 많은 요청을 처리할..

Spring WebFlux와 리액티브 프로그래밍의 기초: 함수형 인터페이스부터 함수 디스크립터까지

Spring WebFlux는 리액티브 프로그래밍 패러다임을 기반으로 한 프레임워크로, 비동기-논블로킹 방식의 애플리케이션 개발을 지원합니다. 이 글에서는 WebFlux의 핵심 개념인 리액티브 프로그래밍의 기본 요소들을 살펴보겠습니다. 함수형 인터페이스는 Java 8부터 도입된 개념으로, 단 하나의 추상 메서드만을 가진 인터페이스를 말합니다. @FunctionalInterface 애노테이션을 사용해 명시적으로 표현할 수 있습니다. 예를 들어:@FunctionalInterfacepublic interface MyFunction { void execute(String input);}    람다 표현식은 이러한 함수형 인터페이스를 간결하게 구현할 수 있는 방법을 제공합니다. 기본 구문은 (파라미터) -> ..

리액티브 스트림즈(Reactive Streams) 핵심 정리

리액티브 스트림즈는 비동기·논블로킹 환경에서 데이터 스트림을 처리하기 위한 표준 사양으로, 대규모 트래픽 처리와 시스템 효율성 향상에 기여합니다.1. 주요 용어▷ SignalPublisher와 Subscriber 간 주고받는 상호작용 메시지 (예: onNext, onComplete).데이터 상태/이벤트를 전달하는 신호.▷ DemandSubscriber가 요청했으나 아직 처리되지 않은 데이터의 양.▷ EmitPublisher가 onNext를 통해 데이터를 발행하는 행위.▷ Upstream/DownstreamUpstream: 현재 메서드보다 상위의 데이터 소스 (예: just → filter에서 just는 Upstream).Downstream: 하위 처리 단계 (예: filter → map에서 map은 Do..

Blocking I/O와 Non-Blocking I/O: 개념과 WebFlux에서의 활용

Blocking I/O와 Non-Blocking I/O는 시스템의 성능과 효율성을 결정짓는 중요한 개념입니다. 특히, Spring WebFlux는 Non-Blocking I/O를 기반으로 설계되어 대량의 요청을 효율적으로 처리할 수 있도록 돕습니다. 이 글에서는 두 방식의 차이점과 활용 방안을 살펴보겠습니다.1. Blocking I/O란?Blocking I/O는 요청 스레드가 I/O 작업이 완료될 때까지 대기하는 방식입니다. 이는 간단하고 직관적이지만, 대량의 요청을 처리할 때 다음과 같은 문제를 야기합니다:스레드 대기: 하나의 요청이 완료될 때까지 다른 요청은 대기 상태에 놓입니다.컨텍스트 스위칭 비용: 다수의 스레드가 생성되면, CPU가 작업 전환에 많은 시간을 소비하게 됩니다.자원 낭비: 유휴 상태..

[WebFlux 심층 분석] 리액티브 스트림즈 컴포넌트 구현 및 Kafka와의 비교

리액티브 스트림즈는 비동기적이고 Non-Blocking 방식의 데이터 처리를 위한 표준입니다. 이 글에서는 리액티브 스트림즈의 주요 컴포넌트 구현과 Apache Kafka와의 차이점을 살펴보겠습니다. 리액티브 스트림즈 주요 컴포넌트Publisherpublic class MyPublisher implements Publisher { private final List> subscribers = new ArrayList(); @Override public void subscribe(Subscriber subscriber) { subscribers.add(subscriber); subscriber.onSubscribe(new MySubscription(subscriber..

반응형