Backend 66

Streaming이란?

📌 1. Streaming이란?Streaming은 데이터를 한 번에 모두 보내는 게 아니라, 조각(chunk) 단위로 나눠서 순차적으로 전송하는 방식이다. 📖 예를 들어:대용량 파일 전송 시 전체를 다 들고 있지 않고 조금씩 읽고 보내는 방식채팅, 로그, 실시간 알림 등 계속 이어지는 데이터를 실시간으로 전달하고 싶을 때 사용나는 ai API 응답을 사용자에게 빨리 보여주기 위해 사용했다!!📌 2. Reactive Stream 기본 개념Reactive Stream은 비동기 + 논블로킹 방식으로 데이터 흐름(스트림)을 처리하는 기술이다.Java에서는 이를 Flux, Mono 같은 클래스로 표현하며, Spring WebFlux는 이를 기반으로 작동하는 비동기 웹 프레임워크다.📌 3. Mono vs F..

Backend/JAVA 2025.12.18

대량 DB INSERT 최적화

📌 대량 DB INSERT 최적화CSV파일을 읽어 사용자 일괄 등록하는 기능 구현함.성능/메모리 고려 필요 ➡ 영향주는 요소 알아보고 테스트해보기로 함!📌 1. 대량 Insert 시 반드시 고려해야 하는 핵심 요소(메모리 + 성능 개요)🔹 트랜잭션 크기(성능) → 너무 큰 트랜잭션 = DB 로그 폭증 → 500~1000건마다 커밋 권장 🔹 네트워크/DB 부하(성능) → DB 성능 낮으면 배치 사이즈 더 줄이기 🔹 파일 파싱(메모리) → DTO → Entity 변환 과정에서 메모리 증가 → 스트리밍 방식 활용 🔹 오류 처리 전략(트랜잭션 정책) → 실패 데이터만 재처리할지? → 전체 롤백인지?→ 요구사항 따라 처리 방식 달라짐📌2. 메모리 이슈: CSV 파싱·저장 방식이 메모리에 미치는 영향..

Backend/JAVA 2025.11.29

파일 업로드, 다운로드 (MultipartFile)

📌 1. MultipartFile이란?MultipartFile은 Spring이 제공하는 파일 업로드를 위한 내장 인터페이스. multipart/form-data 요청을 처리할 수 있고, 파일 데이터를 다룰 수 있다. ✅ 1-1. MultipartFile 주요 특징스프링이 자동으로 파일을 바인딩해 줌.단일 파일 & 다중 파일 업로드 가능@ModelAttribute, @RequestParam과 함께 사용파일 이름, 크기, 확장자, 바이너리 데이터 접근 가능 ✅ 1-2. 주요 메서드메서드설명getOriginalFilename()업로드된 파일의 원본 이름 가져오기getSize()파일 크기 (바이트 단위)getContentType()파일의 MIME 타입 확인getBytes()파일을 byte 배열로 변환getI..

Backend/JAVA 2025.11.08

Connection Pool과 Size 선정 기준 (with HikariCP)

🔍 1. 커넥션 풀(Connection Pool)이란?데이터베이스와 연결(Connection)을 미리 만들어 풀(Pool)에 보관해두고, 요청이 들어오면 즉시 꺼내서 사용하고 다시 반납하는 구조. ✅ 장점매번 DB 연결을 새로 만들지 않아도 돼서 속도 빠름DB 커넥션 수를 제한해 과부하 방지 🔍 2. HikariCP란?Spring Boot의 기본 커넥션 풀 구현체.빠르고 가벼운 커넥션 풀로, 성능이 뛰어나서 널리 쓰인다.📌 3. HikariCP 설정✅ 3-0. yaml 예시spring: datasource: hikari: maximum-pool-size: 30 minimum-idle: 30 idle-timeout: 60000 connection-timeo..

MSA 필수 개념

📌 1. 서비스 등록 & 통신 ✅ 1-1. Spring CloudSpring Framework를 기반으로 한 마이크로서비스 아키텍처(MSA)에서 사용할 수 있는 도구와 라이브러리 모음!!서비스 간 통신, 설정 관리, 로드밸런싱, 장애 처리, 메시징 등을 편리하게 지원 📊 주요 기능 / 구성 요소기능Spring Cloud 모듈설명서비스 등록 & 검색Eureka서비스가 어디에 있는지 등록하고 조회로드밸런싱Spring Cloud LoadBalancer클라이언트 측에서 요청을 여러 인스턴스로 분산API GatewaySpring Cloud Gateway단일 진입점에서 라우팅, 필터링, 로드밸런싱 지원설정 관리Spring Cloud Config분산 서비스의 공통 설정을 중앙에서 관리메시징Spring Cloud ..

JUnit 단위 테스트 적용, JaCoCo 커버리지 측정

📌 목차JUnit이란?JUnit 적용 방법JUnit 적용 예시DB 연동 단위 테스트 방법테스트 실행테스트 커버리지란?테스트 커버리지 측정 방법 - JaCoCo한글 경로 문제 해결 방법테스트 결과 확인 🎯 0.JUnit 단위 테스트 적용하기기존 테스트 코드를 작성하지 않고 직접 프로그램을 로컬에서 실행해서 테스트하고 있었다. => 코드 변경 시 마다 기능을 재테스트 하는데 시간이 소요되고, 테스터가 놓치는 부분이 있을 수 있음.이를 개선하기 위해 JUnit 기본 사용법을 알아보고 ‘일정 시스템’에 적용해보기로 했다!! 📌 1. JUnit이란?Java에서 가장 많이 쓰이는 단위 테스트 프레임워크역할: 테스트 작성 → 자동 실행 → 결과 확인Spring Boot에서는 spring-boot-starter-..

Backend/JAVA 2025.08.27

Stream API란? (for-loop와 비교)

📌 1. Stream API란?Stream API는 Java 8에서 도입된 기능으로, 컬렉션(List, Set 등)이나 배열의 데이터를 함수형 스타일로 처리할 수 있는 API. 간결하고 직관적인 코드를 작성할 수 있으며, 반복문보다 가독성이 좋고 병렬 처리도 지원한다. 📌 2. Stream의 특징원본 데이터를 변경하지 않음 (불변성 유지)중간 연산(Intermediate)과 최종 연산(Terminal)으로 나뉨병렬 처리(parallelStream()) 가능 📌 3. Stream API 기본 동작 흐름Stream API는 "데이터(Stream) 생성 → 중간 연산 (필터링, 변환 등) → 최종 연산 (리스트로 변환, 출력 등) " 의 구조로 작동한다. 📖 예제: 숫자 리스트에서 짝수만 골라 제곱 후..

Backend/JAVA 2025.08.09

[Spring, JSP] session 생성 차단

jwt 방식 로그인을 사용하기 때문에 세션을 생성하지 않도록 Spring Security 에서 아래와 같이 설정했다.근데도 JSESSIONID가 생기고 있었다. 나는 jsp를 사용하는게 문제였다!!📌 1. 목적: 완전한 무상태(Stateless) 서버 만들기Spring Security에서 SessionCreationPolicy.STATELESS를 설정JWT 기반 인증이나 토큰 기반 인증을 쓸 때는 세션이 필요 없으므로, JSESSIONID 쿠키도 없어야 정상.http .cors(Customizer.withDefaults()) .csrf(csrf -> csrf.disable()) .sessionManagement(session -> session .sessionCreation..