JDBC를 이용한 간단한 CRUD 구현
JDBC(Java Database Connectivity)를 사용하여 데이터베이스 CRUD(Create, Read, Update, Delete) 작업을 수행하는 예제 🧩 1. SimpleCrudRepository 인터페이스public interface SimpleCrudRepository { Member save(Member member) throws SQLException; Optional findById(Integer id) throws SQLException; void update(Member member) throws SQLException; void remove(Integer id) throws SQLException;}✅ 설명 DB에 접근해 CRUD를 수행하는 기능을 인..
2025.04.08
no image
@GeneratedValue란?
📌 @GeneratedValue란?@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@GeneratedValue는 기본 키(PK) 값을 자동으로 생성해주는 어노테이션이야.주로 @Id와 함께 사용돼.DB마다 기본 키 생성 방식이 다르기 때문에, 전략(strategy) 을 지정할 수 있어.  🧩 사용 목적우리가 엔티티를 저장할 때마다 id를 일일이 지정하지 않아도, JPA가 알아서 적절한 값을 생성해서 넣어줘. → Insert할 때 PK를 자동으로 생성해주는 것! 🏷️ 주요 전략 4가지 (strategy)전략 이름설명사용되는 DBIDENTITYDB의 auto_increment 사용MySQL, MariaDBSEQUENCEDB의 s..
2025.04.07
no image
🌿 Spring Data JPA - 매핑 어노테이션 정리
📌 1. 객체와 테이블 매핑@Entity이 클래스가 JPA가 관리하는 엔티티 클래스임을 선언함.실제 데이터베이스 테이블과 매핑됨.@Table(name = "table_name") (선택)엔티티와 매핑될 테이블 이름을 지정. 생략하면 클래스 이름과 동일한 테이블로 자동 매핑됨.@Entity@Table(name = "posts") // posts 테이블과 매핑public class Post { ...}  📌 2. 기본 키 매핑@Id기본 키(primary key)를 지정하는 어노테이션. 반드시 필요함!@GeneratedValue(strategy = GenerationType.IDENTITY)기본 키의 자동 생성 전략을 지정함. 대표적인 전략:IDENTITY: DB에서 자동 증가 (MySQL의 auto..
2025.04.07
no image
🌙JPA 매핑 어노테이션 가이드
JPA 매핑 어노테이션 가이드JPA(Java Persistence API)에서는 자바 객체와 데이터베이스를 효과적으로 매핑하기 위한 다양한 어노테이션을 제공합니다. 이 글에서는 주요 매핑 어노테이션들을 카테고리별로 정리해 보겠습니다. 1. 객체와 테이블 매핑어노테이션 설명@Entity클래스를 엔티티로 지정하여 JPA가 관리하도록 함@Table엔티티와 매핑할 테이블을 지정@SecondaryTable엔티티를 복수의 테이블에 매핑할 때 사용@SecondaryTables여러 개의 @SecondaryTable을 정의할 때 사용 @Entity@Table(name = "MEMBER", uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_..
2025.04.07
no image
커밋, 롤백, 트랜잭션, flush()과 커밋의 차이점
✅ 1. 커밋(COMMIT) / 롤백(ROLLBACK) 시점에 어떤 일이 일어나는지⚾️ 먼저 개념부터 짚자:커밋 (Commit): 트랜잭션 안에서 한 작업들을 DB에 영구 반영하겠다는 뜻롤백 (Rollback): 트랜잭션 안에서 한 작업들을 전부 취소하고 원래대로 되돌리겠다는 뜻  🔍 JPA에서 커밋이 일어날 때 무슨 일이 벌어지나?JPA는 EntityManager 내부의 1차 캐시(Persistence Context)에서 객체 상태를 추적하고 있다가, 트랜잭션이 끝날 때 flush()를 자동으로 호출해!→ 변경된 내용이 SQL로 변환되어 DB에 반영👉 예:@Transactionalpublic void updateTitle(Long id) { Post post = postRepository.fi..
2025.04.07
no image
변경 감지 (Dirty Checking)란?
✅ 변경 감지 (Dirty Checking)란?📌 JPA는 엔티티 객체의 "처음 상태"를 기억하고 있다가,트랜잭션이 끝나기 전에 그 객체가 변경되었는지를 확인해.만약 변경됐다면 → 자동으로 UPDATE SQL을 만들어서 DB에 반영해줘. 🎯 어떻게 작동하는지?트랜잭션 시작JPA가 DB에서 엔티티를 조회해서 영속성 컨텍스트에 저장개발자가 객체의 값을 setter 등으로 수정트랜잭션 커밋 시점에 → JPA가 처음 상태와 지금 상태를 비교바뀐 부분만 UPDATE SQL을 생성해서 실행!  🧠 예제 코드로 보기@Transactionalpublic void updatePostTitle(Long id, String newTitle) { Post post = entityManager.find(Post.cl..
2025.04.07
no image
✅ Write-Behind (쓰기 지연) 란?
✅ Write-Behind (쓰기 지연) 란?JPA의 핵심 기능 중 하나로, 엔티티 객체의 변경을 바로 DB에 반영하지 않고 트랜잭션이 커밋될 때 한 번에 반영하는 전략이야. 💡 왜 쓰기 지연을 사용할까?성능 최적화→ 객체를 여러 번 수정할 때마다 DB에 SQL을 날리면 성능이 떨어져.→ JPA는 SQL을 "모아서 한 번에" 보냄으로써 성능을 높여줘.트랜잭션 관리 효율→ 트랜잭션 도중 예외가 발생하면, 실제 DB에는 반영되지 않았기 때문에 롤백이 쉬움. 💡 예시로 이해해보자@Transactionalpublic void updateUser() { User user = em.find(User.class, 1L); user.setName("홍길동"); user.setEmail("gildon..
2025.04.07
no image
⚾️ JPA 1차 캐시 (First-Level Cache) 완전 정복
🔍 1차 캐시란?JPA에서 엔티티를 메모리에 저장하는 저장소(Persistence Context) 내부에 존재하는 캐시한마디로, DB 접근 없이 메모리에서 데이터를 먼저 확인하는 기능 💡 왜 중요한가요?성능 향상: 같은 엔티티를 또 조회해도 DB에 다시 접근하지 않음엔티티 동일성 보장: 같은 트랜잭션 안에서는 == 비교도 trueJPA 핵심 기능들의 기반: Dirty Checking, Flush, Write-behind 등 모두 1차 캐시 위에서 작동 📦 캐시 작동 흐름Member member1 = em.find(Member.class, 1L); // ✅ DB 접근 OMember member2 = em.find(Member.class, 1L); // ✅ DB 접근 X (1차 캐시에서 조회)Syste..
2025.04.07
no image
🌿 JPA의 핵심! Persistence Context(영속성 컨텍스트) 완벽 정리
✅ 영속성 컨텍스트(Persistence Context)란?JPA가 엔티티 객체를 관리하는 일종의 메모리(1차 캐시) 공간데이터베이스(DB)와 자바 객체(Entity) 사이에서 중간다리 역할을 함 🧠 쉽게 말하면?개념역할Persistence ContextJPA가 엔티티를 보관하고 관리하는 공간 (1차 캐시)DB실제 데이터를 저장하는 창고Entity우리가 다루는 자바 객체 (예: Member, Post, Article 등) 📦 비유로 이해하기💼 캐비닛 = 영속성 컨텍스트📄 문서 = 엔티티 객체🏢 창고 = 데이터베이스문서를 바로 창고(DB)에서 꺼내지 않고먼저 캐비닛(영속성 컨텍스트)에서 꺼내서 확인하고수정이 일어나면 나중에 한 번에 창고(DB)에 반영 💡 주요 특징기능설명1차 캐시동일 트랜잭션 ..
2025.04.07