ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JPA] JPA 소개
    JPA 2023. 3. 13. 21:16

    공부일자 : 2023.03.09

    참조 : 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한)

     

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


    어플리케이션은 객체지행적인 언어를 사용하고
    DB는 대부분 관계형DB사용한다.

    즉 객체를 관계형 DB에 관리하게 되고 이를 위해서는 SQL이 사용된다.


    * 문제점 
    1) 무한반복, 지루함
    필드가 변경되면 모든 sql을 다 고쳐야하는 번거로움이 존재한다.

    2) 패러다임의 불일치
    객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성과 같은 시스템의 복잡성을 해결해줄 수 있는 특징을 가지고 있는 반면 RDB는 그렇지 않다.

     

    * 객체와 RDB의 차이

      객체 RDB
    상속 상속 개념 존재 슈퍼타입 - 서브타입
    연관관계 참조 외래키
    탐색의 범위 자유로움 한계가 존재

    => 이는 엔티티의 신뢰문제로 이어진다.

    3) 계층형 아키텍쳐
    진정한 의미의 계층분할이 어렵다.

     

    * JPA의 개발 배경

    즉, 객체답게 모델링할수록 매핑 작업만 늘어나고 SQL로 전환하는 작업이 굉장히 힘들어진다.

    하지만 객체를 영구보관하는 현실적인 대안은 관계형 데이터베이스이다.

    객체 => sql변환 => RDB에 sql로 저장
    여기에서 개발자는 sql 매퍼로서 존재하게 된다.

     

    그렇다면 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수 없을까?
    => JPA (Java Persistence Application)

     

    2. JPA 소개

    JPA는 자바진영의 ORM 기술 표준이다.
    ORM? Object-Relational Mapping(객체 관계 매핑)

    JPA는 어플리케이션과 JDBC사이에서 동작한다.

    JAVA - JPA - JDBC API - (SQL) - DB

    JPA는 엔티티를 받아서 분석하고 SQL을 생성하여 JDBC API를 사용하여 RDB로 던진다.
    이것으로 패러다임의 불일치를 해결할 수 있다.

     

    * 역사

    EJB(엔티티 빈) 하이버네이트 JPA
    - 자바 표준
    - 복잡
    - 실효성이 나쁨
    - 오픈 소스 - 하이버네이트 개발자를 스카웃하여 만든 JAVA 표준 ORM 기술
    - 오픈 소스에 비해 더 정제된 효과
    - 오픈소스에서 출발한 실용성이 있는 표준 명세

    JPA는 표준 명세이다.(인터페이스의 모음)
    (하이버네이트, EclipseLink, DataNucleus)
    하이버네이트 구현체를 쓴다고 생각하면 된다.

    * 왜 사용해야하는가?


    1) sql중심적인 개발에서 객체 중심적인 개발


    2) 생산성

    ex) 
    jpa.persist(저장)
    jpa.find(조회)
    jpa.set필드명("변경할 내용")(수정)
    jpa.remove(삭제)

    해당 명령어로 알아서 sql을 생성하여 주니 개발자는 더이상 SQL을 신경쓰지 않아도 된다.

    3) 유지보수
    필드변경 시 모든 쿼리 수정할 필요가 없다.

    4) 패러다임의 불일치 해결
    - 상속 : 슈퍼타입서브타입관계의 테이블, 상속관계를 가지고 다 알아서 해줌
    - 연관관계
    - 객체그래프탐색 : 참조, 탐색도 모두 가능하고 성능까지 고려해줌
    - 신뢰할 수 있는 엔티티, 계층 : 자유로운 데이터 탐색 가능하며 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장한다.

     

    5) 성능
    - 1차캐시와 동일성 보장 

     : 같은 트랜잭션 안에서는 같은 엔티티를 반환한다.(repeatable read가능 메모리에서 동일한 엔티티를 찾아 반환한다,)
    - 트랜잭션을 지원하는 쓰기 지연
     : 트랜잭션을 커밋할때까지 insert SQL을 모아 JDBC batch SQL 기능을 사용해서 한번에 SQL을 전송한다,
    때문에 네트워크 통신이 줄어든다,
    - 지연 로딩과 즉시 로딩

    : JPA는 둘 다 지원한다,
    만약 관계성이 있는 객체가 있는 경우 설정을 통해 지연로딩, 즉시로딩을 설정해 둘 수 있다.

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

    6) 데이터 접근 추상화와 벤더 독립성
    7) JAVA 표준 기술

    ORM은 객체와 RDB 두 기둥위에 있는 기술이다.
    즉,  둘 다 잘 알고 고민해야 JPA를 잘 사용할 수 있다.

    'JPA' 카테고리의 다른 글

    [JPA] JPA 프로젝트 생성  (0) 2023.03.14
Designed by Tistory.