본문 바로가기

개발중/Spring

자바 퍼시스턴스 API, JPA

728x90
반응형

자바 퍼시스턴스 API, JPA

  • 자바 퍼시스턴스 API 또는 자바 지속성 API ( Java Persistence API, JPA )는 자바 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API이다.
  • 기존에 EJB 에서 제공되던 엔터티 빈을 대체하는 기술이다. 자바 퍼시스턴스 API는 JSR 220에서 정의된 EJB3.0 스펙의 일부로 정의가 되어 있지만 EJB 컨테이너에 의존하지 않으며 EJB, 웹 모듈 및 Java SE 클라이언트에서 모두 사용이 가능하다. 또한 사용자가 원하는 퍼시스턴스 프로바이더 구현체를 선택해서 사용할 수 있다.

JPA 란 ?

  • JPA는 여러 ORM 전문가가 참여한 EJB3.0 스펙 작업에서 기존 EJB ORM이던 Entity Bean 을 JPA 라고 바꾸고 JavaSE, JavaEE 를 위한 영속성관리와 ORM 을 위한 표준 기술이다.
  • JPA는 ORM 표준 기술로 Hibernate, OpenJPA, EclipseLink, TopLink Essentials 과 같은 구현체가 있고 이에 표준 인터페이스가 바로 JPA 이다.

 

 

ORM  이란 ?

  • 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 필드
    • 객체를 통해 간접적으로 디비 데이터를 이룬다
  • 객체와 디비의 데이터를 자동으로 매핑 해준다
    • SQL 쿼리가 아니라 메서드로 데이터를 조작 할 수 있다.
    • 객체간 관계를 바탕으로 SQL을 자동으로 생성한다.
  • Persistant API 라고 할 수있다.
  • JPA, Hibernate

 

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

 

추상화 정도는 Spring-Data-JPA -> Hibernate -> JPA 이다.

Hibernate를 쓰는 것과 Spring Data JPA를 쓰는 것 사이에는 큰 차이가 없지만

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

이라는 이유에서 Spring Data JPA를 사용하는것이 더 좋다.

 

JPA 특징

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

JPA 사용 이유

  • SQL 중심적인 개발에서 객체 중심적인 개발이 가능
  • 생산성이 증가
  • 유지 보수가 쉽다.
  • Object 와 RDB간의 패러다임 불일치 해결

 

영속성

  • 데이터를 생성한 프로그램이 종료 되어도 사라지지 않는 데이터의 특성을 말한다.
  • 영속성을 갖지 않으면 데이터는 메모리에서만 존재하게 되고 프로그램이 종료되면 해당 데이터는 모두 사라지게 된다.
  • 그래서 우리는 데이터를 파일이나 DB에 영구 저장 함으로써 데이터에 영속성을 부여한다.

 

 

 

 

 

 

 

 

 

728x90
반응형

'개발중 > Spring' 카테고리의 다른 글

$(document).ready() 와 $(window).load() 차이  (0) 2021.01.05
MyBatis 에서 '#'과 '$'의 차이  (0) 2021.01.05
JSTL  (0) 2021.01.05
차트 만들기  (0) 2020.11.18
Ajax 을 이용한 insert  (0) 2020.10.22