카테고리 없음

Spring JPA

happyst 2024. 6. 24. 20:11
JPA (Java Persistence API)
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
  • 자바 ORM 기술에 대한 API 표준 명세를 의미
  • JPA를 구현한 구현체로는 Hibernate, EclipseLink, DataNucleus 등 여러 프레임워크가 존재

출처: 자바 ORM 표준 JPA 프로그래밍

  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행됨

 

ORM (Object  Relational Mapping)
  • 객체와 DB 테이블을 매핑하는 기술
  • SQL 문법 대신 객체에 대한 코드(메소드)로 데이터베이스를 조작할 수 있어서 직관적이고 객체지향적임
    • ex. SELECT * FROM device; 라는 SQL 쿼리 대신 device.findAll() 이라는 메소드를 사용함
  • ERD를 보는 의존도를 낮출 수 있음

 

  • 복잡한 쿼리는 별도의 튜닝이 필요하기 때문에 한계가 있을 수 있음

 

JPA 영속성 컨텍스트 (Persistence Context)
  • entity를 저장/관리하는 저장소
  • 어플리케이션과 데이터베이스 사이에서 entity를 보관하는 가상의 데이터베이스 같은 역할

 

영속성 컨텍스트 사용의 이점 - 1차 캐시
  • 영속성 컨텍스트 내부에는 1차 캐시가 존재함
  • persist를 하면 entity가 영속성 컨텍스트에 저장되며, 1차 캐시에도 존재함
  • 한 트랜잭션 내에서 entity를 조회하는 경우, 1차 캐시에 이 entity가 존재하는지 찾음
  • 1차 캐시에 entity가 존재한다면, 데이터베이스를 조회하지 않고 1차 캐시에 있는 내용을 가져옴
  • 1차 캐시에 entity가 존재하지 않는다면, 데이터베이스에서 이를 조회하고 조회 결과를 entity로 생성하여 1차 캐시에 저장 후 이를 반환함
  • 1차 캐시는 어플리케이션 전체에서 공유하는 것이 아니라, 하나의 트랜잭션 내에서만 공유함!!!

 

영속성 컨텍스트 사용의 이점 - 쓰기 지연 SQL
  • persist를 하면 entity는 1차 캐시에 저장되고 쿼리는 쓰기 지연 SQL 저장소에 쌓임
  • 즉, 쿼리가 바로 데이터베이스에 반영되는 것은 아님
  • 트랜잭션을 commit하기 전까지 쓰기 지연 SQL 저장소에 쿼리를 쌓아서 저장하다가, 트랜잭션을 commit하면 flush가 되면서 저장소에 쌓인 쿼리를 데이터베이스에 보내서 반영함