Develop/Java(JPA) 14

Cache#2 캐시에 대한 이해

📌 CacheCache는 컴퓨터 과학에서, 데이나 값을 미리 복사해놓는 임시 저장소를 가르킨다. 한글로는 고속완충기억기..지만 아무도 그렇게 안부른다성능향상을 위해 결과를 캐싱(저장)하여 값을 재사용하는 것이며 보통 사용하는 입장에서는 캐싱 여부를 알 수 없다.여러 분야에서 다양한 의미의 Cache가 사용되고 있지만,  스프링에서 말하는 캐시 추상화는 Java Method의 반환값 캐싱을 의미한다.참고로 스프링의 @Cacheable 어노테이션을 클래스에 달면, 해당 클래스의 모든 메서드에 캐시가 적용된다.📌 Cache 를 사용할 때 고려해야할 점1. 캐시는 만능이 아니다.캐시를 사용하는 목적은 성능의 향상과 서버 부하 방지이다. 자주 조회되는 곳에 사용해야 의미가 있다.캐시는 반복적으로 동일한 결과를..

Develop/Java(JPA) 2025.02.24

Cache#1 스프링의 캐시 추상화(@Cacheable)

Cache#1스프링의 캐시 추상화(@Cacheable)!https://blog.kakaocdn.net/dna/08rWR/btrKJ6gJT9H/AAAAAAAAAAAAAAAAAAAAANZCVXYXhx88yZit1a2l5i1_AC3DvHAGwTnMWhWIQFLa/img.png%EC%8A%A4%ED%94%84%EB%A7%81?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1780239599&allow_ip=&allow_referer=&signature=y6K7KvJ5RSvUs0QoyKzerT1GGbo%3D 프레임워크는 다른 서비스와의 통합 & 기능 추상화를 제공해준다. (RedisTemplate, RestTemplate, MailSender....)2012년 스프링 3.1버전부터 캐시 추상화(Cache Abstraction)을 제공해주며, 이는 2014년 스프링 4.1에서 여러가지가 개선되었다.스프링 프레임워크의 다른 서비스와의 통합(Integration) 관련 문서Integration As a lightweight container, Spring is often considered an EJB replace..

Develop/Java(JPA) 2025.02.24

[Java] Stream() 과 parallelStream() 차이점

Stream()과 parallelStream()은 둘 다 Java Stream API에서 제공하는 메소드로, 데이터를 처리하는 방법을 정의합니다.두 메소드는 데이터의 처리 방식을 달리하며, 각각의 사용 방식과 차이점을 이해하는 것이 중요합니다.여기서는 Stream()과 parallelStream()의 차이점과 사용 방법을 상세하게 설명하겠습니다.1. Stream() (직렬 스트림)Stream()은 기본적으로 직렬 스트림을 생성합니다. 즉, 하나의 쓰레드를 사용하여 순차적으로 데이터를 처리합니다.특징:순차적 처리: 모든 작업이 하나의 쓰레드에서 순차적으로 실행됩니다. 데이터가 하나씩 처리되는 방식입니다.데이터 처리 순서 보장: 순차 스트림에서는 입력 데이터의 순서가 보장됩니다. 처리 결과도 원본 데이터의 ..

Develop/Java(JPA) 2025.02.18

[JPA] JPA save() 반복 호출로 DB 커넥션 과부하 해결

