Spring jpa(Hibernate)

이상수·2022년 12월 6일
0

Java, Spring

목록 보기
5/5

1. Spring Jpa 란?

  • Java Persistence Api의 약자로, 자바의 ORM을 위한 표준 기술

  • 내부적으로 Hibernate, Spring Jpa와 같은 구현체가 있고 이것의 표준 인터페이스가 JPA이다.

  • ORM?, 자바의 객체와 관계형 DB를 매핑하는 것으로, DB의 특정 테이블이 자바의 객체로 매핑되어 SQL을 일일이 작성할 필요없이 객체로 구현할 수 있도록 하는 프레임워크

1). 장점

  • SQL문이 아닌 Method를 이용하여 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비지니스 로직을 구성하는데만 집중할 수 있음
  • 예를들어 기존 방식에서 MySQL 데이터베이스를 사용하다가 PostgreSQL로 변환한다고 가정해보면, 새로 쿼리를 짜야하는 경우가 생김. 이런 경우에 ORM을 사용한다면 쿼리를 수정할 필요가 없음
  • 객체지향적인 코드 작성이 가능하여, 이후 유지보수와 재사용성이 높다.

2). 단점

  • 프로젝트의 규모가 크고 복잡하여 설계가 잘못되면, 속도 저하 및 일관성을 무너뜨리는 문제점 발생
  • 복잡하고 무거운 Query는 속도를 위한 별도의 튜닝이 필요(QueryDsl 사용)

2. JDBC

  • DB에 접근할 수 있도록 자바에서 제공하는 Api로, Jpa는 내부적으로 JDBC를 통해 DB에 SQL을 날릴수 있음
  • 데이터베이스의 종류에 상관없이 똑같은 코드로 해결할 수 있게 한 인터페이스

3. 영속성 컨텍스트

  • 엔티티를 영구 저장하는 환경
  • EntityManager를 통해 Entity를 저장하거나 조회할 때 EntityManager는 영속성 컨택스트 Entity를 보관하고 관리

1. 1차캐시 
 - 영속성 컨텍스트 내부에 존재하는 캐시를 통해서 영속상태의 Entity는 모두 이곳에 저장된다. 
 -(@ID) , Value형태로 저장되며 특정 엔티티를 검색할 때 먼저 1차 캐시에서 Entity를 찾고 이후 DB에서 조회후 1차 캐시에 저장하고 영속 상태인 해당 객체를 반환

2. 객체의 동일성 보장
- 같은 엔티티를 여러번 조회하더라도 영속성 컨텍스트의 1차 캐시에 해당 엔티티가 저장되어 있기에 동일한 엔티티를 반환

3. 트랜잭션을 지원하는 쓰기 지연을 수행
- EntityManager는 트랜잭션을 commit하기 진전까지 데이터베이스에 Entity를 저장하지 않고 영속성 컨텍스트 내부의 SQL 저장소에 생성 쿼리를 저장
- 이 후, 성공적으로 트랜잭션이 commit을 하게 되면 저장해 두었던 쿼리를 한꺼번에 데이터 베이스에 보낸다.
- 따라서, 중간에 어떠한 에러가 발생하더라도 DB에 즉각적으로 반영되지 않아 동일성이 보장된다.

4. 변경 감지
- 트랜잭션을 commit하는 시점에 1차 캐시의 스냅샷에 저장되어 있는 엔티티와 변경된 엔티티를 비교하여 변경된 부분을 찾아 update 쿼리를 날림
profile
Will be great Backend-developer

0개의 댓글