02. 영속성 컨텍스트 실습 — 도서 대출 시스템
1. 실습 도메인 소개 이론으로 배운 영속성 컨텍스트 개념을 실제 코드로 확인하는 실습이다. 도메인은 도서 대출 시스템으로, Book 엔티티 하나로 생명주기 · 1차 캐시 · 쓰기 지연 · 더티 체킹 전체를 단계별로 체험한다. Step 1. Book 엔티티 작성 ← @Entity, @Column, @Enumerated 적용 S...
1. 실습 도메인 소개 이론으로 배운 영속성 컨텍스트 개념을 실제 코드로 확인하는 실습이다. 도메인은 도서 대출 시스템으로, Book 엔티티 하나로 생명주기 · 1차 캐시 · 쓰기 지연 · 더티 체킹 전체를 단계별로 체험한다. Step 1. Book 엔티티 작성 ← @Entity, @Column, @Enumerated 적용 S...
1. Auditing이란 엔티티가 생성되거나 수정된 시간, 그 주체를 자동으로 기록하는 것이 Auditing(감사)이다. 모든 테이블에 created_at, updated_at을 넣는 것은 운영 시 문제 추적을 위해 실무에서 거의 필수로 사용된다. Spring Data JPA의 Auditing 기능을 사용하면 이를 자동으로 처리할 수 있다. ...
1. 왜 상속 매핑이 필요한가 객체지향에서는 상속이 자연스러운 개념이다. 그런데 RDB에는 상속 개념이 없다. JPA는 이 불일치를 3가지 전략으로 해결한다. // 객체 모델 abstract class Item { Long id; String name; int price; } class Album extends Item { String arti...
1. 왜 임베디드 타입이 필요한가 엔티티를 설계하다 보면 특정 필드들이 논리적으로 하나의 개념을 나타내는 경우가 있다. 주소를 예로 들면 city, street, zipcode는 각각의 필드이지만 이 셋이 합쳐야 “주소”라는 개념이 된다. 이 필드들을 엔티티 안에 모두 나열하면 엔티티가 비대해지고 재사용도 어렵다. // 나쁜 예 — 모든 필드...
1. @Enumerated 자바의 enum 타입을 DB 컬럼에 매핑한다. 두 가지 방식이 있으며 반드시 STRING 방식을 사용해야 한다. public enum MemberStatus { ACTIVE, INACTIVE, BANNED } ORDINAL 방식 — 절대 사용하지 말 것 @Enumerated(EnumType.ORDINAL)...
1. @Entity @Entity는 해당 클래스가 JPA가 관리하는 엔티티임을 선언하는 어노테이션이다. 이 어노테이션이 붙어야만 JPA가 이 클래스를 인식하고 DB 테이블과 매핑한다. 📌 반드시 지켜야 할 제약 기본 생성자가 필수다. JPA는 DB에서 조회한 결과를 엔티티 객체로 변환할 때 내부적으로 리플렉션(Reflection)을 사용한다...
1. 1차 캐시 (First-Level Cache) 📌 내부 구조 1차 캐시는 EntityManager 내부에 있는 HashMap 구조다. key는 @Id 필드(PK)의 값이고, value는 엔티티 인스턴스와 그 스냅샷(최초 상태 복사본)의 쌍이다. 엔티티를 persist()하거나 find()로 조회하면 이 Map에 등록된다. 1차 캐시 내부...
1. 영속성 컨텍스트란 JPA를 처음 접하면 “왜 DB에 바로 저장하지 않고 영속성 컨텍스트라는 중간 단계가 있는 걸까?”라는 의문이 생긴다. 이 의문에서부터 시작하는 게 가장 이해가 빠르다. 예를 들어 한 HTTP 요청 안에서 아래와 같은 일이 벌어진다고 생각해보자. Member member = findById(1L); // SEL...
1. 4가지 상태 개요 엔티티는 영속성 컨텍스트와의 관계에 따라 4가지 상태 중 하나에 속한다. 상태 설명 특징 비영속 (New) new로 생성한 순수 자바 객체 JPA와 무관 영속 (Managed) ...
1. 더티 체킹 (Dirty Checking) 📌 em.update()가 없는 이유 JPA 이전에는 엔티티를 수정하면 개발자가 직접 UPDATE SQL을 작성하거나 session.update(entity) 같은 메서드를 호출해야 했다. JPA는 이 불편함을 영속성 컨텍스트의 “변경 감지(Dirty Checking)” 메커니즘으로 해결한다. 영...