[JPA] JPA

무1민·2023년 7월 18일
0

JPA

목록 보기
3/3

JPA(Java Persistence API)

  • 자바 ORM 기술에 대한 표준 명세로, JAVA에서 제공하는 API이다.
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
    • JPA는 말 그대로 인터페이스(라이브러리가 아님)
    • 스프링의 PSA에 의해서(POJO를 사용하면서 특정 기술을 사용하기 위해) 표준 인터페이스를 정해두었는데, 그 중 orm을 사용하기 위해 만든 인터페이스가 바로 JPA
  • 기존 EJB에서 제공되던 엔티티 빈을 대체하는 기술
  • ORM이기 때문에 자바 클래스와 DB테이블을 매핑(SQL 매핑X)

ORM

  • DB 테이블을 자바 객체로 매핑함으로써 객체간의 관계를 바탕으로 SQL을 자동으로 생성하지만 Mapper는 SQL을 명시해주어야 한다.
  • ORM은 RDB의 관계를 Object에 반영하는 것이 목적이라면, Mapper는 단순히 필드를 매핑시키는 것이 목적이라는 점에서 지향점의 차이

SQL Mapper

  • SQL <- mapping -> Object 필드
  • SQL문으로 직접 DB 조작
  • Mybatis, jdbcTemplate

ORM(Object-Relation Mapping/객체-관계 매핑)

  • DB 데이터 <- mapping -> Object 필드
    • 객체를 통해 간접적으로 DB 데이터를 다룬다.
  • 객체와 디비의 데이터를 자동으로 매핑
    • SQL 쿼리가 아니라 메서드로 데이터 조작 가능
    • 객체 간 관계를 바탕으로 sql을 자동으로 생성
  • Persistant API
  • JPA, Hibernate

JDBC

  • DB에 접근할 수 있도록 자바에서 제공하는 API
  • 모든 JAVA Data Access 기술의 근간 => 모든 Persistence Framework는 내부적으로 JDBC API를 이용

Spring-Data-JPA

  • JPA는 ORM을 위한 자바 EE 표준이며 Spring-Data-JPA는 JPA를 쉽게 사용하기 위해 스프링에서 제공하고 있는 프레임 워크
  • 추상화 정도는 Spring-Data-JPA -> Hibernate -> JPA이다.
  • 구현체 교체, 저장소 교체의 용이성의 이유로 Spring Data JPA를 사용하는 것이 더 좋다.

JPA 동작 과정

  • JPA는 애플리케이션과 JDBC 사이에서 동작
  • JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.
  • 즉, 개발자가 직접 JDBC API를 쓰는 것이 아니다.

INSERT

  • 개발자는 MemberDAO에서 객체를 저장하고 싶을 때 개발자는 JPA에 Member 객체를 넘긴다.

    JPA

    1. Member 엔티티를 분석한다.
    2. INSERT SQL을 생성한다.
    3. JDBC API를 사용하여 SQL을 DB에 날린다.

FIND

  • 개발자는 member의 pk 값을 JPA에 넘긴다.

    JPA

    1. 엔티티의 매핑 정보를 바탕으로 적절한 SELECT SQL을 생성한다.
    2. JDBC API를 사용하여 SQL을 DB에 날린다.
    3. DB로부터 결과를 받아온다.
    4. 결과(ResultSet)를 객체에 모두 매핑
      쿼리를 JPA가 만들어 주기 때문에 Object와 RDB 간의 패러다임 불일치를 해결할 수 있다.

JPA 특징

  • 데이터를 객체지향적으로 관리할 수 있기 때문에 개발자는 비즈니스 로직에 집중할 수 있고, 객체지향 개발이 가능하다.
  • 자바 객체와 DB 테이블 사이의 매핑 설정을 통해 SQL을 생성한다.
  • 객체를 통해 쿼리를 작성할 수 있는 JPQL(Java Persistence Query Language)를 지원
  • JPA는 성능 향상을 위해 지연 로딩이나 즉시 로딩과 몇 가지 기법을 제공하는데 이것을 잘 활용하면 SQL을 직접 사용하는 것과 유사한 성능을 얻을 수 있다.

JPA를 왜 사용해야 할까?

  • sql 중심적인 개발에서 객체 중심적인 개발이 가능하다.
    • sql 코드의 반복, 객체지향과 관계지향 데이터베이스의 페러다임 불일치
    • Object -> [SQL 변환] -> RDB에 저장
  • 생산성이 증가
    • 간단한 메소드로 CRUD 가능
  • 유지보수가 쉽다
    기존 : 필드 변경 시 모든 SQL을 수정해야 한다.
    JPA : 필드만 추가하면 된다. SQL은 JPA가 처리하기 때문에 손댈 것이 없다.
  • Object와 RDB 간의 패러다임 불일치 해결

JPA Hibernate

  • JPA 구현체의 한 종류

  • JPA는 DB와 자바 객체를 매핑하기 위한 인터페이스(API)를 제공하고 JPA 구현체(하이버네이트)는 이 인터페이스를 구현한 것이다.

  • Hibernate가 SQL을 직접 사용하지 않는다고 해서 JDBC API를 사용하지 않는다는 것은 아니다.

    • Hibernate가 지원하는 메서드 내부에서는 JDBC API가 동작하고 있으며, 단지 개발자가 직접 SQL을 작성하지 않을 뿐이다.
profile
야호

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

가치 있는 정보 공유해주셔서 감사합니다.

답글 달기