Coding/Back - Spring Framework

Spring Persistence(DataAccess) Layer : JPA 개념 1/3 #Day9

꿀딴지- 2023. 8. 28. 17:05

spring layer의 마지막 DB와 통신하는 DataAccess Layer.

@Controller

@Service

@Repository : DataAcessLayer(Persistence) - JPA spring에서 권장하는 db통신 기법

 

JPA(Java Persistence API, Jakarta Persistence)

  • Java진영에서 사용하는 ORM 기술의 표준 사양(java interface) → 구현체는 따로 있음
    • JPA 구현체 : Hibernate ORM, EclipseLink, DataNucleus 등
    • ORM : Object(=자바)-relational(=RDBMS) mapping
  • db통신을 할 수 있는 java제공 도구(db통신을 자바스럽게 하게 도움을 줌)

 

db↔ JDBC ↔ (hibernate) ↔ JPA ↔ spring data JPA

  • JDBC : 접속정보를 담은 클래스를 가지고 객체를 만들면 db와 통신할 수 있도록 커넥션을 만들어 줌 → 커넥션 객체에 string타입으로 퀴리를 직접 작성 ⇒ Low level 코드작성이 필요하고, 품질유지 및 객체지향적이지 못함
  • JPA : JDBC 통신방식 위에 JPA Layer를 쌓음
    • 인터페이스의 집합이기 때문에 단독으로 수행하진 못함 → 구현체 필요
  • Hibernate ORM(JPA 구현체) : JPA 표준품질을 구현
  • Spring Data JPA : 한단계 더 커스터마이징 함

JPA 구조 및 특성

<JPA 자동관리 영역> 

persistence(영속성, 지속가능한 상태로 만들어주는 성질)

  1. 1차 캐시(영역) : Entity 모음
    • entity가 db와 최신상태와 동일하게 가지고 있음.
  2. 쓰기 지연(영역) : SQL 저장소
    • db에 커밋되기 전까지 수행되어야 할 쿼리들을 쌓아둠 → 일괄(묶음)로 처리함
    • 트랜젝션 처리가 가능하게 해주는 영역
  3. 변경 감지 : 캐시를 쓸지, db에서 받아서 entity를 최신화 해야 할지를 감지하고, 변경을 감지하면 묶음으로 업데이트 필요함
  4. 지연 로딩 : FK되어있더라도 딱 그 해당 테이블만 가져오고, FK가 조회되는 시점에 다른 테이블까지 가져옴

⇒ db와 통신 횟수를 줄임

 

<ORM> 관계형 테이터베이스 모델을 객체지향으로 매핑해주는 것

클래스(엔티티) ↔ db table 과 매핑됨(ORM)

  • entity가 너무 많으니까 entity-manager(엔티티 관리자 - 객체(entity)들을 관리해주는 공간 ← entity-factory(싱글톤, spring 내부에서 only one) 에서 생성됨 )를 둠.