ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPA
    개발 2020. 7. 23. 18:42

    JPA란?

    Java Persistence API로 Java ORM 기술에 대한 표준 명세이다.

    Java에서 제공하는 API로 Spring에서 제공하는 API가 아니다.

    Java Application에서 Relation DataBase를 사용하는 방식을 정의한 Interface이다.

    즉 Interface임으로 특정 기능을 하는 라이브러리가 아니고 SpringPSA에의해서

    표준 인터페이스를 정해두었다.

     

    Spring PSA란?

    servelet 기반으로 코드가 작동하지만 servelet 기술은 abstract layer에 의해 숨겨져 있고
    Annotation을 사용하여 요청을 Mapping 하는것을 의미한다.

     

    그 표준 인터페이스 중 ORM을 사용하기 위해 만든 인터페이스가 JPA이다.

    기존 EJB에서 제공 되는 Entity Bean을 대체하는 기술

    ORM이기 때문에 Java Class와 DataBase Table을 Mapping한다.(SQL을 Mapping X)

     

     

     

    ORM vs SQL Mapper

    ORM

    DataBase Table을 Java Object로 Mapping 함으로써 Object간의 관계를 바탕으로 SQL을 자동으로 생성해주는 것

    • DB data - Mapping - Obejct Field -> 객체를 통해 간접적으로 DB data를 다룬다.
    • Object와 DB의 data를 자동으로 Mapping 해준다.
    • SQL query가 아니라 Method로 Data를 조작할 수 있다.
    • 객채간 관꼐를 바탕으로 SQL을 자동으로 생성한다.
    • Persistant API
    • ex) JPA, Hibernate

    SQL Mapper

      SQL을 명시해 주고 Data Table과 Java Class의 Object를 Mapping 하며 직접 DataBase를 조작하는 것

    • SQL - Mapping - Object Field -> SQL문으로 직접 DB를 조작한다.
    • ex) Mybatis, Jdbc template

     

      ORM은 RDB(Relation Data Base)의 관계를 Object에 반영하는 것이 목적.

      Mapper는 단순히 Field를 Mapping하는 것이 목적

      하지만 둘 모두 JDBC API를 이용한다.

     

      JPA은 ORM을 위한 자바 EE 표준이며 Spring-Data-JPA는 JPA를 쉽게 사용하기 위해 스프링에서 제공하고 있는

      프레임워크이다.

      추상화는 Spring Data JPA → Hibernate → JPA

     

    JPA는 Application과 JDBC 사이에서 동작한다.

      사용자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.

     

    JPA-insert

      DAO에서 Object를 저장하고 싶은 경우 JPA에 Object를 넘긴다.

    1. Member Entity를 분석

    2. Insert SQL 구문 생성

    3. JDBC를 통해 SQL query를 DB에 전달

    JPA-find

    1. Object에서 Primary Key 값을 JPA에 넘긴다.

    2. Entity의 Mapping 정보를 바탕으로 적절한 SELECT query 생성.

    3. JDBC를 통해 SQL query를 DB에 전달

    4. DB로 부터 결과 값을 전달 받는다.

    5. 결과를 Object에 모두 Mapping 한다.

      Query를 JPA가 만들어 주기 때문에 Object와 RDB간의 패러다임 불일치를 해결 할 수 있다.

     

    JPA 장점

    • Data를 객체 지향적으로 관리할 수 있기 때문에 개발자는 비즈니스 로직에 집중할 수 있으며 객체지향 개발이 가능하다.

    • Java Object와 DB table 사이의 Mapping 설정을 통해 Query를 생성한다.

    • 객체를 통해 Query를 작성할 수 있는 JPQL 지원

    • JPA는 성능 향상을 위해 지연 로딩이나 즉시 로딩 같은 몇가지 기법 제공. 이를 활용하여 SQL을 직접 사용하는 것과 유사한 성능을 낼 수 있다.

     

    영속성?

      데이터를 생성한 프로그램이 종료되어도 사라지지 않는 데이터의 특성

      영속성을 갖지 않은 데이터는 메모리에서만 존재하게 되며 프로그램 종료시 사라진다.

     

    Persistance Layer

      Program의 Architecture에서 Data에 영속성을 부여해주는 계층.

      JDBC를 이용하여 직접 구현이 가능하나. Persistance Framework를 사용한다.

      Persistance Framework는 SQL Mapper와 ORM으로 나눌 수 있다.

     

    JPA의 핵심은 Entity가 영속성 Context에 포함되어 있는지로 갈린다.

    JPA의 Entity Manager가 활성화된 상태로 트랜잭션(@Transactional) 내부에서 DB의 Data를 가져오면

    Data는 영속성 Context가 유지된 상태이다. 이 상태에서 Data 값을 변경하면 Transaction이 끝나는 시점에서

    해당 Table의 변경사항을 반영하게 되므로 Entity Object의 Field 값만 변경해주면 따로 Update() Query를

    전달할 필요가 없으며 이를 더티 체킹이라 한다.

     

     

     

     

     

     

     

     

    Application Programming Interface (응용 프로그램 프로그래밍 인터페이스) : 응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스

     

    '개발' 카테고리의 다른 글

    mysql errno :150 ?~?  (0) 2020.08.02
    Vue 에서 is not Defined 가 뜬다면?  (0) 2020.07.25
    JPA 사용법  (0) 2020.07.23
    Git  (0) 2020.07.22
    sass(scss)?  (0) 2020.07.15
Designed by Tistory.