코드 그라데이션

JPA 관련 정리 본문

Spring/SpringShop

JPA 관련 정리

완벽한 장면 2023. 6. 30. 00:51

JPA(Java Persistence API)

: 자바 ORM 기술에 대한 API 표준

 

ORM(Object Relational Mapping)

: 객체와 관계데이터베이스를 매핑

 

CRUD – INSERT, UPDATE, SELECT, DELETE

그리고, 데이터베이스는 관계형 데이터베이스를 사용한다.

 

그런데 자바는? 객체지향 언어이므로 객체와 관계형 데이터베이스 간에 필연적으로 불일치가 발생하고, 이것은 큰 문제가 된다.

=> 따라서 객체지향과 관계형 데이터베이스 간의 패러다임이 불일치 하기 때문에, ORM이 등장.

ORM을 이용한 자바 객체와 관계형 데이터베이스 매핑

 

 

# JPA는 인터페이스

 

# 대표적인 구현체

  • Hibernate, EclipseLink, DataNucleus, OpenJpa, TopLink
  • 보통 Hibernate 로 개발.

 

JPA의 장점

1. 특정 데이터베이스에 종속되지 않음

- 추상화한 데이터 접근 계층을 제공

 

2. 객체지향적 프로그래밍이 가능

데이터베이스 설계 중심의 패러다임에서 객체지향적으로 설계가 가능해진다.

 

3. 생산성 향상

- 관리 용이, 유지보수 측면에서 수월, 재사용성 증가

 

JPA의 단점

1. 복잡한 쿼리 처리

 – 따라서 JPQL을 지원

 

2. 성능 저하 위험

- 매핑 설계를 잘못했을 때 성능 저하 발생

 

3. 학습시간 

 관계형 데이터베이스를 학습한 후 JPA를 사용하기를 권고

 

 

JPA의 동작 방식

엔티티

  • 테이블 클래스 @Entity item테이블을 만들고, 이에 대응하는 Item.java 클래스를 만들어서 @Entity 어노테이션을 붙이면 클래스가 엔티티가 된다.
  • 클래스 자체나, 생성한 인스턴스(객체)도 엔티티라고 부른다.

 

엔티티 매니저 펙토리

  • 엔티티 매니저 인트턴스를 관리하는 주체
  • 한 개만 만들어지며 엔티티 매니저 팩토리로부터 엔티티 매니저를 생성

 

엔티티 매니저

  • 영속성 컨텍스트에 접근 엔티티에 대하여 데이터베이스 작업을 제공
  • find() – 검색 / persist() – 저장 / remove()  삭제 / flush() – 반영

 

영속성 컨텍스트

: 엔티티를 영구 저장하는 환경

 

 

엔티티 생명주기

그림
엔티티 생명주기 구분

샘플코드와 설명

 

 

 

영속성 컨텍스트 사용 시 이점

- 애플리케이션과 데이터베이스 사이에 영속성 컨텍스트라는 중간계층을 만들면 버퍼링, 캐싱등을 할 수 있는 장점이 있다.

1차 캐시

  • Map<key,value>로 저장
  • 영속성 컨텍스트의 1차캐시를 조회. 데이터가 존재할 경우 반환
  • 없으면 데이터베이스에서 조회 후 1차 캐시에 저장 및 반환

동일성 보장

- 하나의 트랜잭션에서 같은 키값으로 영속성 컨텍스트에 저장된 엔티티 조회 시 같은 엔티티 조회를 보장한다.

 

트랜잭션을 지원하는 쓰기 지연

- 지연 SQL 저장소가 존재 커밋하는 시점에 저장된 SQL문들이 flush되면서 데이터베이스 반영

 

변경 감지

- 변경 내용이 있다면 UDATE SQL문을 쓰기 지연 SQL저장소에 담아둔다.

커밋시점에서 자동으로 반영되며, Update문을 따로 호출힐 필요가 없다

728x90
Comments