JPA

ORM

  • ORM Object Relational Mapping
    • 자바 객체의 RDB 테이블을 매핑해서 SQL 작성 없이도 자바 코드로 데이터를 다루는 기술
  • JPA Java Persistence API
    • 자바의 ORM 표준 인터페이스
    • 자바 객체와 데이터베이스를 연결해서 데이터를 관리한다.
  • Hibernate
    • JPA 인터페이스를 실제로 구현한 대표적인 프레임 워크
    • 내부적으로 JDBC를 활용함

엔티티와 엔티티 매니저

  • 엔티티: 데이터베이스의 테이블과 매핑되는 객체. 즉, 데이터베이스에 영향을 미치는 쿼리를 실행하는 객체

  • 엔티티 매니저: 엔티티를 관리하고, 데이터베이스와 애플리케이션 사이에서 객체를 생성/수정/삭제하는 역할을 함 -> 얘를 만드는

    • 예시) 회원 2명이 가입한다고 하면?

영속성 컨텍스트 Persistence Context

  • 성능 개선에 관심이 많으면 파고들어야 할 부분 (아래와 같은 최적화 기능 제공)
    1. 1차 캐시
    • 반복적인 데이터 조회를 DB가 아닌 메모리에서 처리해 성능을 높임
      1. 쓰기 지연 Transactional Write-Behind
    • 쿼리를 모았다가 트랜잭션 커밋 시점에 한꺼번에 실행해서 DB 부하를 줄임
      1. 변경 감지 Dirty Checking
    • 엔티티의 상태 변화를 감지해서 자동으로 update 쿼리를 생성한다.
      1. 지연 로딩 Lazy Loading
    • 데이터가 실제 필요한 시점에 쿼리를 날려서 불필요한 리소스 낭비를 방지함

엔티티의 생명주기

  1. 비영속: 객체만 생성된 상태
  2. 관리: 영속성 컨텍스트에 저장되어 JPA의 관리를 받는 상태
  3. 분리: 한 번 관리되었다가 연결이 끊긴 상태
  4. 삭제: 삭제가 예약된 상태

스프링 데이터 JPA

  1. 추상화: JPA를 더 쉽게 사용하도록 클래스 레벨에서 한 번 더 추상화
  2. JpaRepository: 해당 인터페이스를 상속받는 것만으로도 기본적인 CRUD 가능
  3. 쿼리 메서드: 메서드 이름만으로 쿼리를 자동 생성하며, 페이징 및 정렬 기능을 지원함

JPQL 과의 차이점

구분 JPA (Spring Data JPA) JPQL Querydsl
정체성 자바 ORM 기술 표준 및 추상화 라이브러리 JPA 전용 객체지향 쿼리 언어 JPQL 작성을 돕는 타입 세이프 빌더
작성 방식 인터페이스 메서드 이름 기반 문자열(String) 기반 쿼리 작성 자바 코드 기반 (Q-Class 활용)
에러 감지 컴파일 시점 (메서드 명칭 등) 런타임 시점 (실행 시 오류 발견) 컴파일 시점 (자바 문법 체크)
동적 쿼리 처리하기 매우 어려움 문자열 조합으로 가능 (가독성 낮음) 매우 강력하고 편리함
가독성 단순 쿼리 시 좋음, 복잡해지면 최악 SQL과 유사하여 익숙함 자바 코드로 작성되어 유지보수 좋음
성능 최적화 기본 기능만으로는 한계 있음 Fetch Join 등으로 성능 개선 가능 JPQL의 최적화 기능을 모두 활용 가능

참고: https://yozm.wishket.com/magazine/detail/2160/

results matching ""

    No results matching ""