#.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 |