자바는 객체 지향적으로, 관계형 데이터베이스는 데이터를 정규화해서 잘 보관하는 것을 목표로 함.
→ 객체를 DB에 넣으려면 SQL문으로 변환해야 하고, DB에서 다시 객체를 꺼내올 때도 SQL문을 작성해야 한다.
이는 결국에 객체를 단순히 데이터 전달 목적으로 사용할 뿐, 객체지향적인 프로그래밍은 불가능!
이를 해결하기 위해 나온 기술이 ORM. 중간에서 2개를 매핑하는 역할.
JPA는 ORM 기술의 표준 명세로 자바에서 제공하는 API.
EntityManagerFactory는 여러 스레드에서 접근해도 안전하지만, 생성하는 비용이 상당이 큼.
→ EntityManagerFactory는 요청이 올 때마다 생성 비용이 거의 없는 EntityManager를 생성한다.
(EntityManager는 여러 스레드가 동시에 접근하면 동시성 문제가 발생해 요청별로 (=스레드별로) 한 개씩 할당)
데이터베이스의 테이블에 대응하는 클래스. @Entity가 붙은 클래스.
ex) Item.java
클래스에 @Entity
어노테이션을 붙이면 이 클래스가 엔티티가 됨.
엔티티 매니저 인스턴스를 관리하는 주체.
애플리케이션 실행 시 한 개만 만들어지며, 사용자로부터 요청이 오면 엔티티 매니저 팩토리로부터 엔티티 매니저를 생성.
영속성 컨텍스트에 접근해 엔티티에 대한 DB 작업 제공
내부적으로 DB 커넥션을 사용해 DB에 접근.
그렇다면 영속성 컨텍스트는 도대체 뭘까
⇒ 엔티티를 영구 저장하는 환경. 엔티티 매니저를 통해 접근 가능