JPA

·2022년 2월 26일
0

JDBC

Java Database Connectivity
자바와 데이터베이스를 연결해주는 통로!

  • 자바 프로그램내에서 SQL문을 실행하기 위한 자바 API 이다.

  • JDBC드라이버 설치를 해줘야 한다.
    maven에서는 의존성을 추가하는 걸로 대신할 수 있다.

RDB

Relational DateBase
관계형 데이터베이스

  • 행과 열로 구성된 테이블이 다른 테이블과 관계를 맺고 있는 집합체를 의미한다.

  • 관계 1:1 , 1:N, N:N 의 형태로 테이블 간의 연결이 가능하다.

JPA

JPA를 배우기 전..

SQL 중심적인 개발

: 대부분 객체지향 언어를 사용하고 관계형 DB를 사용하기 때문에 객체를 데이터베이스에 저장하려면 SQL 중심적인 개발을 하게된다.

SQL에 맞춰서 데이터를 전송만 하는 방식으로 사용한다.

이것의 문제점은 지루한 코드, 패러다임의 불일치(객체 vs 관계형 데이터베이스)

객체를 자바 컬렉션에 저장하고 불러오듯이 관계형 데이터베이스에 저장하고 불러올 수는 없을까?
.
.
.
.
JPA를 통해서 SQL을 작성할 필요없이 마치 자바 컬렉션을 작성하듯 객체 불러오기가 가능해졌다.

JPA를 실무에서 사용하기 어려운데 그 이유는..

  • 객체와 테이블을 올바르게 매핑해야 한다.

  • 내부 동작 방식을 이해해야 한다.
    (JPA가 어떤 SQL을 만들어 내는지..)

ORM : object relational mapping

객체 - 관계 매핑
객체는 객체대로, 관계형DB는 관계형DB대로 설계하여 ORM 프레임워크가 중간에서 매핑한다.
대중적인 언어에는 대부분 이 기술이 존재한다.

Java Persistence API

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

애플리케이션과 JDBC 사이에 존재한다.

JPA. 왜 사용해야 하는가.

  • 생산성 측면.(코드가 다 만들어져있음)
    저장 : jpa.persist(member)
    조회 : Member member = jpa.find(memberId)
    수정 : member.serName(“변경할 이름”)
    삭제 : jpa.remove(member)

  • 유지보수
    기존엔 필드 변경시 모든 SQL문을 수정해야 했었다.
    예를 들어 Member 에 tel을 추가한다면...
    그런데 JPA는 "private String tel;" 끝.

  • 패러다임의 불일치 해결
    JPA가 알아서 join해서 해준다. (상속)
    지연로딩 기능 덕분에 신뢰성이 있다. (연관 관계, 객체 그래프 탐색)
    동일한 트랜잭션에서 조회한 엔티티는 같음을 보장한다.

  • JPA의 성능 최적화 기능
  1. 1차 캐시와 동일성 보장
    (같은 트랜잭션에서는 같은 앤티티 반환하기 때문의 약간의 조회 성능 향상)
  2. 트랜잭션을 지원하는 쓰기 지연(트랜잭션을 커밋할때까지 INSERT SQL을 모아서 한번에 전송한다.)
  3. 지연 로딩(객체가 실제로 사용될때 로딩한다.)

.
.
.
추가로..

트랜잭션이란 여러 단위 작업들을 의미있는 그룹으로 묶어서 일괄 커밋, 롤백하는 매커니즘을 의미한다.

엔티티(entity)란 테이블에 대응하는 하나의 클래스라고 생각할 수 있다.

.
.
.

https://www.inflearn.com/course/ORM-JPA-Basic

0개의 댓글