코딩/sparta TIL

TIL 36 : EntityManagerFactory, EntityManager, EntityTransaction

americanoallday 2025. 4. 16. 10:36

DB랑 놀기 위한 삼총사 😎

EntityManagerFactory (팩토리 공장장)

  • 📌 무거운 객체라서 애플리케이션 시작 시 딱 한 번만 만들어야 함.
  • 💼 DB와 연결 설정, 커넥션 풀 등 리소스를 미리 준비해두는 공장 같은 역할.
  • 📦 EntityManager를 만들어주는 공장(Factory) 역할.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("entity");

🔧 여기서 "entity"persistence.xml에 등록한 persistence-unit 이름.

 

 

2. EntityManager(DB 작업 담당 직원)

  • 🧍‍♀️ 이걸로 진짜로 DB 조회, 저장, 수정, 삭제 같은 작업을 함.
  • 📌 가벼운 객체, 스레드 안전하지 않아서 요청마다 새로 만들어야 함.
  • 메서드:
    • em.find(): 단건 조회
    • em.persist(): 저장
    • em.remove(): 삭제
    • em.createQuery(): JPQL 실행
    • em.flush(): 강제로 DB 반영
    • em.clear(): 1차 캐시 비우기
EntityManager em = emf.createEntityManager();

 

 

3. EntityTransaction(트랜잭션 관리자)

  • 📦 DB 작업을 실제로 반영할지 말지 결정
  • 보통 아래처럼 씀:
EntityTransaction transaction = em.getTransaction();

transaction.begin(); // 트랜잭션 시작

// DB 작업들 (em.persist, em.remove 등)

transaction.commit(); // 성공 시 반영
// or
transaction.rollback(); // 실패 시 롤백
Spring에서는 이걸 대신 @Transactional로 관리해줘서 우리가 직접 안 써도 됨 🙌

☕ 전체 흐름

[EntityManagerFactory] ← 앱 시작 시 1번만 생성
          |
          ↓
[EntityManager] ← 요청마다 새로 생성
          |
          ↓
[EntityTransaction] ← DB 작업 트랜잭션 관리