Spring/기본 구성

6. ORM 개념 with. Spring Data JPA

초코chip 2024. 1. 18. 14:50

ORM 기본 개념

정의

object-relational-mapping : DB를 객체로 매핑하여, DB를 객체 다루듯 사용할 수 있도록 하는 도구

 

장단점

  • 장점 :
    • 객체지향적으로 DB 접근이 가능
    • DB 시스템이 추상화 되어있기 때문에, DBMS에 대한 종속성 감소( 교체 쉬움 )
  • 단점 :
    • 쿼리의 복잡성이 커지면 사용 난이도가 올라가고, 해결 불가능한 쿼리도 존재

 

JPA & Hibernate

정의

  • JPA : 자바 애플리케이션에서 RDBMS를 사용하는 방식만을 정의한 표준 "인터페이스"
    • 인터페이스이기에 실제 사용을 위해 ORM 프레임워크를 선정해야함
  • 하이버네이트(Hibernate) : JPA에 대한 구현체( 자바용 ORM 프레임워크 ), 내부적으로 JDBC API를 사용

JPA 용어

  • 엔티티(Entity) : RDMS의 테이블과 매핑되는 객체(튜플)
  • 엔티티 매니저(Entity manager) : 영속성 컨텍스트에서 엔티티 인스턴스를 관리(생성, 수정, 삭제)하는 역할 수행
  • 엔티티 매니저 팩토리(Entity manager factory) : 엔티티 매니저를 만드는 곳

요청 -> 요청 처리를 위한 엔티티 매니저 생성 -> 요청과 관련된 엔티티 관리 -> DB 연결

 

영속성 컨텍스트

정의/목적/주요기능

  • JPA의 중요한 특징 중 하나, 엔티티를 관리하는 가상의 공간
  • 목적 : 주로 데이터베이스 접근을 최소화하여 성능을 향상
  • 주요 기능
  1. 1차 캐시
    • 1차 캐시는 기본키(@id)(key)를 사용하여 엔티티(value)를 저장하는 메모리 공간
    • 이점 : 1차 캐시에 저장된 데이터는DB를 거치지 않고 바로 조회 가능
  2. 쓰기 지연 (Transactional Write-Behind)
    • 커밋(commit) 이전에 엔티티의 변경 내용을 DB에 반영하지 않고 대기시키는 기능
    • 이점 : 쿼리를 묶어서 요청하여 DB 접근 최소화
  3. 변경 감지
    • 트랜잭션을 커밋할 때, 1차 캐시에 저장된 엔티티와 비교하여 변경된 사항이 있으면 DB에 반영하는 기능
    • 이점 : 변경 사항을 효율적으로 쿼리로 요청하여 DB 접근 최소화
  4. 지연 로딩 (Lazy Loading)
    • 지연 로딩은 애플리케이션에서 엔티티를 조회할 때, 필요한 데이터를 필요한 시점에 쿼리로 가져오는 방식

 

엔티티 상태

엔티티는 4가지 상태를 가짐

  • 분리(detached) 상태 : 
    • 영속성 컨텍스트에서 관리되지 않는 상태
    • detach() 메서드를 통해 해당 상태로 전환
  • 관리(managed) 상태
    • 영속성 컨텍스트에서 관리하는 상태
    • persist() 메서드를 통해 해당 상태로 전환
  • 비영속(transient) 상태 :
    • 영속성 컨텍스트와 전혀 관계 없는 상태
    • 엔티티 처음 생성시 상태
  • 삭제된(removed) 상태
    • 엔티티를 삭제하는 상태
    • remove() 메서드를 통해 영속성 컨텍스트와 DB에서 삭제 가능
@Autowired 
Ent1tyManage em; //엔티티 매니저

public void example() { 
    // 비영속 상태
    Member member = new Member(1L, "홍길동"); 
    
    // 엔티티가 관리되는 상태
    em.persist(member); 
    
    // 엔티티가 분리된 상태
    em.detach(member); 
    
    // 엔E|티 객체가 삭제된 상태
    em.remove(member); 
}

 

 

Spring Data

  • 배경 : 단순 JPA는 엔티티 상태를 직접 관리하고, 필요한 시점에 커밋을 해야하는 등의 개발자가 신경 써야 할 부분이 많음 -> DB 엑세스 코드를 최소화하고 개발자가 비즈니스 로직에 더 많은 시간을 할애하게 도와주자!
  • 정의 : DB 관리를 단순화하는 라이브러리 및 프레임워크 모음
  • 종류 : 
    • Spring Data JPA , Spring Data MongoDB, Spring Data JDBC, Spring Data Redis...

 

Spring Data JPA

  • 정의 : JPA를 더 편리하게 사용하기위해 만들어놓은 모듈
  • 사용법 : JpaRepository 인터페이스를 상속 받는 리포지터리 인터페이스를 만들어 사용
    • 제네릭에는 관리할 <엔티티_이름, PK_타입>을 입력
  • p.s) JpaRepository는 PagingAndSortingRepository(스프링 데이터 인터페이스)를 상속 받는다.

'Spring > 기본 구성' 카테고리의 다른 글

8. Repository 클래스 with. JDBC, JPQL(JPA), QueryDSL  (0) 2024.01.18
7. Entity 클래스  (0) 2024.01.18
5. Service 클래스  (0) 2024.01.18
4. Controller 클래스 with. DTO  (0) 2024.01.18
3. Spring Boot 구조  (0) 2024.01.18