[JPA] JPA 란?
복습
https://shins99.tistory.com/105
[Spring Boot] DB 에서 데이터 조회하기
복습 https://shins99.tistory.com/104 [Spring Boot] DTO, DAO, Vo 복습 https://shins99.tistory.com/102 [Spring Boot] 스프링 부트에서 자주 사용하는 어노테이션 복습 https://shins99.tistory.com/97 [Spring Boot] 스프링 부트 시작하
shins99.tistory.com
ORM (Object-Relational Mapping)
- 객체와 관계형 데이터베이스를 매핑함
- ORM 프레임워크는 객체와 테이블을 매핑함
ORM 프레임워크 사용 장점
- 객체를 데이터베이스에 저장할때 INSERT SQL을 직접 작성 하지 않음
(객체를 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장)
- 개발자가 데이터 중심인 관계형 데이터베이스를 사용하더라도 객체지향 어플리케이션 개발에 집중 가능
하이버네이트 (hibernate)
- 대부분의 패러다임 불일치 문제를 해결해주는 ORM 프레임워크
- 하이버네이트(hibernate.org)라는 오픈소스 ORM 프레임워크가 등장하면서 하이버네이트를 기반으로 새로운 자바 ORM 기술 표준이 만들어졌는데, 이것이 바로 JPA
패러다임 불일치란?
- 추상화, 상속, 다형성과 같은 특성을 가진 객체지향과 이러한 특성이 없는 데이터베이스는 서로 기능과 표현방법이 모두 다름 이것이 객체와 관계형 데이터베이스의 패러다임 불일치 문제
JPA (Java Persistence API)
- 자바 진영의 ORM 기술 표준
(JPA를 사용하려면 JPA를 구현한 ORM 프레임워크를 선택해야하는데, 가장 대중적인건 하이버네이트)
JPA 역할
- Entity 분석
- INSERT SQL 생성
- JDBD API 사용
- 패러다임 불일치 해결
JPA 장점
- 특정 구현 기술에 대한 의존도를 줄임
- 다른 구현 기술로 손쉽게 이동 가능
왜 JPA를 사용해야할까?
1) 생산성
- 자바 컬렉션에 객체를 저장하듯이 JPA에게 저장할 객체만 전달하면 JPA가 대신 처리함
jpa.persist(member); // 저장
Member member = jpa.find(memberId); // 조회
- 반복적인 코드와 CRUD용 SQL을 개발자가 직접 작성하지 않아도 됨
- CREATE TABLE과 같은 DDL 문을 자동 생성 가능
2) 유지보수
- SQL을 직접 다루면 엔티티에 필드를 하나만 추가해도 그에 해당하는 SQL과 결과를 매핑하기위한 JDBC API 코드를 모두 변경해야 하지만 JPA를 사용하면 이런 과정을 JPA가 대신 처리 함
- JPA가 패러다임의 불일치 문제를 해결해주므로 객체지향 언어가 가진 장점들을 활용해서 유연하고 유지보수하기 좋은 도메인 모델을 편리하게 설계 가능
3) 성능
- JPA는 애플리케이션과 데이터베이스 사이에서 동작하므로 최적화 관점에서 시도해볼 수 있는 것들이 많음
같은 회원을 두번 조회하는 코드
String memberId = "test"
Member member1 = jpa.find(memberId); // 조회
Member member2 = jpa.find(memberId); // 조회
- JPA를 사용하지 않았을땐 두번의 SELECT 쿼리가 수행됨
- JPA를 사용시 SELECT 쿼리가 한번만 수행되고, 그 다음은 이미 조회한 회원 객체를 재사용
4) 데이터 접근 추상화와 벤더 독립성
- JPA는 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해서 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 함
- 데이터 베이스 변경도 유연하게 처리가 가능하다. JPA에게 다른 데이터베이스를 사용한다고 알려주기만 하면 됨