ORM / Spring Data JPA

2021. 8. 5. 20:30·Tech/Worklog

1. ORM (Object Relational Mapping)

객체와 관계형 DB 간의 불일치 문제를 해결하기 위한 도구

코드의 반복을 줄이고 객체 중심의 설계에 집중해서 개발할 수 있다.

 

2. Spring Data JPA

JPA - 관계형 DB 매핑이 대상으로 NoSQL 지원하지 않는다.

Spring Data -  Spring Data의 추상화된 인터페이스를 통해 NoSQL, RDBMS 등 다양한 저장소를 활용 가능하다.

Spring Data JPA - Spring Data 프로젝트의 하위 프로젝트로 Spring 환경에 적용이 쉽고 추상화가 잘 되어있다.

 

3. Spirng Data JPA Repository 구조

ORM 사용 시에는 EntityManager로 영속성 콘텍스트를 제어 한다.

Repository : No method, base역할

CrudRepository (extends Repository) : save, find, delete같은 DB 조작 method 선언

PagingAndSortingRepository (extends CrudRepository)  : paging 처리 할 수 있도록 find method의 파라미터에 sort 객체와 pageable 객체 추가 

JPA Repository (extends PagingAndSortingRepository) : DB와 Object 동기화 할 수 있는 save, saveAndFlush Method를 추가한 인터페이스 

                                              

3-1. EntityManager 

JPA는 한 스레드 당(요청마다) Entity Manager Factory에서 EntityManager를 생성한다.

(EntityManagerFactory는 서로 다른 스레드 간 공유,동시 접근 가능하나 EntityManager는 공유 불가하고, 동시 접근 시 동시성 문제가 발생한다.)

EntityManager는 내부적으로 DB커넥션 풀을 사용해 DB에 붙는다.

 

3-2. 영속성 콘텍스트   

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

Application과 DB 사이에서 객체를 보관하는 가상의 DB와 같은 역할

Java Object와 DB 간 데이터 통신/동기화 제어를 수행한다.

 

3-3. EntityManager.persist(entity)

DB에 객체를 저장하는 기능.

디테일하게는 영속성 컨테스트를 통해 엔티티를 영속화한다.

persist() 시점에는 영속화 컨텍스트에 저장하고 이후에 DB에 저장한다.

 

이런 기능을 사용하는 이유는 ?

1. EntityManager 내부에 1차 캐시 존재

   - 반복 가능한 읽기 등급의 트랜젝션 수준을 DB가 아닌 Application 차원에서 제공한다. (1차 캐시 덕분에 어떤 객체를 두번 조회해도 다른 객체가 아닌 같은 레퍼런스로 확인할 수 있다. = 비교시 true)

2. 영속 Entity의 동일성을 보장한다.

3. 쓰기 지연 (flush()) 

   - persist() 시에 엔티티들을 1차 캐시에 저장하고 논리적으로 쓰기 지연 SQL 저장소에 INSERT 쿼리들을 쌓는다. commit() 시점에 쿼리를 날리는데 이 동작이 flush()이다. flush()로 DB에 쿼리를 날려 1차 캐시와 DB 싱크를 맞춘다. 실제 쿼리를 보내고 나서 commit()한다. 

  - flush가 결국 영속성 컨텍스트 변경사항 DB 싱크 맞추는 작업 (영속성 컨텍스트(1차 캐시)를 비우는 작업이 아님)

  - 트랜젝션 commit시 혹은 JPQL 실행 시 flush 자동 호출

4. Dirty Checking (Entity 수정 감지)

  Entity 수정 시 update()나 persist() 동작 없이 Entity만 수정하면 트랜젝션 커밋 시에 업데이트 쿼리가 나간다.

 

 

*reference

https://learnandstudy.tistory.com/9

 

ORM의 활용 - Spring Data JPA

ORM(Object Relational Mapping)이란? Object(객체)와 Relation(관계형 데이터베이스)간의 불일치 문제를 해결하기 위한 도구 자바는 데이터베이스 서버에 접속해서 쿼리를 수행하고, 그 결과를 프로그램 상

learnandstudy.tistory.com

https://ict-nroo.tistory.com/130

 

[JPA] 영속성 컨텍스트와 플러시 이해하기

영속성 컨텍스트 JPA를 공부할 때 가장 중요한게 객체와 관계형 데이터베이스를 매핑하는 것(Object Relational Mapping) 과 영속성 컨텍스트를 이해하는 것 이다. 두가지 개념은 꼭 알고 JPA를 활용하자.

ict-nroo.tistory.com

 

'Tech > Worklog' 카테고리의 다른 글

[JPA] insert 시 DB Default 값 적용 (@ DynamicInsert, @ ColumnDefault)  (0) 2022.07.17
Spring boot h2 연동  (0) 2021.09.14
SQL/NoSQL  (0) 2021.03.15
'Tech/Worklog' 카테고리의 다른 글
  • [JPA] insert 시 DB Default 값 적용 (@ DynamicInsert, @ ColumnDefault)
  • Spring boot h2 연동
  • SQL/NoSQL
sooomni
sooomni
  • sooomni
    Dev Log
    sooomni
  • 전체
    오늘
    어제
    • 분류 전체보기 (20)
      • Tech (20)
        • TIL (2)
        • Worklog (4)
        • DB (4)
        • Docker (6)
        • Cloud (3)
        • 책 리뷰 (0)
        • 이펙티브자바 (1)
      • 이직기 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SQL
    NoSQL
    cloud
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sooomni
ORM / Spring Data JPA
상단으로

티스토리툴바