JPA와 Spring Data JPA

wisdom·2022년 10월 9일
0

Spring Boot

목록 보기
2/7
post-thumbnail

JPA(Java Persistence API)

자바 진영의 ORM(Object Relational Mapping, 객체-관계 매핑) 기술 표준으로, 객체와 테이블을 매핑해주어서 SQL을 직접 다루지 않고 객체지향적으로 개발할 수 있도록 도와주는 인터페이스이다.

JPA의 구현체로는 하이버네이트 프레임워크가 있다.

장점

  1. 반복적인 코드와 CRUD용 SQL을 직접 작성하지 않아도 된다. (생산성)

    • C : em.persist()
    • R : em.find()
    • U : setter 사용 → dirty checking (변경 감지)
    • D : em.remove()
  2. 객체와 관계형 데이터베이스 간의 패러다임 불일치 문제 해결

    • 상속
    • 연관관계
    • 객체 그래프 탐색(→ 지연로딩)
    • 비교하기
  3. 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해서 특정 데이터베이스 기술에 종속되지 않도록 한다. (데이터베이스 독립적)

dirty checking (변경 감지)

  • 엔티티를 영속성 컨텍스트에 보관할 때, 스냅샷을 저장하여 플러시 시점에 스냅샷과 엔티티를 비교하여 변경된 엔티티를 찾는다.
  • 트랜잭션을 커밋하면 엔티티 매니저 내부에서 먼저 flush()가 호출된다.
  • 변경된 엔티티가 있으면 수정 쿼리를 생성해서 쓰기 지연 SQL 저장소에 보내고, 쓰기 지연 저장소의 SQL을 데이터베이스에 보낸 후 데이터베이스 트랜잭션이 커밋된다.

EntityManager : 영속성 컨텍스트에 접근할 수 있으며, 엔티티를 관리한다.

영속성 컨텍스트 (persistence context) : 엔티티를 영구히 저장하는 환경


Spring Data JPA

Spring Data JPA 는 Spring에서 제공하는 모듈 중 하나로,  스프링 프레임워크에서 JPA를 더 쉽고 편하게 사용할 수 있도록 지원하는 프로젝트다.

DAO를 개발할 때마다 반복되는 CRUD를 처리하기 위한 공통 인터페이스(JpaRepository)를 제공하며, 개발 시 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있다는 장점이 있다. (실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입해준다)

또한 쿼리 메서드 기능을 지원하여, 메서드 이름만으로 쿼리를 생성해주는 등의 편리한 기능을 제공한다.

profile
백엔드 개발자

0개의 댓글