[ Spring ] JPA

Wooju Kang ·2024년 9월 25일

[ FrameWork ] Spring

목록 보기
9/10
post-thumbnail

GIF 출처 : https://sigridjin.medium.com/spring-transaction-관리에-대한-메모-f391fd2885b4
그림 자료 출처 : 김영한 - 자바 ORM 표준 JPA 프로그래밍 그림자료

🖥 Contents


1 ) JPA 란?

2 ) JPA 구동 방식

3 )

4 )





1 ) JPA 란?


  • JPA란?
    : JPA는 Java Persistence API의 약자로 java의 ORM 기술의 표준 명세이다. 기존의 JDBC 나 MyBatis와 같은 SQL Mapper 방식이 아닌 ORM 방식의 기술이기 때문에 보다 편리하게 데이터베이스의 접근을 통해 데이터를 처리 ( CRUD ) 할 수 있게 되었다.

    그럼 JPA가 도입된 이유는 무엇인가? 각 데이터베이스는 제공하는 SQL 문법과 함수가 약간씩 다르다. 즉, 각 데이터베이스마다 ' 방언 ( Dialect ) ' 이 존재하기 때문이다.
    그렇기 때문에 ' 통합된 ' 하나의 규격을 통해서 데이터베이스의 종류에 상관없이 객체와 매핑을 할 수 있는 방법이 필요했고 그것이 바로 ORM 기술이다. 그 중 JPA는 ORM 기술의 표준으로 사용되기 때문에 잘 알아둘 필요가 있다.



2 ) JPA 구동 방식


JPA는 영속성 콘텍스트 ( Persistence Context ) 라는 환경을 통해 Entity를 저장한다. 여기서 영속성 콘텍스트는 " 엔티티를 영구 저장하는 환경 " 이라는 의미를 가지고 있다.

" 그럼 JPA가 데이터베이스에 어떠한 과정을 통해서 데이터를 CRUD 하는가? "

먼저 JPA의 설정정보를 담은 파일을 조회하여 정보를 찾는다. 이는 데이터베이스의 URL , USERNAME , PASSWORD 등을 담고 있다. 그 후에 EntityManagerFactory를 생성하여 EntityManager를 생성하여 Entity를 관리한다.

이를 토대로 사용자가 특정한 요청을 웹 어플리케이션에 주문한 상황을 예시로 들어보자. 사용자가 요청을 하게 되면 EntityManagerFactory는 그에 맞는 EntityManager를 생성한다. 그 후 EntityManager를 통해서 사용자는 DB에 접근하는 트랜잭션 과정을 거친다.

해당 과정을 통해서 JPA는 데이터베이스와 사용자의 요청 사이에서 CRUD가 이루어지도록 한다. 이때 엔티티는 하나의 생명주기를 가지는데 총 4가지의 생명주기 상태가 존재한다.

  • 엔티티의 생명주기

    1. 비영속 ( new / transient )
    : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
    2. 영속 ( managed )
    : 영속성 컨텍스트에 관리되는 상태
    3. 준영속 ( detached )
    : 영속성 컨텍스트에 저장되었다가 분리된 상태
    4. 삭제 ( Removed )
    : 삭제가 된 상태

그럼 이러한 영속성 콘텍스트를 사용하는 이유는 무엇인가? 영속성 콘텍스트를 사용하는 것에는 다양한 이점이 뒤따른다.

  • 장점
  1. 1차 캐시이기 때문에 매번 SQL을 던지지 않는다. 이 때문에 데이터베이스의 접근을 최소화한다.
  2. 그에 따른 지연 로딩 , 쓰기 지연으로 데이터베이스 접근 최소화
  3. 변경 감지로 영속성 컨텍스트가 엔티티의 변경 사항을 자동으로 감지하여 트랜잭션 커밋 시 변경된 엔티티만 데이터베이스에 반영하는 장점

그렇다면 어떠한 과정을 통해 1차캐시와 DB의 접촉이 이루어지는가?

JPA는 1차 캐시에서 @Id 값을 통해서 Entity를 조회하고 해당하는 정보를 가져온다. 만약 해당하는 @Id가 존재하지 않을경우 DB를 조회한 후 이를 1차 캐시에 저장하게 된다.




3 ) 아직 수정중






4 ) 아직 수정중


  • 아직 수정중

profile
배겐드 📡

0개의 댓글