코드 그라데이션
JPA 관련 정리 본문
JPA(Java Persistence API)
: 자바 ORM 기술에 대한 API 표준
ORM(Object Relational Mapping)
: 객체와 관계데이터베이스를 매핑
CRUD – INSERT, UPDATE, SELECT, DELETE
그리고, 데이터베이스는 관계형 데이터베이스를 사용한다.
그런데 자바는? 객체지향 언어이므로 객체와 관계형 데이터베이스 간에 필연적으로 불일치가 발생하고, 이것은 큰 문제가 된다.
=> 따라서 객체지향과 관계형 데이터베이스 간의 패러다임이 불일치 하기 때문에, 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문을 따로 호출힐 필요가 없다
'Spring > SpringShop' 카테고리의 다른 글
shop 구현 (3) Entity, Dto, Service 계층 + QueryDsl (0) | 2023.07.09 |
---|---|
shop 구현 (2) Controller, Model (0) | 2023.07.08 |
shop 구현 (1) 시큐리티 관련 (0) | 2023.07.07 |
데이터베이스 초기화 전략 - DDL Auto 옵션 (0) | 2023.06.30 |
스프링 프레임워크 도입 (0) | 2023.06.29 |