자바에서 객체를 데이터베이스에 저장하고 관리하기 위한 인터페이스와 기능을 제공하는 API
주요 기능
1. EntityManager
- JPA에서 데이터베이스와 상호작용하는 주요 인터페이스입니다.
- 이 인터페이스는 엔티티를 데이터베이스에 저장하고 조회하는 여러 메서드를 제공합니다.
em.find 메서드
- 주어진 엔티티 클래스와 기본 키(primary key)를 사용하여 데이터베이스에서 해당 엔티티를 검색합니다.
- 해당 엔티티가 없을 경우 INSERT SQL 문을 생성합니다.
- 트랜잭션이 커밋될 때, JPA는 영속성 컨텍스트에 있는 모든 엔티티의 변경 사항을 데이터베이스에 반영합니다.
em.persist 메서드
- 엔티티를 데이터베이스에 저장하고, 영속성 컨텍스트에 관리되는 상태로 만듭니다.
- 영속 상태의 엔티티는 이후 변경된 속성이 자동으로 감지됩니다. (더티 체킹)
- 트랜잭션이 커밋될 때, 영속성 컨텍스트 내의 엔티티 상태가 데이터베이스와 비교됩니다.
- board 엔티티의 변경 사항이 감지되면, JPA는 자동으로 UPDATE 쿼리를 생성하고 실행하여 변경 사항을 데이터베이스에 반영합니다.
2. 영속성 컨텍스트(Persistence Context)
- 영속성 컨텍스트는 엔터티 인스턴스를 관리하는 일종의 캐시입니다.
- EntityManager에 의해 관리되며, 엔터티 인스턴스의 상태를 추적합니다.
- 1차 캐시라고도 불리며, 같은 영속성 컨텍스트 내에서는 동일한 엔터티 인스턴스를 반환합니다.
3. 더티 체킹(Dirty Checking)
- 더티 체킹은 JPA에서 영속성 컨텍스트에 의해 관리되는 엔터티가 수정되었는지 자동으로 감지하는 메커니즘입니다.
- 개발자가 별도로 update 명령을 실행하지 않아도, 트랜잭션이 커밋될 때 변경된 엔터티가 자동으로 업데이트됩니다.
- 예를 들어, 엔터티의 필드를 수정하면, 트랜잭션 커밋 시점에 해당 변경이 데이터베이스에 반영됩니다.
4. 캐시(Cache)
- JPA는 1차 캐시와 2차 캐시를 제공합니다.
- 1차 캐시
- 영속성 컨텍스트에 의해 관리되며, 동일한 엔터티 인스턴스가 반복적으로 사용되는 것을 방지합니다.
- 2차 캐시
- 애플리케이션 수준에서 공유되는 캐시로, 엔터티 데이터를 영속성 컨텍스트 외부에 저장하여 성능을 최적화합니다.
- 이는 선택 사항이며, Hibernate와 같은 JPA 구현체에서 주로 사용됩니다.
Share article