Backend 69

멀티 모듈 (Multi-module)이란?

msa 프로젝트 구성 중 각 시스템(서비스)에서 공통으로 필요로 하는 코드들이 많았다.이 중복을 줄이기 위해서 멀티 모듈로 관리하는 방법이 있다는 걸 알게되었다.결론적으로 내 프로젝트에는 멀티모듈 구조가 적합하지 않다고 판단해서 적용하지 않았지만, 멀티 모듈에 대해 알아본 것들을 정리했다! 🔍1. 멀티 모듈 (Multi-module)이란?멀티 모듈은 하나의 큰 프로젝트 내에서 여러 개의 모듈을 정의하는 방식.단일 애플리케이션에서 여러 모듈로 나누어 관리하는 방식MSA에서는 서비스 간의 의존성 관리나, 공통 라이브러리 등을 관리하기 위해 멀티 모듈을 사용할 수 있다.예시: common-utils라는 모듈을 만들고, 여러 서비스가 이 모듈을 의존성으로 추가하여 공통 기능(로그 처리, 유효성 검사, 예외 ..

Spring Boot DTO ↔ Entity 변환 방법

📌 왜 DTO ↔ Entity 변환이 필요한가?Entity는 DB 모델이고, DTO는 입출력·뷰 모델이기 때문.엔티티를 그대로 노출하면 보안·커플링·유효성 검증·API 스펙 분리 문제가 생기므로,DTO로 변환해서 외부와 내부를 분리하는 것이 Spring 실무 표준이다. 📌 객체 변환 3가지 방법 비교Spring Boot에서 DTO ↔ Entity 변환 시 대표적으로 아래 3가지를 비교할 수 있다. 📍 비교 기준컬렉션(List) 변환연관 관계 필드 변환 (예: User → Address 포함)타입 변환 (예: LocalDateTime → String)방법List 변환연관 관계 필드 변환타입 변환 (예: LocalDateTime → String)BeanUtils.copyProperties()❌ 수동 처..

DTO / VO / DAO / Entity / Model 비교

DTO / VO / DAO / Entity / Model은 모두 Spring에서 데이터와 관련된 객체들로, 각기 다른 역할을 한다. 헷갈리는 개념들을 한 번에 정리해보자! 😎📌🔥1. DTO / VO / DAO / Entity / Model 비교구분역할/목적특징사용하는 층(Layer)변경 가능성예시VO값 객체 (Value Object)불변 객체 (immutable)DTO, Entity와 연동 가능변경 XMoney, Point, AddressDTO데이터 전달 객체 (Data Transfer Object)계층 간 데이터 전달용Controller ↔ Service ↔ DAO변경 OUserDTO, LoginDTODAODB 접근 객체 (Data Access Object)DB 호출/쿼리 수행Repository ..

Redis란? (Spring 연동)

Redis 개념 → 설치 → 사용 → Spring 예제까지 한 번에 정리함.📌 1. Redis란?Redis (REmote DIctionary Server) 는 메모리(In-Memory)에 데이터를 저장하는 Key-Value 저장소다. 빠른 조회를 위한 캐시 + 만료되는 데이터 저장소이다. ✅ Redis의 핵심 특징메모리 기반 → 매우 빠름 (ms 단위)Key-Value 구조TTL(만료시간) 지원캐시 / 세션 / 토큰 / 임시 데이터 관리에 최적⚠️ 캐시는 DB처럼 쓰면 안 됨. 빠른 조회용 보조 저장소.트랜잭션 보장 ❌영속성 한계장애 시 데이터 유실 가능📖 예시KEY: product:123VALUE: { "name": "운동화", "price": 99000 } 📌 2. Redis는 언제 쓰는가?✔ ..

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