BackEnd 85

Spring WebFlux 심화 시리즈 (4) - WebClient를 활용한 대용량 데이터 처리

WebClient는 WebFlux의 비동기 HTTP 클라이언트로, 외부 API 호출 시 Non-Blocking 통신을 가능하게 한다. 대용량 데이터를 받아야 하는 경우, 효율적인 WebClient 사용법이 중요하다.1. 기본 개념WebClient는 응답을 받으면서 스트리밍 처리가 가능하다.응답 전체를 기다리지 않고 데이터 조각(chunk)을 받을 수 있다.특히 대량 데이터(API 응답이 수 MB 이상)일 때 유리하다.2. 실전 예제2.1 WebClient 설정@Beanfun webClient(builder: WebClient.Builder): WebClient { return builder.baseUrl("https://external.api.com").build()}2.2 대량 데이터 호출 예시@..

Spring WebFlux 심화 시리즈 (3) - Flux로 페이징 처리하는 방법

Spring WebFlux 심화 시리즈 (3) - Flux로 페이징 처리하는 방법대량의 콘텐츠를 WebFlux로 스트리밍할 때, 모든 데이터를 한 번에 클라이언트로 보내는 것은 비효율적이다. 특히 데이터가 수천 건 이상일 경우, 반드시 페이징 처리가 필요하다. 이 글에서는 WebFlux 환경에서 Flux를 이용해 페이징 처리하는 방법을 정리한다.1. 기본 개념전통적인 MVC에서는 PageRequest를 사용해 DB 쿼리 단계에서 페이징한다.WebFlux에서도 원칙은 같다: DB 쿼리에서 필요한 데이터만 가져와야 한다.Flux를 사용하더라도, 전체 데이터를 Flux로 읽고 나서 자르는 것은 비효율적이다.2. 실전 예제 (R2DBC 기준)2.1 ContentService 예시@Serviceclass Cont..

Spring MVC vs Spring WebFlux 시리즈 (2) - 콘텐츠 리스트를 WebFlux로 반환하는 방법

