JPA 학습정리 - JPA란?

DragonTiger·2021년 12월 23일
0

JPA

Java Persistence API
자바 진영의 ORM 기술 표준

ORM

  • Object-relational mapping(객체 관계 매핑)
  • 객체는 객체대로 설계
  • 관계형 데이터베이스는 관계형 데이터베이스대로 설계
  • ORM 프레임워크가 중간에서 매핑
  • 대중적인 언어에는 대부분 ORM 기술이 존재

JPA는 어떻게 동작할까?



그렇다면 왜 JPA를 써야할까?

1. SQL 중심적인 개발에서 객체 중심으로 개발

2. 생산성

아래의 코드만 짜놓으면 알아서 JPA가 데이터베이스에 쿼리를 날림

3. 유지보수

JPA는 엔티티(Entity) 또는 도메인 객체(Domain Object)의 필드만 아래처럼 변경시키면 SQL 쿼리는 JPA가 알아서 날려줌 기존의 SQL쿼리코드를 일일이 변경해주지않아도 된다.

4. 패러다임의 불일치 해결

자바에서의 객체지향 개념(추상화, 캡슐화, 정보은닉, 상속, 다형성)과 같이 시스템의 복잡성을 제어할 수 있는 방법은 데이터베이스같이 데이터중심으로 구조화되어있는 시스템과 다르다. 객체의 상속, 다형성 같은 개념이없다. 그렇다보니 객체와 데이터베이스가 지향하는 점이 다르다. 이것을 객체와 데이터베이스의 패러다임 불일치라고 한다. 자세한 설명 이펙티브 백엔드 참고

5. 성능

  • 다양한 성능 최적화 기회 제공
  • 어플리케이션과 데이터베이스 사이에 존재하여서 여러 최적화 시도 가능
  • JDBC API를 사용해서 회원을 조회하면 할 때 마다 SELECT SQL을 사용해서 DB와 두 번 통신해야 하는 반면,
    JPA를 사용하면 회원 조회 SELECT SQL을 한 번만 데이터베이스에 전달하고 두 번째는 조회한 회원 객체를 재사용한다.

같은 트랜잭션 안에서 같은 회원을 두 번 조회하는 경우를 생각해보자. JDBC API는 조회를 할 때마다 데이터베이스와 통신을 했을 것이다. 반면, JPA는 하나의 트랜젝션에서 첫번째 조회한 내용을 두번째에서 재사용한다.

String memberId = "100";
Member member1 = jpa.find(Member.class, memberId);
Member member2 = jpa.find(Member.class, memberId);
member1 == member2; //같다.

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

  • 데이터베이스 기술에 종속되지 않도록 한다.
  • 데이터베이스를 변경하면 JPA에게 다른 데이터베이스를 사용한다고 알려주면 됨.

참고
이펙티브 백엔드
자바 ORM 표준 JPA 프로그래밍 - 기본편

profile
take the bull by the horns

0개의 댓글