왜 JPA?

cbbatte·2020년 5월 18일
0

Java

목록 보기
1/1
post-thumbnail

Java <> DB History

  • JDBC API
    • SQL Query hard coding
    • prepareStatement
    • ResultSet
    • close resources
  • SQL Mapper
    • JDBCTemplate
    • MyBatis
    • ...
      • SQL Query hard coding
      • pstmt, resultset, close.. 없어짐
  • JPA
    • SQL 사라짐!
    • 마치 Java Collection에 객체를 저장하고 가져오는 것 처럼 사용할 수 있다.

바로 실무?

  • 아래와 같은 내용을 모르면 어렵다.
    1. 객체와 테이블을 올바르게 설계하고 매핑하는 방법
    2. 기본 키와 외래 키 매핑
    3. 1:N, N:1, 1:1, N:M 매핑
    4. JPA 내부 동작 방식에 대한 이해
      1. 어떤 SQL을 만들어 내는지
      2. 언제 SQL을 실행하는지
  • 확실하게 알고 쓰자!

JPA와 Modern Java Data 저장 기술

SQL 중심적인 개발의 문제점

객체지향 언어에서 RDB를 사용하기란..

  • SQL 의존적인 개발을 피하기가 어렵다
  • 패러다임의 불일치
    • 객체 vs 관계형
      • 어떤차이?
        • 상속
          • insert를 모델링한 갯수대로
          • select join을 모델링한 갯수대로
        • 연관관계
          • 객체는 단방향 (참조)
          • 테이블은 양방향 (외래키)
        • 데이터 타입
        • 데이터 식별 방법
  • 객체를 자바 컬렉션에 저장 하듯이 DB에 저장할 수 없을까?
    • JPA - Java Persistence API

JPA 소개

  • Java 진영의 ORM 기술 표준

ORM?

  • Object-relational mapping
  • ORM F/W가 객체와 관계 중간에서 매핑해주겠다.

JPA 동작 구조

  • JDBC Wrapping

  • 객체와 관계의 패러다임 불일치를 해결!

JPA History

  1. EJB - 엔티티 빈 (자바 표준)
    1. 옛날 ORM
    2. 너무 기능적으로 안좋다.
  2. 하이버네이트 (오픈소스)
  3. JPA (자바 표준)
    1. 하이버네이트를 거의 clone

JPA는 표준 명세

  • JPA는 인터페이스의 모음
  • 3가지 구현체가 있지만 하이버네이트를 주로 쓴다

JPA를 왜 써야하나?

생산성

  • CRUD를 마치 Java Collection을 쓰듯이!

유지보수

  • 멤버추가에 따른 변경요소가 없음!

패러다임의 불일치 해결

  • 상속
  • 연관관계, 객체 그래프 탐색
  • 신뢰할 수 있는 엔티티
    • lazy loading
  • 비교
    • 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장

JPA 성능 최적화 기능

  • 1차 캐시와 동일성(identity) 보장
    • 같은 트랜잭션 안에서는 같은 엔티티를 반환
      • 조회 성능의 향상
    • DB Isolation level이 read commit이어도 애플리케이션에서 repeatable read 보장
      • db isolation level을 한단계 낮춰도 되네?
  • 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
    • JDBC Batch SQL 대신 옵션 하나 켜서 해결
  • lazy loading
    • 실제 사용될 때 로딩
  • 즉시 로딩
    • join sql로 한번에 미리 조회
    • 최적화 필요할때 보자
profile
개발을 좋아하며 아티스트를 꿈꾸는 오리너구리

0개의 댓글