ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JPA 기본편] 1. JPA 소개
    INFLEARN/JPA 프로그래밍 - 기본편 2021. 11. 5. 18:09

    1. JPA 소개

     

    [강의 정리] 김영한님 :: 자바 ORM 표준 JPA 프로그래밍 - 기본편

     

     

    1. SQL 중심적인 개발의 문제점

    # 무한 반복, 지루한 코드

    • CRUD ...
    • 자바 객체를 SQL로 ...
    • SQL을 자바 객체로 ...

    => SQL 의존적인 개발

     

    # 패러다임의 불일치 (객체 vs 관계형 데이터베이스)

    • 객체를 영구 보관하는 다양한 저장소 (RDB, NoSQL, File, OODB)
    • 현실적인 대안은 객체를 관계형 데이터베이스에 저장하는 것

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

    • 상속
      • DB에 저장해야할 객체에 상속 관계를 쓴다면, 각각의 테이블에 따른 조인 SQL을 생성하고 또 각각의 객체를 생성하는 등등 너무 복잡한 프로세스를 갖고 있어서 DB에 저장할 객체에는 상속 관계를 쓰지 않음
      • 하지만, 자바 컬렉션에서 조회한다면 list 등으로 간단하게 조회 후 다형성 활용도 가능함
    • 연관관계
    • 데이터 타입
    • 데이터 식별 방법 

    # 계층형 아키텍처 진정한 의미의 계층 분할이 어려움

    • 객체 비교
    • 자바 컬렉션에서 조회하여 비교하면  

     

    2. JPA 소개

    # JPA

    • Java Persistence API
    • 자바 진영의 ORM 기술 표준

     

    # ORM

    • Object-relational mapping (객체 관계 매핑)
    • 객체는 객체대로 설계
    • 관계형 데이터베이스는 관계형 데이터베이스대로 설계
    • ORM 프레임워크가 중간에서 매핑
    • 대중적인 언어에는 대부분 ORM 기술이 존재 

     

    # JPA는 애플리케이션과 JDBC 사이에서 동작

    출처 : 김영한님 강의 자료

    • 저장
      출처 : 김영한님 강의 자료
    • 조회
      출처 : 김영한님 강의 자료

     

    # JPA 표준 명세

    • JPA는 인터페이스의 모음
    • JPA 2.1 표준 명세를 구현한 3가지 구현체
      • JPA 2.1 : 스토어드 프로시저 접근, 컨버터, 엔티티 그래프 기능 추가
    • 하이버네이트 (8-90%), EclipseLink, DataNucleus

     

    # JPA를 사용해야하는 이유

    • SQL 중심적인 개발에서 객체 중심으로 개발
    • 생산성
    • 유지보수
    • 성능
    • 패러다임의 불일치 해결
    • 데이터 접근 추상화와 벤더 독립성
    • 표준

     

    # JPA의 성능 최적화 기능 

    • 1차 캐시와 동일성(Identity) 보장
      • 실무에서 크게 도움되지는 않지만 같은 트랜젝션 안에서는 같은 엔티티를 반환하여 약간의 조회 성능 향상
      • DB isoloation level이 read commit 이어도 애플리케이션에서 repeatable read 보장
    • 트랜젝션을 지원하는 쓰기 지연 (transactional write-behind)
      • Insert 
        1. 트랜젝션을 커밋할 때까지 INSERT SQL을 모음
        2. JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
      • Update
        1. UPDATE, DELETE로 인한 ROW 락 시간 최소화
        2. 트랜젝션 커밋 시 UPDATE, DELETE SQL 실행하고 바로 커밋
    • 지연 로딩 (Lazy Loading)
      • 지연 로딩 : 객체가 실제 사용될 때 로딩 (단점 : 네트워크를 여러번 탄다)
      • 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회 (지연 로딩 최적화,,)

     

    # ORM은 객체와 RDB 두 기둥위에 있는 기술

    댓글

Programming Diary