UI 버전 사본 만들기 ( 기존데이터 복사 ) 할때 RDS 의 DB CPU가 99.98%로 올라가는 이슈가 생겼어.중첩된 for문과 save()가 해당 이슈의 원인이라 파악.이슈가 된 코드와 어떻게 변경하면 좋을지 알아보자 이슈 코드 ( 중첩 for문 구조 )List accounts = ctgryAccntRepository.findAllByMainAccntNo( oldMainAccountNo );if( CollectionUtils.isNotEmpty(accounts) ) { for (CtgryAccnt account : accounts) { Long oldAccountNo = account.getCtgryAccntNo(); CtgryAccnt newAccount = new ..

Develop/Java(JPA) 2025.02.18

[JPA] for문으로 save() 할 경우 생기는 이슈 및 처리

UI 버전 사본 만들기 ( 기존데이터 복사 ) 할때 RDS 의 DB CPU가 99.98%로 올라가는 이슈가 생겼어.무분별한 for 문과 save()가 해당 이슈의 원인이라 파악!이슈가 된 코드와 어떻게 변경하면 좋을지 알아보자 이슈 코드 1List ads = verAdRepository.findAllByVerNo( oldVerNo );if( CollectionUtils.isNotEmpty(ads) ) { for (VerAd ad : ads) { VerAd newAd = new VerAd(); newAd.setVerNo( newVerNo ); newAd.setAdNo( ad.getAdNo() ); newAd.setShowLoca( ad.getShowL..

Develop/Java(JPA) 2025.02.18

[Java] Map 과 HashMap의 차이점!

Map vs HashMap in JavaJava에서 **Map**과 **HashMap**은 데이터의 **키-값 쌍(Key-Value Pair)**을 다루기 위한 인터페이스와 구현체입니다.둘의 핵심 차이는 **"추상화 vs 구현체"**로 이해하면 쉽습니다. 💡🔍 1. 기본 정의구분 Map HashMap타입인터페이스(Interface)클래스(Class)패키지java.util.Mapjava.util.HashMap인스턴스 생성직접 생성 불가(구현체 필요)new HashMap()로 바로 생성 가능중복 키키 중복 불가, 값은 중복 가능동일정렬 순서정렬 순서 보장 X(구현체에 따라 다름)순서 보장 XNull 허용구현체에 따라 다름null 키 1개, null 값 여러 개 허용🛠️ 2. 핵심 관계: 인터페이스와 구..

Develop/Java(JPA) 2025.02.17

[JPA] JPA에서 동기(Synchronous) vs 비동기(Asynchronous)

🌐 JPA에서 동기(Synchronous) vs 비동기(Asynchronous) 방식JPA(Java Persistence API)는 기본적으로 동기 방식으로 작동합니다. 하지만, 비동기 처리가 필요할 때는 Spring Data JPA와 Java의 비동기 API(ex. @Async, CompletableFuture)를 함께 사용해야 합니다.아래에서 동기와 비동기의 개념과 JPA에서의 구현 방법을 살펴보겠습니다! 🚀🔍 1. 동기 방식(Synchronous)동기 처리는 메서드가 끝날 때까지 호출한 스레드가 대기합니다.JPA는 기본적으로 동기적으로 데이터베이스와 통신합니다.🛠️ 동기 예제: 기본 JPA Repository// User 엔티티@Entity@Getter @Setterpublic class U..

Develop/Java(JPA) 2025.02.17

[Java] String VS StringBuilder 차이점

String과 StringBuilder의 차이점은 주로 불변성(immutability), 성능, 그리고 **동기화(synchronization)**에 있습니다.🔍 1. 불변성(immutability)String: 불변(immutable) 객체 → 한 번 생성되면 내부 값 변경 불가문자열을 변경하면 새로운 객체가 생성되어 메모리에 저장StringBuilder: 가변(mutable) 객체 → 내부 버퍼를 변경할 수 있음문자열을 변경해도 같은 객체를 유지String str = "Hello";str += " World"; // 새로운 String 객체 생성 (기존 "Hello"는 GC 대상)StringBuilder sb = new StringBuilder("Hello");sb.append(" World"); ..

Develop/Java(JPA) 2025.02.17

JPA 란?

📌 JPA(Java Persistence API)란?JPA는 Java 객체와 데이터베이스 간의 매핑을 쉽게 해주는 ORM(Object-Relational Mapping) 기술입니다.즉, SQL을 직접 사용하지 않고 자바 객체(Entity)를 통해 DB를 조작할 수 있도록 도와줍니다.🔹 JPA = Java ORM 표준 인터페이스JPA는 인터페이스이며, 이를 구현한 프레임워크(라이브러리)가 Hibernate, EclipseLink, OpenJPA 등이 있음.Spring Boot에서는 보통 Hibernate를 사용함.📌 JPA의 주요 개념1. 엔터티(Entity)데이터베이스의 테이블과 매핑되는 자바 클래스@Entity 어노테이션을 사용하여 선언java복사편집import jakarta.persistence..

Develop/Java(JPA) 2025.02.13