Backend/JAVA 25

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

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

static 키워드

📌 1. static 키워드의 의미static은 "정적인"이라는 의미로, static을 붙이면 객체(instance)와 관계없이 클래스(class) 단위로 관리된다는 뜻이다! 즉, 클래스가 메모리에 로드될 때 한 번만 생성되며, 모든 객체가 공유한다. ✅ 2. static 키워드의 사용✅ 2-1. static 변수 (클래스 변수)모든 객체가 공유하는 변수! (인스턴스와 관계 없음)클래스명.변수명으로 접근 가능객체를 생성하지 않아도 사용 가능📖 예제class Counter { static int count = 0; // 모든 객체가 공유하는 변수 Counter() { count++; // 생성될 때마다 count 증가 }}public class Main { publi..

Backend/JAVA 2025.02.26

자바(Spring) 기본 예외 처리

📌1.  try-catch 문과 throws Exception 사용법기본적인 예외 처리는 다음 두 가지 방법으로 구현할 수 있다.✅ 1-1. try-catch 문try-catch 문은 코드 실행 중 발생하는 예외를 감지하고 처리하는 가장 일반적인 방식이다.로직을 중단하지 않고 즉각적인 예외 처리.Spring MVC에서 주로 Controller 📖 try-catch 예시try { int result = 10 / 0; // 예외 발생 (ArithmeticException)} catch (ArithmeticException e) { System.out.println("예외 발생: " + e.getMessage()); // 예외 메시지 출력 e.printStackTrace(); // 스택 ..

Backend/JAVA 2025.02.23

[Java] 비동기 작업 처리 (ExecutorService VS CompletableFuture)

📌 Java에서 비동기 작업 처리Java에서 비동기 작업을 처리하는 방법은 다양하지만, ExecutorService와 CompletableFuture가 가장 일반적이고 널리 사용된다.😆 ✅ 1. Thread 직접 사용Thread 클래스를 직접 생성하여 작업을 실행하는 방법. 📖 예제Thread thread = new Thread(() -> { System.out.println("비동기 작업 실행");});thread.start(); ✔ 장점간단한 작업에 적합. ❌ 단점스레드 풀 관리가 불가능하고, 직접 관리해야 해서 복잡해짐.성능 및 자원 관리 측면에서 비효율적. ✅ 2. ExecutorService스레드 풀을 관리하며 효율적으로 비동기 작업을 처리.Runnable 또는 Callable을 활용..

Backend/JAVA 2025.02.23