JPA란?
자바 ORM 기술에 대한 표준 명세로, JAVA에서 제공하는 API
자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.
SQL을 매핑하지 않고 자바 클래스와 DB테이블을 매핑한다.
ORM이란?
Object Relation Mapping의 약자로 객체를 통해 간접적으로 DB를 다루고 객체와 데이터를 자동으로 매핑한다.
Query가 아닌 메서드로 데이터를 생성하고 조작할 수 있다.
JPA 동작 과정
JPA는 애플리케이션과 JDBC 사이에서 동작한다.
개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.
즉, 개발자가 직접 JDBC API를 쓰는 것이 아니다.
JPA 특징
- 데이터를 객체지향적으로 관리할 수 있기 때문에 개발자는 비즈니스 로직에 집중할 수 있고 객체지향 개발이 가능하다.
- 자바 객체와 DB 테이블 사이의 매핑 설정을 통해 SQL을 생성한다.
- 객체를 통해 쿼리를 작성할 수 있는 JPQL(Java Persistence Query Language)를 지원
- JPA는 성능 향상을 위해 지연 로딩이나 즉시 로딩과 같은 몇가지 기법을 제공하는데 이것을 잘 활용하면 SQL을 직접 사용하는 것과 유사한 성능을 얻을 수 있다.
JPA의 장점
- sql 중심적인 개발에서 객체 중심적인 개발이 가능하다.
Object -> [SQL 변환] -> RDB에 저장[개발자 == SQL 매퍼] 라고 할만큼 SQL 작업을 너무 많이 하고 있다.
sql 코드의 반복, 객체지향과 관계지향 데이터베이스의 페러다임 불일치 - 생산성이 증가
간단한 메소드로 CRUD가 가능하다 - 유지보수가 쉽다.
기존: 필드 변경 시 모든 SQL을 수정해야 한다.
JPA: 필드만 추가하면 되고, SQL은 JPA가 처리하기 때문에 손댈 것이 없다. - Object와 RDB 간의 패러다임 불일치 해결
JPA Hibernate
Hibernate는 JPA 구현체의 한 종류이다.
JPA는 DB와 자바 객체를 매핑하기 위한 인터페이스(API)를 제공하고 JPA 구현체(하이버네이트)는 이 인터페이스를 구현한 것이다.
하이버네이트 외에도 EclipseLink, DataNucleus, OpenJPA, TopLink Essentials 등이 있다.
Hibernate가 SQL을 직접 사용하지 않는다고 해서 JDBC API를 사용하지 않는다는 것은 아니다.
Hibernate가 지원하는 메서드 내부에서는 JDBC API가 동작하고 있으며, 단지 개발자가 직접 SQL을 직접 작성하지 않을 뿐이다.
HQL(Hibernate Query Language)이라 불리는 매우 강력한 쿼리 언어를 포함하고 있다.
- HQL은 SQL과 매우 비슷하며 추가적인 컨벤션을 정의할 수도 있다.
- HQL은 완전히 객체 지향적이며 이로써 상속, 다형성, 관계등의 객체지향의 강점을 누릴 수 있다.
- HQL은 쿼리 결과로 객체를 반환하며 프로그래머에 의해 생성되고 직접적으로 접근할 수 있다.
- HQL은 SQL에서는 지원하지 않는 페이지네이션이나 동적 프로파일링과 같은 향상된 기능을 제공한다.
- HQL은 여러 테이블을 작업할 때 명시적인 join을 요구하지 않는다.
spring-data-jpa란?
JPA은 ORM을 위한 자바 EE 표준이며 Spring-Data-JPA는 JPA를 쉽게 사용하기 위해 스프링에서 제공하고 있는 프레임워크이다.
Hibernate를 쓰는 것과 Spring Data JPA를 쓰는 것 사이에는 큰 차이가 없지만
- 구현체 교체의 용이성
- 저장소 교체의 용이성
이라는 이유에서 Spring Data JPA를 사용하는것이 더 좋다.
해당 글 내용은 adam2님의 블로그에서 참고하였습니다.
'JPA' 카테고리의 다른 글
연관관계 설정 시 주의사항 (0) | 2021.12.30 |
---|---|
엔티티 연관 관계 매핑 어노테이션 정리 (0) | 2021.12.30 |
하이버네이트(Hidernate) 설명 및 설정법 (0) | 2021.12.28 |
엔티티 매핑 어노테이션 정리 (0) | 2021.12.28 |
엔티티 매니저와 엔티티의 영속성 관리 (0) | 2021.12.28 |