WebFlux에서는 데이터가 여러 건일 때 어떻게 처리할까? 이 글에서는 콘텐츠 리스트를 WebFlux 방식으로 반환하는 실질적인 방법을 정리한다.1. 기본 상황 정리콘텐츠 리스트 (예: 게시글 목록, 동영상 목록 등)= 여러 건의 데이터 반환= WebFlux에서는 Flux로 처리한다.2. 핵심 포인트항목설명반환 타입Flux (0개 ~ N개)컨트롤러 어노테이션@RestController, @GetMapping (Annotation 기반)데이터 준비비동기 방식 (Reactive Repository 또는 Service)DB 연동R2DBC (Reactive DB 드라이버) 사용 추천3. 예제 코드 (Spring WebFlux)3.1 Content 모델 예시data class Content( val id:..

Spring MVC vs Spring WebFlux 시리즈 (1) - 왜 WebFlux를 선택하는가?

Spring 생태계에는 두 가지 웹 프레임워크가 존재한다: Spring MVC와 Spring WebFlux. 둘 다 웹 애플리케이션을 개발하는 데 사용되지만, 내부 아키텍처와 동작 방식에 명확한 차이가 있다. 이 글에서는 MVC와 WebFlux를 비교하고, Blocking과 Non-Blocking의 기술적 차이까지 포함해 정리한다.1. 기본 비교: Spring MVC vs Spring WebFlux항목Spring MVCSpring WebFlux처리 모델동기 (Blocking)비동기 (Non-Blocking)요청당 쓰레드요청마다 하나 점유필요할 때만 쓰레드 사용API 스타일@RestController@RestController, RouterFunction지원 데이터베이스JDBC, JPA (Blocking)..

QueryDSL 1:N처리[수정예정]

공부 하다가 만들거여서 테이블에 관한 설명과 QueryDSL에서 적용이 안될수도 있습니다.이런 방식이라고 어느정도 파악용도로 작성합니다.코드 테스트후 수정 예정입니다.-- 임의의 테이블 생성-- 사용자 계정CREATE TABLE UserAccount ( account_id SERIAL PRIMARY KEY, account_code VARCHAR(50), account_type VARCHAR(50), account_status VARCHAR(50));-- 사용자 정보CREATE TABLE UserProfile ( profile_id SERIAL PRIMARY KEY, profile_code VARCHAR(50), user_name VARCHAR(100));-- 사용자 ..

BackEnd/Spring Boot 2025.01.30

함수 호출 오버헤드가 발생 이란?

reduce에서 "함수 호출 오버헤드가 발생한다"는 말은 reduce 메서드가 전달받은 콜백 함수를 요소마다 실행하기 때문에, 반복적으로 함수 호출이 이루어지는 과정에서 성능 비용이 발생한다는 뜻입니다.1. 함수 호출의 동작자바스크립트나 자바 같은 언어에서 함수가 호출될 때, 다음 작업이 이루어집니다:스택에 함수 호출 기록을 추가 (Call Stack에 Push).함수의 매개변수와 내부 변수들을 메모리에 저장.함수가 실행되고 결과를 반환.호출 기록을 스택에서 제거 (Call Stack에서 Pop).이러한 과정은 반복적으로 발생하면 성능에 영향을 미칠 수 있습니다. reduce는 각 요소에 대해 콜백 함수(Accumulator Function)를 호출하므로, 요소 수가 많을수록 함수 호출 횟수가 많아집니다..

BackEnd 2025.01.19

명령형과 선언형 차이[이론]

1. 명령형 스타일에서 함수를 사용하는 경우명령형 스타일은 **"어떻게 수행할지(how)"**를 세부적으로 명시합니다. 함수로 분리하여 코드를 더 읽기 쉽게 만들 수도 있지만, 여전히 실행 순서와 상태 관리를 명확히 드러냅니다.예제// 명령형: 함수로 분리function calculateSum(numbers) { let sum = 0; // 상태를 명시적으로 관리 for (let i = 0; i 특징명령형 스타일은 반복문, 변수 업데이트와 같은 상태 변경을 직접 명시합니다.함수로 분리했더라도 내부적으로 루프와 상태 변화가 명시적으로 나타나며, 이를 통해 결과를 계산합니다.코드의 논리 흐름이 "각 단계별로 명확하게 보이는" 방식입니다.명령형의 본질: "어떻게 동작할지"를 세부적으로 기술합니다.2. 선언..

BackEnd 2025.01.19

함수형 프로그래밍의 장단점

장점1. 병렬 처리 및 동시성에 유리함수형 프로그래밍에서는 불변성과 순수 함수 덕분에 병렬 처리가 안전하며 동시성 문제를 줄일 수 있습니다.Java 예제import java.util.Arrays;import java.util.List;public class FunctionalExample { public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); // Stream API를 사용하여 병렬 처리 int sum = numbers.parallelStream() .map(x -> x * 2) // 각 요소를 2배로 ..

BackEnd 2025.01.19

함수형 프로그래밍이란?

함수형 프로그래밍(Functional Programming)은 프로그래밍 패러다임 중 하나로, 프로그램을 수학적 함수의 조합으로 표현하고 **상태 변화와 부수 효과(Side Effect)**를 최소화하는 것을 목표로 합니다. 이 패러다임은 순수 함수를 기반으로 하며, 데이터를 변형하거나 상태를 변경하지 않고 결과를 도출하는 데 초점을 둡니다.핵심 개념순수 함수(Pure Function)동일한 입력에 대해 항상 동일한 출력을 반환하는 함수입니다.외부 상태를 변경하지 않고 부수 효과(Side Effect)가 없습니다.예:// 순수 함수의 예const add = (a, b) => a + b;console.log(add(2, 3)); // 항상 5 반환불변성(Immutability)데이터는 변경되지 않고, 변경..

BackEnd 2025.01.19

헥사고날 아키텍처(Hexagonal Architecture)_ 추가 수정 필요

1. 헥사고날 아키텍처란?헥사고날 아키텍처(Hexagonal Architecture)는 시스템을 여러 모듈로 분리하여 유지보수성과 확장성을 높이기 위해 고안된 소프트웨어 설계 패턴입니다. 2005년 Alistair Cockburn이 제안했으며, 포트 & 어댑터 아키텍처(Ports and Adapters Architecture)라고도 불립니다.2. 주요 개념의존성 분리애플리케이션 코어(Core)를 외부 시스템(데이터베이스, 메시징, UI 등)과 완전히 분리합니다. 느슨한 결합핵심 비즈니스 로직은 외부 구현 세부사항에 의존하지 않고, 포트(Ports)와 어댑터(Adapters)를 통해서만 통신합니다. 유연한 확장·변경외부 시스템을 바꿀 때 코어를 수정할 필요가 없습니다.3. 주요 요소코어(Core) 비..

BackEnd 2024.08.27