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 |