본문 바로가기

Spring boot

JPA(Java Persistence API)

728x90
반응형

JPA(Java Persistence API)

JPA는 ORM 기술의 표준 명세로 자바에서 제공하는 API.

ORM이란 Object Relational Mapping 의 약자로 객체와 관계형 데이터베이스를 매핑해주는 것을 말함.

ORM을 이용한 자바 객체와 RDB 매핑

JPA 는 인터페이스고 이를 구현한 대표적인 구현체로  Hibernate, EclipseLink, DataNucleus, OpenJpa, TopLink 등이 있음.

대표적인 오픈소스 하이버네이트.

 

JPA 사용시 장점

  • 특정 데이터베이스에 종속되지 않음
  • 객체지향적 프로그래밍
  • 생산성 향상

JPA 사용시 단점

  • 복잡한 쿼리 처리
  • 성능 저하 위험
  • 학습 시간

JPA 동작 방식

 

JPA 동작 과정

엔티티

@Entity 데이터베이스의 테이블에 대응하는 클래스와 유사

 

엔티티 매니저 팩토리

엔티티 매니저 인스턴스를 관리하는 주체

 

엔티티 매니저

영속성 컨텍스트에 접근하여 엔티티에 대한 데이터베이스 작업을 제공

  • find() : 영속성 컨텍스트에서 엔티티르 검색하고 없을 경우 데이터베이스에서 데이터를 찾아 영속성 컨텍스트에 저장
  • persist() : 엔티티를 영속성 컨텍스트에 저장
  • remove() : 엔티티 클래스를 영속성 컨텍스트에서 삭제
  • flush() : 영속성 컨텍스트에 저장된 내용을 데이터베이스에 반영

영속성 컨텍스트

 

엔티티 생명주기

  • 비영속(new) : new 키워드를 통해 생성된 상태로 영속성 컨텍스트와 관련이 없는 상태
  • 영속(managed) : 엔티티가 영속성 컨텍스트에서 저장된 상태로 영속성 컨텍스트와 관련이 없는 상태
  • 준영속 상태(detached) : 영속성 컨텍스트에 엔티티가 저장되었다가 분리된 상태
  • 삭제 상태(removed) : 영속성 컨텍스트와 데이터베이스에서 삭제된 상태
Item item = new Item();
item.setItemNm("test")
//엔티티 생성 == 영속성 컨텍스트와 관련 없음

EntityManager em = entityManagerFactory.createEntityManager();
//엔티티 매니저 팩토리로부터 엔티티 매니저 생성

EntityTransaction transaction = em.getTransaction();
transaction.begin();
//엔티티 매니저는 데이터 변경 시 데이터 무결성을 위해 반드시 트랜잭션을 시작해야 함

em.persiste(item);
//생성한 엔티티가 영속성 컨텍스트에 저장된 상태

transaction.commit();
//트랜잭션을 데이터베이스에 반영

em.close();
emf.close();
//인테테 매니저와 엔티티 매니저 팩토리의 close() 메소드를 호출해 사용한 자원을 반환

 


영속성 컨텍스트 사용 시 이점

영속성 컨텍스트 1차 캐시 구조

  • 1차 캐시
  • 동일성 보장
  • 트랜잭션을 지원하는 쓰기 지연
  • 변경 감지
728x90
반응형

'Spring boot' 카테고리의 다른 글

Thymeleaf(타임리프)  (0) 2023.09.04
Spring DATA JPA  (2) 2023.09.02
쿼리 메소드  (0) 2023.09.02
@Entity 와 @Repository 설계  (0) 2023.09.01
Spring boot  (0) 2023.08.28