스프링 부트

JPA란?

john_ 2023. 4. 3. 14:09
728x90

JPAJava Persistence API 의 약어로, 자바 ORM 기술에 대한 API 표준을 일컫습니다.

ORM 이란 'Object Releation Mapping'의 약자로 객체와 관계형 데이터베이스를 매핑 해줍니다.

 

 

장점

  1. 특정 데이터베이스에 종속 되지 않음
  2. 객체지향적으로 설계 가능
  3. 유지보수가 유리, 생산성이 향상

 

단점

  1. 복잡한 쿼리 처리 ( 뷰, 프로시저를 활용해야함)
  2. 성능 저하 위험
  3. 학습 시간

 

 

엔티티 (Entity) : 데이터베이스의 테이블에 대응하는 클래스

@Entity가 붙은 클래스는 JPA 에서 관리하며 엔티티 라고 합니다.

Item.java 클래스를 만들어서 @Entity 어노테이션을 붙이면 이 클래스가 엔티티가 됩니다.

 

엔티티 매니저 팩토리(Entity Manager Factory) : 엔티티 매니저 인스턴스를 관리하는 주체

애플리케이션 실행 시 하나만 만들어지며, 사용자로 부터 요청이 오면 엔티티 매니저 팩토리로 부터 매니저를 생성 합니다.

 

엔티티 매니저(Entity Manager) : 영속성 컨텍스트에 접근하여 엔티티에 대한 데이터베이스 작업을 제공합니다.

 

 

 

 

find() 메소드 : 영속성 컨텍스트에서 엔티티를 검색하고 영속성 컨텍스트에 없을 경우 데이터베이스에서 찾아 영속성 컨텍스트에 저장합니다.

persist() 메소드 : 엔티티를 영속성 컨텍스트에 저장합니다.

remove() 메소드 : 엔티티 클래스를 영속성 컨텍스트에서 삭제합니다.

flush()메소드 : 영속성 컨텍스트에 저장된 내용을 데이터베이스에 반영합니다.

 

 

Persistance Context : 버퍼링과 캐싱등을 할수 있게 합니다.

 

1차 캐시 : 영속성 컨텍스트에 Map<KEY, VALUE>로 저장. Find() 메소드 호출 시 영속성 컨텍스트의 1차 캐시를 조회

 

* 동일성 보장 : 하나의 트랜잭션에서 같은 키값으로 영속성 컨텍스트 조회시 같은 엔티티 조회 보장(1차 캐시)

 

 

 

* 트랜잭션을 지원 하는 쓰기 지연 : 쓰기 지연 SQL 저장소에 SQL을 쌓아두고 트랜잭션 커밋 시점에 저장된 SQL문을 flush 하여 데이터베이스 반영.

 

* 변경 감지 : 1차 캐시에 데이터베이스에서 처음 불러온 엔티티의 스냅샷 저장 및 커밋 시점에 변경애뇽을 반영.

즉, update 문을 호출하지 않아도 됨.

 

 

728x90