JPA란 무엇인가?
약 2년전에 JPA 강의를 결제해놓고 제대로 못보다가 최근들어 JPA에 대해 다시 공부를 시작하였다.
더 깊게 공부하기 앞서 JPA의 개념에 대해 정리해보려 한다.
해당 글은 온라인강의 [김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편] 및 타 블로그 글을 참고하였습니다.
JPA(Java Persistence API)란 자바의 ORM을 위한 표준 기술로 Hibernate, Spring JPA, EclipseLink등과 같은 구현체가 있다. 이것의 표준 인터페이스가 JPA이다.
JPA에 앞서 ORM(Object Relational Mapping)에 대해 알아보자
ORM이란?
ORM(Object Relational Mapping)은 자바의 객체와 관계형데이터베이스를 매핑해주는 도구로 DB의 특정 테이블의 자바의 객체로 매핑되어 SQL을 일일이 작성하지 않고 객체로 구현할 수 있도록 해주는 프레임워크이다.
객체는 객체대로 설계하고, 관계형DB는 관계형DB대로 설계하고 ORM 프레임워크가 중간에서 매핑해준다.
이런 ORM 프레임워크는 객체와 테이블을 매핑해 패러다임의 불일치를 개발자 대신 해결해준다.
우리가 일반적으로 알고 있는 애플리케이션의 클래스(Class)와 RDB(Relational DataBase)의 테이블을 매핑한다는 뜻이며, 기술적으로는 애플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고 보면 된다.
JPA
Java Persistence API의 약자로 자바 진영의 ORM 기술 표준으로 인터페이스의 모음이다.
즉, 실제로 동작하는것이 아니며 JPA 인터페이스의 구현체는 Hibernate, EclipseLink, DataNucleus가 있다.
JPA 동작과정
JPA는 애플리케이션과 JDBC 사이에서 동작한다.
조회 과정 (Select)
Member 객체를 조회하고 싶을 때 member의 PK를 JPA에 넘긴다.
- JPA는 엔티티의 매핑 정보를 바탕으로 적절한 조회 SQL을 생성
- JDBC API를 사용해 SQL을 날림
- DB로 부터 결과 받아옴
- 결과(ResultSet)를 객체에 매핑
저장 과정 (Insert)
MemberDAO에서 객체를 저장하고 싶을 때 개발자는 JPA에 Member객체를 넘긴다.
- JPA는 Member엔티티를 분석
- Insert SQL 생성
- JDBC API를 사용해 SQL을 날림
JPA를 사용하는 이유
1. 생산성
JPA를 사용하면 자바 컬렉션을 다루듯 JPA에게 저장할 객체를 전달하면 된다. SQL문을 자동으로 생성해주어 데이터베이스 설계 중심을 객체 설계 중심으로 변경해 실제 핵심로직에 집중할 수 있게 도와준다.
2. 유지보수
DB가 변경되거나 테이블 필드가 추가되어야 할 때 관련된 모든 SQL을 수정해야하지만 JPA는 필드만 추가하여 이에 유연하게 대처할 수 있어 유지보수에 강점이 있다.
3. 패러다임의 불일치 해결
JPA는 연관된 객체를 사용하는 시점에 SQL을 전달할 수 있고, 같은 트랜잭션 내에서 조회할 때 동일성도 보장하기 때문에 다양한 패러다임의 불일치를 해결해준다.
4. 성능
애플리케이션과 데이터베이스 사이에서 성능 최적화 기회를 제공한다.
같은 트랜잭션 안에서 같은 엔티티를 반환하기 때문에 데이터베이스와의 통신 횟수를 줄일 수 있고 트랜잭션을 commit하기 전까지 메모리에 쌓고 한번에 SQL을 전송한다.
5. 데이터 접근 추상화와 벤더 독립성
RDB는 같은 기능이라도 벤더마다 사용법이 다르기 때문에 처음 선택한 데이터베이스에 종속되고 변경이 어렵다. JPA는 애플리케이션과 데이터베이스 사이에서 추상화된 데이터 접근을 제공하기 때문에 종속되지 않아 만약 DB가 변경되더라도 몇가지 설정만 해주면 간단하게 변경이 가능하다.
Hibernate
Hibernate는 JPA의 구현체이다. JPA의 핵심인 EntityManagerFactory, EntityManager, Entity Transaction 등을 상속받아 구현되었다.
Spring Data JPA
Spring Data JPA 는 JPA를 사용하기 편하도록 만들어놓은 모듈이다.
Spring Data JPA는 JPA를 한 단계 더 추상화 시킨 Repository 인터페이스를 제공한다.
이러한 Spring Data JPA는 Hibernate와 같은 JPA구현체를 통해 JPA를 사용하게 된다.
이는 사용자가 더욱 간단하게 데이터 접근이 가능해지도록 한다.
참고
https://gmlwjd9405.github.io/2019/08/04/what-is-jpa.html
'Programming > Spring' 카테고리의 다른 글
[Spring] @Configuration, @Bean의 동작 방식(싱글톤) (0) | 2023.05.23 |
---|---|
[Spring] IoC 컨테이너에 등록된 Bean 조회하기 (0) | 2023.05.15 |
DTO, VO, Entity - 개념 정리 및 차이점 (0) | 2023.03.15 |
[Spring] WebFlux란 무엇인가? - 개념(특징), MVC와 비교, 사용 이유 (0) | 2022.12.26 |
[Spring] MVC1, MVC2 개념 및 차이점 / Spring MVC 동작과정 (1) | 2022.07.17 |