JPA

이상혁·2024년 2월 26일
0

Jpa란

Jpa란 자바 진영에서 ORM 기술 표준으로 사용되고 있는 인테페이스이다.
쉽게 이야기하면 자바에서 객체를 데이터베이스에 저장하고 관리하기 위한 인터페이스이다.
Jpa에 구현체로는 대표적으로 Hibernate가 있다.

Jpa를 쓰는 이유

우리가 개발을 할 때는 객체지향을 통해서 개발을 한다.
보통 데이터 베이스는 관계형 DB를 사용한다.
즉, 우리는 객체를 관계형 DB에 저장을 하고 관리를 한다.
그렇기 때문에 데이터를 조회하고 저장하고 관리하기 위해선 수 많은 SQL문을 사용할 수 밖에 없다.
즉, SQL 중심적인 개발이 된다.

SQL 중심적인 개발의 문제점은 같은 쿼리문을 반복하고 계속 작성을 해야 한다.
그리고 만약 갹체에 필드가 추가가 된다면 SQL문도 변경을 해주어야 한다.
즉, SQL에 의존적인 개발이 된다.

그리고 패러다임의 불일치가 발생하게 된다.
객체와 관계형 데이터베이스에는 차이가 존재한다.
객체와 관계형 데이터베이스는 목적이 다르게 설계가 되어 있기 때문에 맵핑을 하는데 있어서 여러 문제가 발생을 한다.

이러한 문제를 해결하고 Jpa는 객체 중심의 개발이 가능하도록 해준다.

JPA 구조


Jpa의 구조를 간단하게 살펴보면 애플리케이션이 있고 애플리케이션에서 요청을 보내면 Jpa에 내부에서 JDBC의 API를 호출해서 DB와 통신을 한다.

JPA 동작원리

Jpa의 동작원리를 이해하기 위해선 Jpa의 영속성을 이해해야 한다.
영속성이란 데이터를 생성한 프로그램이 종료가 되어도 데이터가 사라지지 않은 특성을 말한다.

영속성 컨텍스트
영속성 컨텍스트는 엔티티를 영구 정정하기 위한 공간이다.
가상의 DB이다.
엔티티 매니저가 영속성 컨텍스트에 저장을 하고 관리를 하다가 트랙잭션이 끝나면 DB에 저장을 한다.
영속성 컨텍스트는 여러가지 특징을 가지고 있다.

  1. 1차 캐시
    영속성 컨텍스트는 내부에 1차 캐시를 가지고 있다.
    그래서 엔티티를 조회할 때, 1차 캐시를 먼저 조회하고 1차 캐시에 있으면 반환, 없으면 DB를 조회해서 가져온다.
    이 때, 캐시의 키는 @Id의 기본키 역할을 하는 식별자이며, 값은 엔티티이다.

  2. 쓰기 지연
    쿼리문을 실행 될 때 마다 보내는 것이 아니라 쿼리문을 모아 두었다가 트랜잭션이 끝나면 한번에 보낸다.

  3. 변경 감지
    트랜잭션이 일어나면 1차 캐시에 저장이 되어 있는 엔티티 값과 DB의 값을 비교해서 변경된 값이 있다면 데이터베이스에 자동으로 저장이 된다.

  4. 지연로딩
    지연 로딩은 쿼리로 요청한 데이터를 애플리케이션으로 바로 로딩하는 것이 아니라 필요할 때 쿼리를 보내 데이터를 조회하는 것을 의미한다.

엔티티
하나의 객체이다.
이 객체는 DB의 테이블과 맵핑이 되는 객체이다.

엔티티 매니저
엔티티 매니저는 영속성 컨텍스트에 접근을 해서 엔티티에 대한 DB 작업을 한다.
이 엔티티 매니저는 엔티티 매니저 팩토리에서 관리를 하는데
이 엔티티 매니저 팩토리는 데이터 베이스가 하나만 연결이 된 애플리케이션에서는 하나만 생성이 된다.
엔티티 메니저 팩토리는 스레드가 공유가 되어도 문제가 없지마 엔티티 매니저는 스레드가 공유가 되면 동시성 문제가 발생을 할 수도 있다.

엔티티 매니저 팩토리는 각각의 엔티티에 엔티티 매니저를 생성해서 관리를 한다.
엔티티 매니저는 엔티티를 영속성 컨텍스트에 등록하고 생명주기에 따라 관리를 한다.

profile
개발 공부 하기 위해 만든 블로그

0개의 댓글