코딩/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 작업 트랜잭션 관리