- 학습한 내용
- JPA
- 영속성 컨텍스트
- Entity
- 변경 감지
- flush
- 단방향&양방향
- Spring Data JPA
- JPA Auditing
- JPA
- 객체 지향 프로그래밍 언어인 Java와 관계형 데이터베이스 간의 패러다임 불일치 문제를 해결하여 데이터베이스 작업을 객체 지향적으로 수행할 수 있도록 지원한다.
- ORM
- 객체와 관계형 DB를 자동으로 Mapping하여 패러다임 불일치 문제 해결.
- JDBC API
- 데이터베이스와 상호작용 하기위해 JDBC API를 개발자 직업 사용.
- 개발자가 아닌 JPA가 중간에서 개발자의 역할을 한다.
- 사용 목적은 SQL 중심적인 개발에서 객체 중심으로 개발하기 위함.
- 생산성
- 유지보수성
- 패러다임 불일치 문제 해결
- 성능
- 영속성 컨텍스트
- 논리적인 개념
- 눈에 보이지 않는 공간이 생긴다.
- Entity Manager를 통해서 영속성 컨텍스트를 접근한다.
- Entity(객체)를 영속성 컨텍스트에 영속(저장)한다.
- 논리적인 개념
- Entity
- JPA에서 Entity란 데이터베이스의 테이블을 나태나는 클래스.
- 생명주기
- 비영속(new/transient)
- 영속(managed)
- 준영속(datached)
- 삭제(removed)
- 변경 감지(Dirty Checking)
- 영속성 컨텍스트가 엔티티의 초기상태를 저장하고 트랙잭션 커밋 시점에 현재 상태와 비교해 변경사항이 있는지 확인 가능.
- flush
- 자동 호출
- 트랜잭션이 Commit 되는 시점에 자동으로 호출된다.
- 수동 호출
- em.flush() 통해 수동으로 호출할 수 있다.
- 자동 호출
- 단방향
- 객체 간의 관계가 한쪽에서만 참조될 수 있는 관계를 말한다.
- 설정이 단순하고 유지 관리가 쉬우며 불필요한 데이터 접근을 방지할 수 있다.
- 양방향
- 객체 간의 관계가 양쪽에서 서로를 참조할 수 있는 관계를 의미한다.
- 양쪽에서 데이터를 쉽게 접근할 수 있지만 관계를 관리할 때 한쪽에서 연관 관계를 설정하거나 삭제하지 않도록 주의가 필요한다.
- Spring Data JPA
- Spring Framework에서 JPA를 쉽게 사용할 수 있도록 제공하는 모듈
- JPA 추상화 Repository
- CrudRepository, JpaRepository 인터페이스 제공
- SQL이나 EntityManager를 직접 호출하지 않아도 기본적인 CRUD 기능을 손쉽게 구현 할 수 있다.
- JPA 구현체와 통합
- 일반적으로 Hibernate를 통해 자동으로 SQL이 생성된다,.
- QueryMethods
- Method 이름만으로 SQL을 자동으로 생성한다.
- 트랜잭션 관리와 LazyLoading
- 트랜잭션 기능을 Spring과 통합하여 제공
- JPA Auditing
- 엔티티의 생성 및 수정 시간을 자동으로 관리해주는 기능.
- 사용하는 Annotation
- @EnableJpaAuditing
- JPA Auditing 기능을 활성화한다.
- @MappedSuperClass
- 해당 어노테이션이 선언된 클래스를 상속받는 Entity에 공통 매핑 정보
- @EntityListeners
- Entity를 DB에 적용되기 전, 커스텀 콜백을 요청할 수 있는 어노테이션
- @CreateDate
- 생성 시점의 날짜를 자동으로 기록한다.
- @LastModifiedDate
- 수정 시점의 날짜를 자동으로 기록한다.
- @Temporal
- 날짜 타입을 세부적으로 지정한다.
- @CreateBy
- Entity 생성자의 정보를 자동으로 저장한다.
- 생성하기 주체를 지정하기 위해서 AuditorAware<T>를 지정해야한다.
- @LastModifiedBy
- 마지막 수정자의 정보를 자동으로 저장한다.
- @EnableJpaAuditing