JPA(Java Persistence API)
- 자바 ORM기술에 대한 표준 명세로, JAVA에서 제공하는 API이다.
- 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스다.
- JPA는 특정 기능을 하는 라이브러리가 아닌, 스프링의 PSA(POJO를 사용하면서 특정 기술을 사용하기 위함)에 의해서 표준 인터페이스를 정해두었는데 그 중 ORM을 사용하기 위해 만든 인터페이스이다.
- ORM이기 때문에 자바 클래스와 DB테이블을 매핑한다.
ORM이란?
- 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필드
- 객체를 통해 간접적으로 디비 데이터를 다룬다.
- 객체와 디비의 데이터를 자동으로 매핑해준다.
- SQL쿼리가 아니라 메서드로 데이터를 조작할 수 있다.
- 객체간 관계를 바탕으로 SQL을 자동으로 생성한다.
- JPA, Hibernate
JPA의 특징
- 데이터를 객체지향적으로 관리할 수 있기 때문에 개발자는 비즈니스 로직에 집중할 수 있고 객체지향 개발이 가능하다.
- 자바 객체와 DB테이블 사이의 매핑 설정을 통해 SQL을 생성한다.
- 객체를 통해 쿼리를 작성할 수 있는 JPQL을 지원한다.
- JPA는 성능 향상을 위해 지연 로딩이나 즉시 로딩과 같은 몇 가지 기법을 제공하는데 이것을 활용하면 SQL을 직접 사용하는 것과 유사한 성능을 얻을 수 있다.
JPA사용 이유?
- SQL중심적인 개발에서 객체 중심적인 개발이 가능하다.
- SQL코드의 반복, 객체지향과 관계지향 데이터베이스의 페러다임 불일치
- Object => SQL변환 => RDB에 저장
- 생산성이 증가한다.
- 유지보수가 쉽다.
- 기존: 필드 변경 시 모든 SQL을 수정해야한다.
- JPA: 필드만 추가하면 된다. SQL은 JPA가 처리하기 때문이다.
- Object와 RDB간의 패러다임 불일치 해결
JPA Hibernate
- Hibernate는 JPA구현체의 한 종류이다.
- JPA는 DB와 JAVA객체를 매핑하기 위한 인터페이스를 제공하고 JPA구현체는 인터페이스를 구현한 것이다.
- Hibernate가 SQL을 직접 사용하지 않는다고 해서 JDBC API를 사용하지 않는것은 아니다.
- Hibernate가 지원하는 메서드 내부에서는 JDBC API가 동작하고 있으며 단지 개발자가 직접 SQL을 작성하지 않을 뿐이다.
- HQL(Hibernate Query Language)라 불리는 매우 강력한 쿼리 언어를 포함하고 있다.
- HQL은 SQL과 비슷하여 추가적인 컨벤션을 정의할 수 있다.
- HQL은 완전히 객체 지향적이며 상송, 다형성등의 객체지향의 강점을 누릴 수 있다.
- HQL은 쿼리 결과로 객체를 반환하며 프로그래머에 의해 생성되고 직접적으로 접근할 수 있다.
- HQL은 여러 테이블을 작업할 때 명시적인 join을 요구하지 않는다.
영속성
- 프로그램이 종료되어도 사라지지 않는 데이터의 특성을 말한다.
- 영속성을 갖지 않으면 데이터는 메모리에서만 존재하게 되고 프로그램이 종료되면 해당 데이터는 모두 사라지게 된다. => 데이터를 파일이나 DB에 영구 저장함으로써 데이터에 영속성을 부여한다.