Backend/JPA

[자바 ORM 표준 JPA 프로그래밍] 1장. JPA 소개

anxi 2024. 1. 27. 18:29

JDBC

JDBC API와 SQL

 

- JDBC를 사용하여 DB에 접근할 경우, JDBC API를 사용해서 SQL을 DB에 전달한다.

 

1. SQL을 직접 다룰 경우 생기는 문제점

- SQL을 직접 다룰 경우, CRUD용 SQL을 반복해서 작성해야하는 비생산적인 과정을 수행해야한다.

- SQL에 의존적인 개발을 하게 된다. (테이블에 컬럼을 추가시 연관된 SQL을 모두 수정해야한다.)

 

2. 객체지향 DB의 패러다임 불일치

- 상속 : 객체는 상속 기능 O VS 테이블은 상속 기능 X

- 연관관계 : 객체는 참조를 통해 연관 객체 조회 VS 테이블은 외래키와 조인을 사용해서 조회

- 객체 그래프 탐색 : SQL을 직접 다룰 경우, SQL에 따라 객체 그래프를 어디까지 탐색할 수 있는지 정해진다. 

- 비교 : 동일성(==) 비교시 같은 멤버 id에서 꺼내오더라도 두 객체는 같지 않다.

 

=> 이를 JPA가 해결해준다. 

 

JPA

JPA

  • 자바 진영의 ORM(Object-Relational-Mapping) 기술 표준
  • 자바 ORM 기술에 대한 API 표준 명세
  • 애플리케이션과 JDBC 사이에서 동작

ORM

  • 객체와 관계형 데이터베이스를 매핑
  • 위에 기술한 객체와 테이블의 패러다임 불일치 문제를 개발자 대신 해결

=> 객체 측면에서는 정교한 객체 모델링을 할 수 있고, 관계형 DB에서는 데이터베이스에 맞도록 모델링 하면 된다. 

=> 둘을 어떻게 매핑해야하는지 매핑 방법만 ORM 프레임워크에 알려주면 된다.

 

JPA 사용 이유

  • 생산성
jpa.persist(member); // 저장
Member member = jpa.find(memberId) // 조회

 

- 지루하고 반복적인 코드와 CRUD용 SQL을 개발자가 직접 작성하지 않아도 된다.

 

  • 유지보수

- SQL을 직접 다룰 경우, 엔티티에 필드 하나만 추가해도 관련된 모든 JDBC API 코드를 모두 변경해야한다.

- JPA는 대신 처리해주므로 유지보수해야하는 코드 수가 줄어든다.

 

  • 패러다임의 불일치 해결

 

  • 성능
Long memberId = 1L;
Member member1 = jpa.find(memberId);
Member member2 = jpa.find(memberId);

 

- 같은 트랜잭션 안에서 같은 회원을 두 번 조회하는 코드에서 JDBC API를 사용하면 SELECT SQL을 두 번 사용한다.

=> JPA를 사용하면 회원 조회 SELECT SQL을 한번만 DB에 전달하고 두 번째는 조회한 회원 객체를 재사용한다.

 

  • 데이터 접근 추상화와 벤더 독립성

- 데이터베이스를 변경하면 JPA에게 다른 데이터베이스를 사용한다고 알려주기만 하면 된다.

ex) dev : MySQL, local : h2 일 경우, h2에서 JPA를 사용하다가 개발 환경에서 MySQL로 옮겨 사용할 수 있다.

 

  • 표준

- JPA는 자바 진영의 ORM 기술 표준이다. 

- 표준이기 때문에 다른 구현 기술로 손쉽게 변경할 수 있다.

 


출처 : 자바 ORM 표준 JPA 프로그래밍 책