TIL 2023/11/06 Spring Entity

YEONGDO·2023년 11월 6일

1. JPA

JPA: Java Persistence API
자바 ORM 기술에 대한 표준 명세

  • JPA는 애플리케이션과 JDBC 사이에서 동작되고 있다.
  • JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리해준다.
  • 또한 객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리할 수 있다.

1) 하이버네이트

  • JPA 는 표준 명세이고, 이를 실제 구현한 프레임워크 중 사실상 표준하이버네이트 이다.
  • 스프링 부트에서는 기본적으로 ‘하이버네이트’ 구현체를 사용 중

2. Entity

  • JPA에서 관리되는 클래스 즉, 객체를 의미
  • Entity 클래스는 DB의 테이블과 매핑되어 JPA에 의해 관리

(어려우니까 나중에 다시 공부하쟈)

3. 영속성 컨텍스트

Persistence를 한글로 번역하면 영속성, 지속성

Persistence를 객체의 관점으로 해석해 보자면 ‘객체가 생명(객체가 유지되는 시간)이나 공간(객체의 위치)을 자유롭게 유지하고 이동할수 있는 객체의 성질’을 의미

영속성 컨텍스트를 좀 더 쉽게 표현해 보자면 Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간

개발자들은 이제 직접 SQL을 작성하지 않아도 JPA를 사용하여 DB에 데이터를 저장하거나 조회할 수 있으며 수정, 삭제 또한 가능

1) EntityManager

  • 영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요

    EntityManager는 이름 그대로 Entity를 관리하는 관리자.

  • 개발자들은 EntityManager를 사용해서 Entity를 저장하고 조회하고 수정하고 삭제할 수 있다..
  • EntityManager는 EntityManagerFactory를 통해 생성하여 사용할 수 있다.

2) EntityManagerFactory

  • EntityManagerFactory는 일반적으로 DB 하나에 하나만 생성되어 애플리케이션이 동작하는 동안 사용됩니다.
  • EntityManagerFactory를 만들기 위해서는 DB에 대한 정보를 전달해야한다.

3) JPA의 트랜잭션

  • 트랜잭션은 DB 데이터들의 무결성과 정합성을 유지하기 위한 하나의 논리적 개념
    • 쉽게 표현하자면 DB의 데이터들을 안전하게 관리하기 위해서 생겨난 개념
  • 가장 큰 특징은 여러 개의 SQL이 하나의 트랜잭션에 포함될 수 있다는 점
  • 이때, 모든 SQL이 성공적으로 수행이 되면 DB에 영구적으로 변경을 반영하지만 SQL 중 단 하나라도 실패한다면 모든 변경을 되돌린다.

4. 영속성 컨텍스트의 기능

영속성 컨텍스트는 Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간

  • 영속성 컨텍스트는 내부적으로 캐시 저장소를 가지고 있다.
    • 우리가 저장하는 Entity 객체들이 1차 캐시 즉, 캐시 저장소에 저장된다고 생각하면된다.
    • 캐시 저장소는 Map 자료구조 형태로 되어있다.
      • key에는 @Id로 매핑한 기본 키 즉, 식별자 값을 저장.
      • value에는 해당 Entity 클래스의 객체를 저장.
      • 영속성 컨텍스트는 캐시 저장소 Key에 저장한 식별자값을 사용하여 Entity 객체를 구분하고 관리
  • JPA의 트랜잭션을 학습하면서 JPA가 트랜잭션 처럼 SQL을 모아서 한번에 DB에 반영한다는 것을 배웠습니다.
    • JPA는 이를 구현하기 위해 쓰기 지연 저장소를 만들어 SQL을 모아두고 있다가 트랜잭션 commit 후 한번에 DB에 반영

마치며..

주말동안 조금 개인과제에 대해 탐구하고 오늘 과제를 했다! 강의를 열심히 들었으면 충분히 할 수 있을 만한 과제일 거 라고 생각했지만.. 생각보다 복잡했다.. ㅜㅜ
그래도 다 완성해서 erd, Diagram, API 명세서 까지 작성해서 제출했다! 내일부터 스프링 숙련인데 숙련 강의 듣기 전에 Entity부터 영속성 컨텍스트, JPA까지 정리하면서 듣고 숙련을 들어야겠다~~!

profile
개발 블로그

0개의 댓글