EntityManager

EntityManager는 JPA에서 엔티티(객체)를 관리하고 DB 작업을 수행하는 핵심 인터페이스입니다.

쉽게 말하면

Java 객체와 DB 사이의 중간 관리자 역할을 해요.

Java 객체 ←→ EntityManager ←→ 데이터베이스

주요 기능

// 1. 저장
entityManager.persist(user);

// 2. 조회
User user = entityManager.find(User.class, 1L);

// 3. 수정 (변경 감지 - 자동으로 UPDATE)
user.setName("새이름");

// 4. 삭제
entityManager.remove(user);

영속성 컨텍스트

EntityManager는 내부에 영속성 컨텍스트(Persistence Context) 라는 공간을 갖고 있어요.

┌─────────────────────────────┐
│      영속성 컨텍스트         │
│  ┌─────┐ ┌─────┐ ┌─────┐   │
│  │User1│ │User2│ │User3│   │  ← 엔티티들이 여기서 관리됨
│  └─────┘ └─────┘ └─────┘   │
└─────────────────────────────┘
            ↕ 동기화
┌─────────────────────────────┐
│        데이터베이스          │
└─────────────────────────────┘

영속성 컨텍스트의 장점

기능설명
1차 캐시같은 엔티티 조회 시 DB 안 가고 캐시에서 반환
변경 감지객체 수정하면 자동으로 UPDATE 쿼리 실행
쓰기 지연여러 쿼리를 모았다가 한번에 실행
동일성 보장같은 ID의 엔티티는 항상 같은 객체

예시 코드

// 영속성 컨텍스트에 저장 (아직 DB에 안 감)
entityManager.persist(user);

// 트랜잭션 커밋할 때 DB에 반영
transaction.commit();

Spring에서는?

Spring Data JPA를 쓰면 EntityManager를 직접 다룰 일이 거의 없어요.

// 직접 EntityManager 사용
entityManager.persist(user);
entityManager.find(User.class, 1L);

// Spring Data JPA 사용 (내부적으로 EntityManager 사용)
userRepository.save(user);
userRepository.findById(1L);

한줄 요약

EntityManager = JPA에서 엔티티의 저장, 조회, 수정, 삭제를 담당하는 관리자

CSLOG에서 보기