728x90

All 199

Spring WebFlux에서 MySQL을 사용하는 방법: JDBC vs R2DBC 완전 정리

Spring WebFlux를 사용할 때 가장 헷갈리는 부분이 있다. 바로 "DB 연결은 어떻게 하지?" "JPA를 쓸 수는 없을까?" 하는 문제다.이 글에서는 WebFlux에서 MySQL을 어떻게 연결하고, R2DBC를 어떻게 사용하는지, 그리고 JPA를 왜 사용할 수 없는지를 순서대로, 쉽게 정리한다.1. WebFlux에서 DB(MySQL) 연결 방법Spring WebFlux는 기본적으로 Non-Blocking 처리를 목표로 한다. 그렇기 때문에 데이터베이스 연결 역시 Non-Blocking 드라이버를 사용해야 성능을 제대로 발휘할 수 있다.✅ WebFlux에서 MySQL을 연결하려면 R2DBC 드라이버를 사용해야 한다.1.1 필요한 의존성 추가 (Gradle)dependencies { imple..

부록 - Spring Boot MVC vs Spring WebFlux 비교

Spring Boot MVC와 Spring Boot WebFlux는 개발자가 작성하는 코드 스타일은 비슷하지만, 내부 구조, 기술 스택, 처리 방식이 본질적으로 다르다. 이 글에서는 MVC와 WebFlux를 특징 요약, 흐름도, 비교 테이블, 사용 기술 스택 중심으로 깔끔하게 정리한다.0. Spring MVC vs Spring WebFlux - 특징 요약📌 Spring MVC 특징Servlet API 기반 전통적인 웹 애플리케이션 프레임워크Blocking 방식: 요청 처리 동안 쓰레드를 점유개발 난이도 낮음: 코드가 직관적이고, 동기 흐름Blocking 데이터베이스 (JDBC, JPA) 사용에 최적화전통적인 웹사이트, 사내 시스템에 적합📌 Spring WebFlux 특징Reactive Streams ..

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)..

[React-Vite-Remind] 기본 환경 설정

React + Vite프로젝트 구조my-vite-app/├── node_modules/ # 설치된 의존성├── public/ # 정적 파일 (favicon, 이미지 등)│ └── vite.svg # Vite 기본 로고├── src/ # 소스 코드│ ├── assets/ # 이미지, 스타일 등 정적 파일│ ├── components/ # React 컴포넌트 폴더│ ├── App.css # 메인 CSS 파일│ ├── App.jsx # App 컴포넌트│ ├── main.jsx # React DOM 렌더링 진입점│ ├── index.css # ..

FrontEnd/React-vite 2025.02.15

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

WEBP회전 오류

이미지를 웹에서 빠르게 노출하기 위한 최적화 방법: WEBP와 AVIF웹 사이트에서 이미지를 빠르게 로드하기 위해, 많은 개발자들이 이미지 파일을 최적화하고 있습니다. 특히 WEBP와 같은 이미지 포맷은 높은 압축률과 뛰어난 품질로 널리 사용되고 있습니다. 하지만 최근 프로젝트에서 WEBP 이미지가 일부 회전된 상태로 노출되는 문제가 발견되었고, 이를 해결하기 위해 다양한 방법을 탐구한 경험을 공유합니다.문제 상황: WEBP 이미지의 회전 이슈이미지 최적화를 위해 기존 JPEG나 PNG 이미지를 WEBP로 변환하여 사용하고 있었습니다. 하지만 몇몇 이미지를 확인해보니, 웹 페이지에서 정상적으로 표시되지 않고 회전된 상태로 노출되는 문제가 있었습니다.문제를 분석한 결과, 이와 같은 현상은 사진에 포함된 회..

FrontEnd 2025.01.20

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

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

BackEnd 2025.01.19
728x90