본문 바로가기
Back-end.DB

[DB]JPA

by whitedeveloper 2023. 1. 11.

#.JPA

-JPA(Java Persistence API)

: 자바 진영의  ORM 기술 표준으로 채택된 인터페이스 모음

: 내부적으로는 JDBC를 사용 -> 직접 JDBC를 구현하면 SQL에 의존하게 되는 문제가 발생하여 개발 효율이 떨어진다

  JPA는 이 문제를 보완하여 개발자 대신 적절한 SQL을 생성하고 DB를 조작해서 자동으로 매핑하는 역할

 

-대표적인 구현체 (3가지)

 >하이버네이트(Hibernate) <- 가장 많이 사용

 >이클립스 링크(EclipseLink)

 > 데이터 뉴클리어스(DataNucleus)

 

#.하이버네이트(Hibernate)

-ORM프레임워크

-JPA가 정의하는 인터페이스를 구현하고 있는 JPA 구현체 중 하나

 

>Spring Data JPA

-JPA를 편리하게 사용할 수 있도록 지원하는 스프링 하위 프로젝트 중 하나

-CRUD 처리에 필요한 인터페이스를 제공

-하이버네이트의 엔티티 매니저를 직접 다루지 않고 리포지토리를 정의해 사용함으로써 스프링이 적합한 쿼리를 동적으로 생성하는 방식으로 데이터베이스 조작

 

#.영속성 컨텍스트

-어플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행

-앤티티 객체가 영속성 컨텍스트에 들어오면 JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업 수행

  >엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리대상이 되는 시점부터 영속 객체(Persistence Object)라고 부른다.

- 영속성 컨텍스트는 세션 단위의 생명주기를 가진다,

 >DB에 접근하기 위한 세션이 생성되면 영속성 컨테스트가 만들어지고, 종료되면 없어진다.

 >엔티티 매니저는 이러한 일련의 과정에서 영속성 컨텍스트에 접근하기 위한 수단으로 사용

 

#.엔티티 매니저

-엔티티를 관리하는 객체

-데이터베이스에 접근해서 CRUD 작업을 수행

-Spring Data JPA를 사용하면 리포지토리를 사용해서 데이터베이스 접근, 실제 내부 구현체 SimpleJpaRepository가 리포지토리에서 엔티티 메니저를 사용

public SimpleMyRepository(JpaEntityInformation<T, ?> entityInformation, EntityManager entityManager) {
        super(entityInformation, entityManager);
        this.entityManager = entityManager;
    }

-엔티티 매니저는 엔티티 매니저 팩토리(EntityManagerFactory)가 만듦

-스프링 부트에서는 자동 설정 기능이 있어 application.propertis에서 작성한 최소한의 설정만으로도 동작

-하이버네이트에서는 persistence.xml이라는 설정 파일을 구성하고 사용해야하는 객체

 

#.엔티티 생명주기

-4가지 상태로 구분

 > 비영속(New) : 영속성 컨테스트에 추가되지 않은 엔티티 객체의 상태를 의미

 > 영속(Managed) : 영속성 컨테스트에 의해 엔티티 객체가 관리되는 상태

 > 준영속(Detached) : 영속성 컨테스트에 의해 관리되던 엔티티 객체가 컨테스트와 분리된 상태

 > 삭제(Removed) : 데이터베이스에서 레코드를 삭제하기 위해 영속성 컨테스트에 삭제 요청을 한 상태

 

 

 

'Back-end.DB' 카테고리의 다른 글

[DB]DB관리  (0) 2023.08.03
[SQL]JOIN  (0) 2023.04.14
[JPA] 데이터베이스 연동  (0) 2023.01.16
[DB]ORM  (0) 2023.01.15
[DB]SDLC - 개발생명주기  (0) 2022.09.27