JPA

구름코딩·2020년 10월 18일
0

JPA (Java Persistence API)

Spring Data JPA는 Java Persistence API(JPA)에 대한 리포지토리 지원을 제공한다. JPA 데이터 소스에 접근해야 하는 애플리케이션의 개발을 용이하게 한다.

  • 자바 ORM기술에 대한 표준 명세로, JAVA에서 제공하는 API이다
  • 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다
    • 말그대로 인터페이스로, JPA는 특정 기능을 하는 라이브러리가 아니다. 스프링의 PSA에 의해서 표준 인터페이스를 정의해 두었는데, 그중 ORM을 사용하기위해 만든 인터페이스가 JPA이다
  • 기존 EJB에서 제공되던 Entity Bean을 대체하는 기술이다
  • ORM이므로 자바클래스와 DB테이블을 매핑한다 (sql을 매핑하지 않는다)

ORM이란?

자바에서 DB를 건드린다 == jdbc를 사용한다라는 고정관념이있는데 JPA와 JDBC의 차이점은?

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

SQL Mapper

  • SQL <- mapping -> Object 필드
  • SQL문으로 직접 DB를 조작한다
  • Mybatis, JdbcTemplate

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

  • DB DATA <- mapping -> Object 필드
    • 객체를 통해 간접적으로 DB DATA를 처리한다
  • 객체와 DB의 데이터를 자동으로 매핑해준다
    • SQL쿼리가 아니라 메소드로 데이터를 조작할 수 있다
    • 객체간 관계를 바탕으로 SQL을 자동으로 생성한다
  • Persistent API라고 할 수 있다
  • JPA, Hibernate
  • what is Object/Relational Mapping? Hibernate ORM

JDBC

JDBC는 DB에 접근할 수 있도록 자바에서 제공하는 API이다

모든 JAVA DATA Access 기술의 근간이다 => 모든 Persistance Framework는 내부적으로 JDBC API를 이용한다

Spring-Data JPA란?

JPA는 ORM을 위한 자바 EE표준이며 스프링 데이터 JPA는 JPA를 쉽게 사용하기 위해 스프링에서 제공하는 프레임워크이다

추상화 정도는 spring-data JPA - Hibernate - JPA이다

스프링 데이터 JPA의 장점

  • 구현체 교체의 용이성
  • 저장소 교체의 용이성

Spring Data JPA, Spring Data MongoDB, Spring Data Redis등 Spring Data의 하위 프로젝트들은 findAll(), save()등을 동일한 인터페이스로 가지고 있기 때문에 저장소를 교체해도 기본적인 기능이 변하지 않는다

JPA 동작과정

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

JPA 특징

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

JPA 사용 이유

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

참고
adam2블로그

profile
내꿈은 숲속의잠자는공주

0개의 댓글