이번 글에서는 JPA(Java Persistence API)가 무엇인지 알아보려고한다.
JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.
그 말은 즉, 실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다.
JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.
JPA 란?
-Java Persistence API
-자바 진영의 ORM 기술 표준
ORM
-Object-Relational Mapping (객체관계 매핑)
-객체는 객체대로 설계
-관계형 데이터베이스는 관계형 데이터베이스대로 설계
-ORM 프레임워크가 중간에서 매핑
-대중적인 언어에는 대부분 ORM 기술이 존재
Object 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형데이터베이스대로 설계를하고
ORM 프레임워크가 중간에서 매핑을 해주겠다는 뜻이다. 대부분의 언어에는 ORM 기술이 존재한다.
특징
-SQL문이 아닌 Method를 통해 DB를 조작하여, 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는데 집중할 수 있음.(내부적으로 쿼리를 생성하여 DB를 조작한다.)
-Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높임.
-객체지향의 코드 작성이 가능하다.
-매핑하는 정보가 Class로 명시 되었기 때문에 ERD를 보는 의존도를 낮출 수 있고 유지보수 및 리팩토링에 유리하다.
-기존에 MySQL 데이터베이스를 사용하다가 ORACLE로 변환한다고 가정하면 새로 쿼리를 짜야하는 경우가 생김. 이런 경우에 ORM을 사용한다면 쿼리를 수정할 필요가 없음.
JPA (Java Persistence API)
현재 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음이다.
즉, 실제로 동작하는 것이 아니다.
JPA 인터페이스를 구현한 대표적인 오픈소스가 Hibernate라고 할 수 있다.
JPA 2.1 표준 명세를 구현한 3가지 구현체: Hibernate, EclipseLink, DataNucleus
![[Spring JPA] JPA란? [Spring JPA] JPA란?](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
버전
JPA 1.0(JSR 220) 2006년 : 초기 버전. 복합 키와 연관관계 기능이 부족
JPA 2.0(JSR 317) 2009년 : 대부분의 ORM 기능을 포함, JPA Criteria 추가
JPA 2.1(JSR 338) 2013년 : 스토어드 프로시저 접근, 컨버터(Converter), 엔티티 그래프 기능이 추가
JPA의 동작 과정
![[Spring JPA] JPA란? [Spring JPA] JPA란?](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
● JPA는 애플리케이션과 JDBC 사이에서 동작한다.
-개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.
저장 과정
![[Spring JPA] JPA란? [Spring JPA] JPA란?](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
● MemberDAO에서 객체를 저장하고 싶을때.
-개발자는 JPA에 MemberDAO에서 member 객체를 넘긴다.
-JPA가 member객체를 분석하고 적절한 INSERT SQL을 생성한다.
-JDBC API를 사용하여 SQL을 DB에 날린다.
조회 과정
![[Spring JPA] JPA란? [Spring JPA] JPA란?](https://blog.kakaocdn.net/dn/eFFV5k/btrBu5SSw2G/cYWnSqQ7JrA8gNBnMl6mT1/img.png)
● Member 객체를 조회 하고 싶을때.
-member의 pk값을 JPA에 넘긴다.
-JPA는 엔티티 매핑 정보를 바탕으로 적절한 select sql을 생성한다.
-JDBC API를 사용하여 SQL을 DB에 날린다.
-DB로부터 결과를 받는다.
-결과(Resultset)를 객체에 모두 매핑한다.
쿼리를 JPA가 만들어 주기 때문에 Object와 RDB간의 패러다임 불일치를 해결할 수있다.
'JPA' 카테고리의 다른 글
[JPA] 단방향 연관관계 (0) | 2022.05.09 |
---|---|
[JPA]기본 키 매핑 (0) | 2022.05.08 |
[JPA] 기본 @Anotation 정리 (0) | 2022.05.08 |
[JPA] 데이터베이스 스키마 자동 생성 (0) | 2022.05.08 |
[JPA] Maven JPA 설정 (0) | 2022.05.08 |
댓글