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) : 엔티티 매니저를 만드는 곳
영속성 컨텍스트
정의/목적/주요기능
- JPA의 중요한 특징 중 하나, 엔티티를 관리하는 가상의 공간
- 목적 : 주로 데이터베이스 접근을 최소화하여 성능을 향상
- 주요 기능
- 1차 캐시
- 1차 캐시는 기본키(@id)(key)를 사용하여 엔티티(value)를 저장하는 메모리 공간
- 이점 : 1차 캐시에 저장된 데이터는DB를 거치지 않고 바로 조회 가능
- 쓰기 지연 (Transactional Write-Behind)
- 커밋(commit) 이전에 엔티티의 변경 내용을 DB에 반영하지 않고 대기시키는 기능
- 이점 : 쿼리를 묶어서 요청하여 DB 접근 최소화
- 변경 감지
- 트랜잭션을 커밋할 때, 1차 캐시에 저장된 엔티티와 비교하여 변경된 사항이 있으면 DB에 반영하는 기능
- 이점 : 변경 사항을 효율적으로 쿼리로 요청하여 DB 접근 최소화
- 지연 로딩 (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 |