[JPA] JPA 소개

JUJU·2024년 6월 29일
0

Spring Boot

목록 보기
8/13
본 포스트는 김영한 개발자님의 JPA 프로그래밍 강의를 듣고 정리한 것입니다.
※ 코드는 강의에서 사용된 것과 다릅니다.
jaewon-ju Github Address

✏️ JPA

객체를 관계형 데이터베이스에 저장할 때 발생하는 여러가지 문제점들이 존재한다.

문제점(차이점)설명
상속객체에는 상속이 존재하지만, RDB에는 존재하지 않는다.
연관관계객체는 참조를 사용하지만, RDB는 FK를 사용한다.
데이터 타입객체와 RDB에 존재하는 데이터 타입이 다르다.
데이터 식별 방법객체 - 주소를 통한 식별, RDB - PK를 통한 식별

위와 같은 문제를 해결하기 위해선 ORM 기술이 필요하다.

ORM (Object-Relational Mapping)

: 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해 주는 기술

JPA (Java Persistence API)

: 자바 진영의 ORM 기술 표준

  • JPA는 인터페이스이다.
  • JPA의 구현체로는 Hibernate, EclipseLink 등이 존재한다.

■ JPA 동작 방식

애플리케이션과 JDBC 사이에서 동작, SQL을 객체로 자동 변환


■ JPA의 이점

  1. 1차 캐시와 동일성 보장
    : 같은 트랜잭션 안에서는 같은 엔티티를 반환한다!

  2. 트랜잭션을 지원하는 쓰기 지연 기능
    : 트랜잭션을 커밋할 때까지 쿼리를 모은 다음, 한꺼번에 전송한다.

  3. 지연 로딩과 즉시 로딩 옵션

    • 지연 로딩: 객체가 실제 사용될 때 로딩
    • 즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회
  4. JPA는 특정 데이터베이스에 종속되지 않는다.
    : 각 데이터베이스의 방언에 맞게 SQL을 생성한다.




✏️ JPA의 구동 방식

구동 방식을 이해하기 전에, 3가지 요소를 알아야 한다.


1. Persistence.xml

DB 설정에 필요한 정보를 기술해둔 파일
JPA는 이 파일을 바탕으로 DB의 정보를 가져온다.

  • Persistence.xml 파일에는 '옵션' 속성들이 존재한다.
  • 옵션에 존재하는 ddl.auto 속성은 다음 5가지 값을 가질 수 있다.
    • create: 기존 테이블 삭제 후 재생성
    • create-drop: create와 동일하나, 종료시 테이블 drop
    • update: 변경된 부분만 수정
    • validate: entity ⇔ table이 정상적으로 매핑되었는지만 확인
    • none: 사용 X

⚠️ create, create-drop, update는 운영 서버에서는 사용하면 안된다!!!!


2. EntityManager

엔티티의 CRUD를 담당하는 인터페이스
엔티티와 관련된 모든 서비스를 담당한다.

  • EntityManager의 작업은 트랜잭션 단위로 처리해야 한다.
  • EntityManager는 쓰레드간에 공유되지 않는다.

3. EntityMangerFactory

EntityManager를 생성하는 공장 역할 수행

  • EntityManagerFactory는 Persistence.xml 파일의 정보를 토대로 생성한다.
  • EntityManagerFactory는 DB당 하나씩만 생성한다.

이제, JPA의 구동 방식에 대해서 알아보자.

  1. Persistence.xml 설정정보로 EntityManagerFactory 생성
  2. EntityManagerFactory는 필요할 때마다 EntityManager 생성
  3. EntityManager를 통해서 DB에 접근



✏️ JPQL

JPQL (Java Persistence Query Language)

: 엔티티 객체를 조회하는 객체 지향 쿼리

⚠️ JPQL은 테이블을 대상으로 쿼리를 하지 않고, 객체를 대상으로 쿼리를 한다.


  • JPQL은 SQL을 추상화한 객체 지향 쿼리 언어이다.
  • 특정 DB에 종속되지 않는다.

JPQL에 대해서는 이후에 더 자세히 설명하겠다.




REFERENCE

자바 ORM 표준 JPA 프로그래밍 - 김영한 개발자님

profile
개발자 지망생

0개의 댓글

관련 채용 정보