JPA란?

개발자·2021년 12월 22일
0

JPA

목록 보기
1/10
post-thumbnail

SQL 중심적 개발의 문제점

  • 무한 반복
  • 지루한 코드

객체와 관계형 데이터베이스의 차이

1. 상속

  • 객체 : 상속관계
  • 테이블 : 슈퍼타입-서브타입 관계

2. 연관관계

  • 객체 : 참조를 사용
  • 테이블 : 외래키 사용

3. 데이터 타입

4. 데이터 식별 방법



☆JPA☆

  • 인터페이스의 모음
  • JPA 2.1 표준 명세를 구현한 3가지 구현체
  • 구현체 : 하이버네이트, EclipseLink, DataNucleus

사용 이유

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

2. 생산성

쿼리를 직접 작성할 필요가 없음.

  • 저장 : jpa.persist(member);
  • 조회 : Member member = jpa.find(memberId);
  • 수정 : member.setName("변경이름");
  • 삭제 : jpa.remove(member);

3. 유지보수

필드만 추가하면 유지보수 가능

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

  • 상속
Album album = jpa.find(Album.class, albumId); // JPA가 JOIN 실행
  • 연관관계
member.setTeam(team);
jpa.persist(member);
  • 객체 그래프 탐색
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();
  • 신뢰할 수 있는 엔티티, 계층
member.getTeam(); // 자유로운 객체 그래프 탐색
  • JPA와 비교
    동일 트랜잭션에서 조회한 엔티티는 같음을 보장
// member1과 member2는 같음
Member member1 =jpa.find(Member.class, memberId);
Member member2 =jpa.find(Member.class, memberId);

5. 성능 최적화

1차 캐시와 동일성 보장

  • 같은 트랜잭션 안에서 같은 엔티티 반환 - 약간의 조회 성능 향상
    (SQL 1번만 실행)

트랜잭션을 지원하는 쓰기 지연 - INSERT

  • 트랜잭션을 커밋할 때 까지 INSERT SQL 모음
  • JDBC BATCH SQL 기능을 사용해 한번에 SQL 전송

지연 로딩과 즉시 로딩

  • 지연 로딩 : 객체가 실제 사용될 때 로딩
  • 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회

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

7. 표준


ORM

객체와 RDB 두 기둥위에 있는 기술
객체와 RDB의 데이터를 자동으로 매핑해줌


Ref.

[인프런] 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한)

profile
log.info("공부 기록 블로9")

0개의 댓글