JPA(Java Persistence API)
: Java에서 RDB를 다루기 위한 표준 ORM 기술.
자바에서 RDB를 사용할 방식을 정의한 인터페이스. -> 구현체를 통해 사용한다.
JPA를 구현한 ORM 프레임워크로는 Hibernate, OpenJPA, EclipseLink, DataNucleus 등이 있다.
이중 Hibernate가 가장 많이 사용된다.
ORM(Object-Relational Mapping)
: 자바 객체와 RDB를 연결(매핑)하는 프로그래밍 기법.
SQL을 몰라도 자바 언어로 DB에 접근해서 사용 가능하다.
단, 프로젝트가 복잡해질 수록 사용 난이도가 올라간다는 단점이 있다.
JDBC(Java Database Connectivity)
자바 애플리케이션과 DB 사이에서 중간 계층으로서 DB 관련 작업을 추상화, 표준화 하는 역할을 수행한다.
=> DB 종류에 상관없이 적용할 수 있음.
자바로 DB 접속, SQL 쿼리 실행, 결과 처리를 할 수 있게 만들어준다.
JDBC는 인터페이스이기 때문에 구현해서 사용해야 한다. 그 구현체가 바로 JDBC Driver (DB 별로 다르다)
JPA 내부에 JDBC가 포함되어 있다. 둘의 역할이 다르기 때문이다.
JPA는 자바 객체와 DB를 매핑만 한다. 내부적으로 DB와 연결하기 위해서는 JDBC를 사용해야 한다.
JPA에서 핵심 개념 = 엔티티, 엔티티 매니저
엔티티(Entity)
:DB와 매핑되는 클래스(객체)
엔티티 매니저 (Entity Manager)
: 엔티티를 관리하는 객체. (객체를 생성, 수정, 삭제한다)
엔티티 매니저 팩토리 (Entity Manager Factory)
: 엔티티 매니저를 생성한다.
엔티티 매니저는 엔티티를 영속성 콘텍스트에 저장한다.
영속성 콘텍스트
: 엔티티를 관리하는 가상의 공간
1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩의 기능을 제공 => DB에 접근을 최소화함으로써 성능을 향상시킴
엔티티의 상태
영속성 콘텍스트가 관리하는지에 여부에 다르다. 특정 메소드를 통해 변경 가능하다.
- 분리 상태 (detached) : 영속성 콘텍스트가 관리하지 않는 상태
- 관리 상태 (managed): 영속성 콘텍스트가 관리하는 상태
- 비영속 상태 (transient): 영속성 콘텍스트가 관련없는 상태
- 제거된 상태 (removed): 영속성 콘텍스트에서 제거된 상태
import com.mysite.kws.model.Question;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
public class EntityManagerTests {
@PersistenceContext
private EntityManager entityManager;
public void test() {
// 비영속 상태: 엔티티 매니저가 관리하지 않는 상태
Question q1 = new Question();
// 관리 상태: 엔티티 매니저가 관리하는 상태. 영속성 컨택스트에 저장
entityManager.persist(q1);
// 분리 상태: 엔티티 매니저가 관리하지 않는 상태. 영속성 컨택스트에서 관리 안함
entityManager.detach(q1);
// 제거된 상태: 엔티티를 영속성 컨텍스트와 데이터베이스에서 제거
entityManager.remove(q1);
}
}
참고 사이트
https://goldenrabbit.co.kr/2023/06/08/springjpa/
https://imprint.tistory.com/111
'Programming 프로그래밍 > JPA' 카테고리의 다른 글
| [JPA] Java Persistence API 개념 - 엔티티 매니저, 영속성 컨텍스트 (0) | 2024.05.02 |
|---|---|
| [JPA] JPA 프로젝트 구조, 설정하기 (0) | 2024.05.02 |
| [JPA] JPA 환경설정/ 엔티티 만들기 + MariaDB (Gradle) (0) | 2024.04.25 |