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
🌙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
no image
🌱 Spring Data JPA 완전 정복 가이드
✅ 1. Spring Data JPA란?Spring Data JPA는 Spring에서 JPA(Java Persistence API)를 더 쉽게 사용할 수 있도록 도와주는 모듈이야.복잡한 SQL 없이 인터페이스만 정의하면 자동으로 구현해주는 기능을 제공해, 개발자가 비즈니스 로직에 집중할 수 있게 해줘.핵심 키워드 요약:JPA: 자바 ORM 기술 표준 (ORM이 뭐냐고? → 2번에서 설명해!)Spring Data JPA: JPA를 더 쉽게 쓰게 도와주는 스프링 기술목표: 반복적인 코드 제거, 개발 생산성 향상 ✅ 2. ORM(Object Relational Mapping)이란?ORM은 **객체(Object)와 관계형 데이터베이스(Relational DB)를 연결(Mapping)**해주는 기술이야.즉, Ja..
2025.04.04