[Spring] Spring Data JPA

JinKyung·2023년 3월 20일
0

Spring

목록 보기
3/5

JPA란?

  • Java Persistence API. 자바 ORM 기술에 대한 API 표준
    • ORM? Object Relational Mapping. 객체와 관계형 데이터베이스를 매핑해주는 것

객체와 관계형 데이터베이스의 패러다임 불일치

자바는 객체 지향적으로, 관계형 데이터베이스는 데이터를 정규화해서 잘 보관하는 것을 목표로 함.

→ 객체를 DB에 넣으려면 SQL문으로 변환해야 하고, DB에서 다시 객체를 꺼내올 때도 SQL문을 작성해야 한다.

이는 결국에 객체를 단순히 데이터 전달 목적으로 사용할 뿐, 객체지향적인 프로그래밍은 불가능!

이를 해결하기 위해 나온 기술이 ORM. 중간에서 2개를 매핑하는 역할.

JPA는 ORM 기술의 표준 명세로 자바에서 제공하는 API.

JPA 동작 방식

EntityManagerFactory는 여러 스레드에서 접근해도 안전하지만, 생성하는 비용이 상당이 큼.
→ EntityManagerFactory는 요청이 올 때마다 생성 비용이 거의 없는 EntityManager를 생성한다.
(EntityManager는 여러 스레드가 동시에 접근하면 동시성 문제가 발생해 요청별로 (=스레드별로) 한 개씩 할당)

엔티티 (Entity)

데이터베이스의 테이블에 대응하는 클래스. @Entity가 붙은 클래스.

  • 영속성을 가진 객체로 DB 테이블에 보관할 대상.
  • 영속 컨텍스트에 속한 객체

ex) Item.java 클래스에 @Entity 어노테이션을 붙이면 이 클래스가 엔티티가 됨.

엔티티 매니저 팩토리 (Entity Manager Factory)

엔티티 매니저 인스턴스를 관리하는 주체.

애플리케이션 실행 시 한 개만 만들어지며, 사용자로부터 요청이 오면 엔티티 매니저 팩토리로부터 엔티티 매니저를 생성.

엔티티 매니저 (Entity Manager)

영속성 컨텍스트에 접근해 엔티티에 대한 DB 작업 제공

내부적으로 DB 커넥션을 사용해 DB에 접근.

  1. find(): 영속성 컨텍스트에서 엔티티 검색. 없으면 DB 가서 찾아 영속성 컨텍스트에 저장
  2. persist(): 엔티티를 영속성 컨텍스트에 저장
  3. remove(): 엔티티 클래스를 영속성 컨텍스트에서 삭제
  4. flush(): 영속성 컨텍스트에 저장된 내용을 DB에 저장

영속성 컨텍스트 (Persistence Context)

그렇다면 영속성 컨텍스트는 도대체 뭘까

엔티티를 영구 저장하는 환경. 엔티티 매니저를 통해 접근 가능

  • 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 논리적 개념.
  • EntityManager를 통해서 영속성 컨텍스트에 접근.

0개의 댓글