[Spring] 데이터 액세스 계층-JPA

·2022년 11월 6일
0

Spring

목록 보기
16/24
post-thumbnail
post-custom-banner

JPA

JPA란?

: Java Persistence API, Java 진영에서 사용하는 ORM 기술의 표준 사양

☝️ 표준 사양이라는 것은 Java의 인터페이스로 사양이 정의되어 있어 이것의 구현체를 따로 생성하거나 이미 존재하고 있다는 의미

Hibernate ORM

: JPA를 구현한 여러 구현체 중의 하나

  • 데이터를 다루는 작업들은 JPA를 거쳐 Hibernate ORM를 통해 이루어진다.

영속성 컨텍스트(Persistence Context)

: JPA의 P, Persistence의 의미를 영속성, 지속성이라는 뜻을 가진다. 즉, 영속성 컨텍스트란 테이블과 매핑되는 엔티티 객체 정보를 저장해 애플리케이션 내에 오래 지속되도록 하는 역할을 한다.

  • 영속성 컨텍스트는 1차 캐시 영역쓰기 지연 SQL 저장소 영역을 가진다.
  • 영속성 컨텍스트는 EntityManager 클래스에 의해 관리된다.

1차 캐시영역과 쓰기 지연 SQL 저장소 영역

  • JPA로 엔티티 객체 정보를 저장하면 영속성 컨텍스트 1차 캐시 영역에 해당 정보가 저장되고 쓰기 지연 SQL 저장소에는 INSERT 문이 저장되어 테이블에 해당 객체를 테이블로 매핑할 준비를 한다.

☝️ 쓰기 지연 SQL 저장소 영역에서는 한번 사용된 쿼리문은 삭제된다.

JPA 매핑

엔티티와 테이블 간의 매핑

: JDBC와 동일하게 @Entity 애너테이션을 사용한다.

클래스 명과 테이블 명을 동일하게 할 때는 name 애트리뷰트를 추가할 필요가 없으나, 다르게 설정할 시에는 @Entity(name="테이블명")@Table(name="테이블명") 으로 설정할 수 있다.

기본키 매핑

@Id

: 기본키로 설정을 원하는 필드변수에 해당 애너테이션을 추가하면 데이터베이스 테이블의 기본키 컬럼과 매핑된다.

☝️ 엔티티 매핑을 할 때, @Entity@Id는 필수로 들어가야 하는 애너테이션이지만 @Table은 선택적으로 사용한다.

@GeneratedValue

: 기본키의 생성 전략을 지정하는 애너테이션이다.
1. 기본키 직접 할당 : 애플리케이션 코드 상에서 기본키를 직접 할당해주는 방법
2. 기본키 자동 생성 : @GeneratedValue의 애트리뷰트(strategy)를 설정하여 자동 생성한다.
- IDENTITY
- SEQUENCE
- TABLE : 별도의 키 생성 테이블을 사용하는 전략으로 잘 사용하지 않는다.
- AUTO : JPA가 데이터베이스의 Dialect에 따라 적절한 전략을 자동으로 선택

💡 Dialect
표준 SQL등이 아닌 특정 데이터베이스에 특화된 고유한 기능

@GeneratedValue(strategy=GenerationType.IDENTITY)

: 테이블에 데이터를 INSERT한 후, 식별자를 얻을 수 있다.

  • 영속성 컨텍스트에 엔티티를 저장하려면 테이블에 INSERT를 먼저 해야되므로 commit()을 명시적으로 호출하지 않아도 persist()시 commit이 일어난다.

GeneratedValue(strategy = GenerationType.SEQUENCE)

: 테이블에 데이터를 INSERT하기 전에 SEQUENCE로 부터 식별자를 미리 얻을 수 있다.

  • persist()시 영속성 컨텍스느에 엔티티가 저장되고 commit()하기 전까지 테이블에 반영되지 않는다.

Spring Data JPA

Spring Data JPA란?

: Spring Data 패밀리 기술 중 하나로써, JPA 기반의 데이터 액세스 기술을 좀 더 쉽게 사용할 수 있게 해준다.

  • 추후 추가학습 후 추가할 것
profile
🧑‍💻백엔드 개발자, 조금씩 꾸준하게
post-custom-banner

0개의 댓글