Java에서 ORM 기술인 JPA를 사용해 도메인을 관계형 데이터베이스 테이블에 매핑 시
공통적으로 도메인이 가진 필드나 컬럼 존재.
-> 생성일자, 수정일자, 식별자 같은 필드 및 컬럼.
JPA에서는 Audit이라는 기능을 제공.
Audit은 감시하다 라는 뜻으로 Spring Data JPA에서 시간에 대해 자동으로 값을 넣어주는 기능.
도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후 update를 하는 경우 매번 시간 데이터를 입력해주지 않아도, audit를 이용해 자동으로 시간을 매핑해 DB의 테이블에 넣어주게 됨.
엔티티를 영구 저장하는 환경
애플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB 역할.
EntityManager를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티 보관, 관리
데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성
영속성을 갖지 않는 데이터는 단지 메모리에만 존재해 프로그램 종료시 모두 잃어버림.
결국, 영속성은 특정 데이터 구조를 이전 상태로 복원할 수 있게 해줘 프로그램의 종료와 재개를 자유롭게 함.
영속성 내부 1차 캐시 존재.
영속 상태의 엔티티를 이곳에 저장하기 때문에, 1차 캐시에 엔티티가 존재한다면 DB를 찾아보지 않아도 된다.
-> 캐시로써의 기능과 장점
1차 캐시로 반복 가능한 읽기(Repeatable Read)등급의 트랜잭션 격리 수준을 데이터 베이스가 아닌 애플리케이션 차원에서 제공 가능.
em.persist()로 객체를 영속성 컨텍스트에 저장해도 DB에 바로 Insert 쿼리를 날리지 않음.
SQL 쿼리를 모았다가 flush 될 때(영속성 컨텍스트의 변경 내용을 DB에 반영할 때) 모아둔 쿼리를 모두 날림 -> 쓰기지연
영속성 컨텍스트에서 엔티티 조회 후 해당 엔티티 수정 시,
업데이트하는 코드가 없어도 영속성 컨텍스트 내의 스냅샷과 엔티티를 비교해
변경된 엔티티가 있으면 Update 쿼리를 자동으로 생성한다.
연관 관계 매핑되어 있는 엔티티를 조회 시 우선 프록시 객체를 반환하고 실제 필요할 때 쿼리를 날려 가져오는 기능
-> 필요할 때 데이터를 가져오는 기능
자바 언어를 위한 ORM 프레임워크.
JPA 구현체로, JPA 인터페이스를 구현.
내부적으로 JDBC API 사용.
데이터베이스와 객체지향 프로그래밍 언어간의 호환되지 않는 데이터들을 변환하는 프로그래밍 기법.
객체 관계 매핑!
객체지향 언어에서 사용할 수 있는 가상 객체 db 구축 방법
자바 프로그래밍 언어와 다양한 데이터베이스 SQL 또는 테이블 형태의 데이터 사이에 독립적인 연결을 지원하는 표준.
즉, DB 작업을 위한 표준
JDBC API를 사용할 경우 하나의 자바 응용 프로그램만으로 JDBC 드라이버를 제공하는 어떤 종류의 관계형 DBMS에도 접근 가능.
JDBC API만 알면 데이터베이스 조작 가능