[spring] JPA란?

CHOI IN HO·2023년 11월 23일
0

SPRING

목록 보기
7/45
post-thumbnail

출처 https://velog.io/@codren/JPA-개념-및-원리

1. JPA (Java Persistence API)

Java 객체와 관계형 DB 사이를 매핑하는 ORM 기술 표준

2. JPA 장점

  • 특정 데이터베이스에 종속되지 않음
    - 데이터베이스마다 쿼리문이 조금씩 다르기 때문에 데이터베이스 변경에 어려움이 많음, 하지만 JPA 는 추상화한 데이터 접근 계층을 제공하므로 설정 파일에 사용 데이터베이스만 지정하면 됨
  • 객체 지향적 프로그래밍 및 생산성 향상
    - 개발자가 직접 SQL을 작성하는 데이터베이스 설계 중심에서 Java 객체에 집중하도록 지원
    - 테이블 컬럼 수정 시 매핑된 클래스만을 변경하면 적용됨

3. JPA 단점

  • 복잡한 쿼리 처리 불가
  • 자동으로 생성되는 쿼리로 인해서 개발자가 의도하지 않는 성능 저하
  • 방대한 JPA 기술 학습에 필요한 시간과 노력

4. JPA 동작 원리

Entity

데이터베이스의 테이블에 대응하는 클래스
데이터베이스에 item 테이블 ⟷ Item.java 클래스
@Entity 어노테이션 붙은 클래스를 JPA 가 관리

Entity Manager Factory

엔티티 매니저 인스턴스를 관리하는 주체
Application 실행 시 한 개만 만들어짐
사용자로부터 요청이 오면 엔티티 매니저를 생성

Entity Manager

Persistence Context 에 접근하여 DB 작업을 제공하는 객체
내부적으로 DB Connection 을 이용해서 DB 에 접근

Persistence Context

Entity 를 영구 저장하도록 지원하는 환경으로써 엔티티 매니저를 통해 접근 가능함

Entity Life Cycle

비영속 (new)

  • new 키워드를 통해 생성된 상태로 아직 영속성 컨텍스트에 저장되지 않음

영속 (managed)

  • 엔티티가 영속성 컨텍스트에 저장되어 관리되는 상태
  • 아직 DB 에 저장된 상태 X, 트랜잭션 Commit 후에 DB 에 반영

준영속 상태 (detached)

  • 영속성 컨텍스트에 엔티티가 저장되었다가 분리된 상태

삭제 상태 (removed)

  • 영속성 컨텍스트와 데이터베이스에서 삭제된 상태

5.영속성 Context

영속성 컨텐스트란 엔티티를 영구 저장하는 환경이라는 뜻이다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다

트랜잭션을 지원하는 쓰기 지연(transactional write-behind)

em.find(member)를 사용해 member를 저장해도 바로 INSERT SQL이 DB에 보내지는 것이 아니다. 엔티티 매니저는 트랜잭션을 커밋하기 직전까지 내부 쿼리 저장소에 INSERT SQL을 모아둔다. 그리고 트랜잭션을 커밋할 때 모아둔 쿼리를 DB에 보낸다. 이것을 트랜잭션을 지원하는 쓰기 지연이라 한다.

1차 캐시

영속성 컨텍스트 내부에는 캐시가 있는데 이를 1차 캐시라고 한다. 영속 상태의 엔티티를 이곳에 저장한다. 1차 캐시의 키는 식별자 값(데이터베이스의 기본 키)이고 값은 엔티티 인스턴스이다. 조회하는 방법은 다음과 같다.

profile
개발자기 되기 위해선 무엇이든!

0개의 댓글