JPA라는 것은 자바 진영의 ORM(Object Relational Mapping) 기술 표준으로 ORM 기술을 사용하기 위한 표준 인터페이스의 모음이다.
✅ ORM : 객체 지향 프로그래밍 언어를 사용해 호환되지 않는 유형의 시스템 간 데이터를 변환하는 프로그래밍 기술로 쉽게 말하면 객체와 관계형 DB의 데이터를 매핑하고 이를 토대로 SQL을 생성 및 실행하는 기술이다.
✅ Persistence(영속성) : 데이터가 생성된 프로그램이 종료되어도 사라지지 않는 데이터의 특성


이 동작 방식에서 조회가 어떠한 방식으로 일어나는지 그림으로 한 번 살펴보자.

Entity Manager엔터티(DB와 연결되는 객체)를 저장하는 메모리상의 데이터베이스이다. 엔터티 저장, 수정, 삭제, 조회 등 엔터티와 관련된 모든 일을 수행한다.
Entity를 다루기 전에 EntityManager를 생성해야 한다. EntityManger는 EntityManagerFactory를 통해 생성된다.
⚠️ 주의 사항
EntityManager은 스레드 세이프하지 않기 때문에 공유하면 안된다. 그리고, EntityManagerFactory의 경우 스레드 세이프하기 때문에 공유해서 재사용(비용 절감) 한다. 그렇기 때문에 싱글톤으로 객체를 생성해야 한다.
Persistence Context즉, 영속성 컨텍스트란 엔티티를 보관하고 관리하는 장소라고 생각하면 된다. 여기에서Entity(엔티티)라는 것은 DB와 mapping되는 객체이다.

이 그림은 영속성 컨텍스트 안에 있는 엔티티의 생명주기를 나타낸 그림이다. 생명주기와 관련된 부분은 따로 블로그를 작성할 예정이다.