카테고리 없음

gdg on campus ewha - Spring WIL 7주차

wosrn 2024. 12. 20. 11:29

7주차 : JPA 및 Hibernate를 사용한 ORM 통합

 

1. ORM (Object-Relational Mapping) 이란?

ORM : 객체 지향 프로그래밍에서, 객체와 관계형 데이터베이스의 테이블 간 데이터를 자동으로 매핑하는 기술

필요성

  • 생산성 향상: 반복적이고 번거로운 SQL 작성 작업 없이 객체 지향 방식으로 데이터베이스 작업 수행 가능.
  • 유지보수 용이: 데이터베이스 변경 시 객체-테이블 매핑만 수정하면 되므로 코드 수정 범위가 작아짐.
  • 패러다임 불일치 해결: 객체 지향 언어와 관계형 데이터베이스 간의 불일치 문제를 효과적으로 해결.

 

 

2. JPA란?

자바 표준 ORM 명세로, 애플리케이션과 데이터베이스 간 데이터 처리 로직을 추상화

JPA는 데이터베이스 작업을 객체 중심적으로 설계하도록 지원하며, 기존의 SQL 중심적인 개발 패러다임을 객체 중심적인 패러다임으로 전환

  • 자바의 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음

 

 

 

*  SQL 중심적인 개발 -> 객체 중심적인 개발

  • 생산성 증가 : 반복적인 SQL 작성에서 벗어나 객체 중심으로 개발
  • 유지보수 수월 : 데이터베이스 변경에 따른 영향 최소화
  • Object와 RDB간의 패러다임 불일치 해결 : 객체와 관계형 데이터베이스 간의 구조적 차이를 매핑으로 해결

3. Hibernate란? 

: 자바 진영의 다양한 ORM 프레임워크 중 가장 많이 사용되는 프레임워크

: JPA(Java Persistence API) 표준의 구현체 중 하나로, JPA의 명세를 따르면서도 자체적인 추가 기능을 제공

  • ORM 기능 : 객체와 관계형 데이터베이스 간의 매핑
  • JDBC 추상화 : 데이터베이스 연결과 명령 처리를 간소화.
  • JPQL(Java Persistence Query Language), 네이티브 SQL, Querydsl다양한 쿼리 언어 지원
  • 캐싱 기능 : 1차 및 2차 캐싱으로 성능 최적화
  • 데이터베이스 독립성

위 사진과 같이, Hibernate는 SessionFactory를 사용해서 session을 만들어 DB와 커뮤니케이션한다

 

<Hibernate 사용 방법>

1) 엔티티 클래스 작성

 

2)  entity manager 작성

 

3) crud 작업 수행

 

 

 

4. 2차 캐싱 : 영속성 컨텍스트의 1차 캐싱을 넘어, 애플리케이션 전체에서 데이터를 캐싱하여 성능 최적화하는 방식

1차 캐싱(영속성 컨텍스트 내 캐싱)이 개별 세션에 국한된 반면, 2차 캐싱은 애플리케이션 전역에서 공유됨

 

 

 

효과

  • 쿼리 부하 감소: 동일한 데이터를 반복 조회할 때 데이터베이스 요청을 최소화.
  • 성능 최적화: 캐싱된 데이터를 활용하여 처리 속도 향상.

 

 

5. 지연 로딩 (<-> 즉시 로딩) : 필요한 시점에 데이터를 로딩하는 방식

cf) 즉시로딩 : 처음부터 모든 연관데이터를 로딩하는 방식

 

동작 원리

  • 엔티티를 조회할 때, 연관된 데이터를 프록시(Proxy) 객체로 대신 설정
  • 연관된 데이터에 접근하면 Hibernate가 데이터베이스에서 필요한 데이터를 실시간으로 조회

 

 

6. Batch Fetching 전략 : JPA에서 지연 로딩(Lazy Loading)으로 인해 발생하는 N+1 문제를 해결하기 위한 전략

     * N+1 문제: 하나의 엔티티를 조회한 후 연관된 데이터를 개별적으로 가져오면서 N번의 추가 쿼리가 발생하는 문제

예) 예: 부모 엔티티 1개를 조회한 후 자식 엔티티를 10개 조회하면, 총 1 + 10 = 11개의 쿼리가 발생

 

동작 원리

- 연관된 데이터를 개별적으로 조회하는 지연로딩과 달리,

- 연관된 데이터의 ID를 모아서 한 번에 조회하여 쿼리 호출 횟수를 줄인다