JPA

1 minute read

SQL 중심 개발의 문제점

패러다임의 불일치 (객체 VS Relational DataBase)

객체와 RDB의 차이

  1. 상속

  • Album 저장
    객체 분해
    INSERT INTO ITEM…
    INSERT INTO ALBUM…

  • Album 조회
    Album, Item join
    각 객체 생성…

  1. 연관관계
  • 객체는 참조를 사용 : member.getTeam();
  • 테이블은 외래 키를 사용 : JOIN ON M.Team_ID = T.TEAM_ID
  1. 데이터 타입
  • 처음 실행하는 SQL 의 join 범위에 따라 탐색 범위 결정됨.
  • 모든 객체를 미리 로딩할 수는 없음.
  • 계층 분할이 어렵다
  1. 데이터 식별 방법

ORM

  • Object-relational mapping(객체 관계 매핑)
  • 객체는 객체대로 설계
  • 관계형 데이터베이스는 관계형 데이터베이스대로 설계
  • ORM 프레임워크가 중간에서 매핑


JPA

  • 객체 중심으로 개발
  • 생산성 up!
  • 패러다임의 불일치 해결
  • 데이터 접근 추상화 벤더 독립성

JPA 성능 최적화 기능

  1. 1차 캐시와 동일성 보장
  • 같은 트랜잭션 안에서는 같은 엔티티 반환
  String memberId="100";

  Member m1=jpa.find(Member.class,memberId); //SQL
  Member m2=jpa.find(Member.class,memberId); //캐시
  println(m1===m2) //true
  • DB Isolation Level이 ReadCommit 이여도 애플리케이션에서는 Repeatable Read 보장
  1. 트랜잭션을 지원하는 쓰기 지연
    • 트랜잭션을 커밋할 때까지 INSERT SQL을 모음
    • JDBC BATCH SQL 기능을 사용해서 트랜잭션 커밋하는 순간 한번에 SQL 전송
  2. 지연로딩
    • 지연로딩 : 객체가 실제 사용될때 로딩
    • 즉시로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회

JPA 방언


  • JPA는 특정 데이터 베이스에 종속적이지 않다.
  • JPA에서는 이를 Dialect라는 추상화된 방언 클래스를 제공하고 각 벤더에 맞는 구현체를 제공한다. ```xml

```

JPA 구동 방식

  1. EntityManagerFactory는 하나만 생성해서 어플리케이션 전체에서 공유(singleton)
  2. EntityManager는 스레드간에 공유 X
  3. JPA의 모든 데이터 변경은 트랜잭션 안에서 실행

Categories:

Updated: