[JPA] JPA 기본 개념, 영속성 컨텍스트

Song_Song·2021년 12월 16일
0

JPA(Java Persistence API)

관계형 데이터베이스 연동에 사용되는 API
기존 EJB에서 제공되던 엔티티 빈을 대체하는 기술
ORM이기 때문에 자바 클래스와 DB테이블을 매핑함

SQL Mapper vs ORM

  • SQL Mapper : SQL문을 사용하여 디비를 조작 (ex. Mybatis, jdbcTemplate)
  • ORM(Object-Relation Mapping) : 메서드에서 데이터를 조작, SQL을 자동으로 생성(a.k.a Persistant API) (ex. JPA, Hibernate)

  • JDBC 는 DB에 접근할 수 있도록 자바에서 제공하는 API
  • JPA 는 ORM을 위한 JAVA EE 표준이며, Spring-Data-JPA는 스프링에서 제공하는 JPA 프레임워크

JPA 동작 과정

JPA는 애플리케이션과 JDBC 사이에서 동작한다.
개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.
즉, 개발자가 직접 JDBC API를 쓰는 것이 아니다.

  • 트랜잭션을 시작하지 않거나 CRUD 작업 이후에 트랜잭션을 종료하지 않으면 JPA는 앤티티에 정보를 VO에 저장하지 않는다.

  • JPA를 이용하여 CRUD 기능을 처리하려면 EntityManager 객체를 사용하여야 한다. EntityManager은 EntityManagerFactory로부터 얻을 수 있다.

영속성 컨텍스트(Persistence Context)

: 엔티티(테이블과 매핑되는 자바 객체) 객체들을 관리하는 일종의 컨테이네. EntityManager를 생성할 때 자동으로 생성되고 EntityManager가 제공하는 메소드를 통해 관리된다.

엔티티 상태

1. 비영속 상태(New)

: 엔티티 객체를 생성했을 뿐 영속성 컨텍스트에 저장하지 않은 상태

2. 영속상태(Managed)

: 엔티티가 영속성 컨텍스트에 저장된 상태를 의미. persist() 메소드를 사용
find() 메소드로도 사용 가능. find()로 조회를 했을 때 DB에 조회하고자 하는 엔티티가 영속성 컨텍스트에 없으면 새로운 객체를 생성

3. 준영속 상태(Detatched)

: 한번 영속성 컨텍스트에 들어간 엔티티가 어떤 이유에서 영속성 컨텍스트에서 벗어난 상태

4. 삭제상태(Removed)

: 영속성 컨텍스트에서도 제거되고 테이블의 데이터에서도 삭제된 상태

더티체크 Dirty Check : 상태 변화 체크

영속성 컨텍스트가 관리하는 엔티티들(위 엔티티 상태의 2번 상태)은 값이 변경되면 트렌젝션이 끝나는 시점에 테이블 변경 내용이 자동으로 DB에 반영된다. 이를 더티체킹이라고 한다.

JPA에서 조회된 엔티티의 최초 조회 상태 그대로 스냅샷을 만들어 놓고 트렌젝션이 끝나는 시점에 스냅샷과 DB간에 다른 점이 있다면 Update Query를 통하여 데이터베이스로 전달한다.

준영속 상태, 비영속 상태의 엔티티들은 Dirty Check의 대상이 아니기 때문에 값이 변경되어도 DB에 반영되지 않는다.

profile
성장을 위한 정리 블로그

0개의 댓글