[spring] ORM JPA

sang·2024년 5월 14일

ORM

Object Relation Mapping
자바 객체와 DB를 연결하는 프로그래밍 기법
자바만으로 DB를 다룰 수 있도록 하는 도구, sql 작성 불필요

ORM / SQL Mapper

  • ORM
    자바로 DB를 다룰 수 있게 하는 기술
    쿼리 작성 불필요
    JPA
  • SQL Mapper
    작성한 쿼리문과 자바를 연결시켜주는 기술
    쿼리 작성 필요
    MyBatis

JPA

Java Persistence API
ORM 중 하나
자바에서 관계형 DB를 사용하는 방식을 정의한 interface
사용 시 ORM 프레임워크 선택 필수

Hibernate

자바용 ORM 프레임워크
JPA 인터페이스를 구현한 구현체, implements JPA
내부에서 JDBC API를 사용



JPA Entity

Entity Manager

entity를 관리하여 DB와 application 사이에서 object의 CRUD 실행
@PersistenceContext, @Autowired를 통해 사용
Spring Data JPA에서 관리 (개발자가 직접 관리하지 않음)

Entity Manager Factory

entity manager를 만드는 곳
스프링부트 내부에 1개 존재

proxy entity manager

가짜 entity manager
필요할 때 실제 entity maneger를 호출
1개의 bean만 생성해서 공유하는 스프링부트의 동시성 문제를 피하기 위해 사용

Entity

DB table과 매핑되는 객체
DB에서 불러온 데이터 객체


영속성 컨텍스트

entity를 관리하는 가상의 공간
entity manager가 entity를 저장하는 곳
JPA의 중요한 특징

특징

DB 접근 최소화, 데이터베이스 시스템 부하 감소, 성능 향상

  • 1차 캐시
    entity 조회 시 먼저 조회해보는 곳
    key: entity의 @id, 기본기 역할을 하는 식별자
    value: entity

  • 쓰기 지연 (transactional write behind)
    transaction commit 전까지 query들을 모아두었다가 commit 시 한꺼번에 실행

  • 변경 감지
    transaction commit 시 1차 캐시와 현재 entity를 비교하여 변경 사항 DB 자동 반영

  • 지연 로딩 (lazy loading)
    필요 시에만 데이터 조회 및 로딩 query 실행
    <-> 즉시 로딩


Entity State

필요에 따라 조절하여 데이터를 바르게 유지 관리
메소드 호출을 통해 변경 가능

  • Detached
    분리 상태
    영속성 컨텍스트가 관리하고 있지 않는 상태
    detach()

  • Managed
    관리 상태
    persist()

  • Transient
    비영속 상태
    default 상태
    영속성 컨텍스트와 전혀 관계가 없는 상태

  • Removed
    삭제된 상태
    remove()



Spring Data JPA

JPA에 특화된 Spring Data 기술

Spring Data

데이터 엑세스 interface
class level에서 DB를 사용 가능하게 하는 추상화 기술
자동 query 빌딩
비즈니스 로직에 집중 가능

각 데이터베이스 특성에 맞춰 확장 기능 제공

  • JPA - Spring Data JPA
  • MongoDB - Spring Data MongoDB


*스프링 부트 3: 백엔드 개발자 되기

profile
CS 메모장

0개의 댓글