✏️ JPA 영속성과 트랜잭션에 대해 학습한 내용을 정리합니다.
Java에서 ORM 기술 표준으로 사용되는 인터페이스
Object Relational Mapping



영속성 컨텍스트

EntityManager를 생성하고 관리하는 팩토리 객체
Thread-safe 하지 않다. → 일관성을 보장하지 않는다.
EntityManagerFactory emf;
@Transactional
public void saveBook(Book book) {
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
Book book = new Book();
em.persist(book);
em.flush();
tx.commit();
} catch (Exception e) {
tx.rollback();
}
em.close();
}
@Transactional : SpringEntityManager : JPA서로 영역이 다르기 때문에 EntityManager 에 @Transactional 을 사용할 수 없다.

영속성 컨텍스트를 View 렌더링이 끝날 때까지 개방된 상태로 유지하는 방식
→ Entity의 생명주기를 Service 까지만 살아있을 수 있게 설정할 수 있다.
default 값은 true 이지만 false로 하는게 성능적으로 효율이 좋다.
→ 사용하지 않는 서버 자원을 바로 반납
= 굳이 사용하지 않을 Entity를 컨트롤러까지 살려두는건 성능 이슈가 발생
프록시(Proxy): 실제 엔티티 객체 대신, 그 객체를 감싸고 있는 대리 객체

@Transactional내부적으로 AOP로 구현되어있으며 Proxy를 생성하여 돌아가기 때문에 접근 제어자가 public으로 열러있어야 한다.

동시에 실행되는 트랜잭션들이 서로에게 얼마나 영향을 미칠지를 정의하는 방법
