이번 포스팅에서 알아볼 내용은
JPA ( Java persistence API ) 란 무엇인가?
JPA의 동작원리
JPA의 특징
Hibernate와의 관계
를 알아보겠습니다.
JPA ( Java Persistence API ) 란?
JAVA에서 제공하는 API로 JAVA ORM 기술에 대한 표준입니다.
- 자바 애플리케이션에서 RDBMS를 사용하는 방법을 정의한 Interface입니다.
- JPA는 스프링의 *PSA, 즉 POJO를 사용하면서 특정 기술을 사용하기 위해서 표준 Interface를 정해두었는데, 그중 ORM을 사용하기 위해 만든 인터페이스가 바로 JPA입니다.
- 기존 *EJB에서 제공되던 Entity Bean을 대체하는 기술입니다.
- *ORM이기 때문에 자바 클래스와 DB 테이블을 Mapping 합니다. ( SQL을 매핑하지 않습니다. )
(*이 들어간 용어는 이번 포스팅의 하단에서 설명하였습니다.)
JDBC
JDBC는 DataBase에 접근할 수 있도록 Java에서 제공하는 API입니다.
모든 Java Data Access 기술의 근본입니다. 즉, 모든 Persistence Framework는 JDBC를 사용합니다.
JPA 동작 과정
JPA는 Application과 JDBC 사이에서 동작합니다.
개발자가 직접 JDBC API를 사용하지 않고, JPA를 사용하면 내부에서 JDBC API를 사용하여
SQL을 호출하고 DataBase를 간접적으로 조작합니다.
JPA의 특징
- 데이터를 OOP적으로 관리할 수 있기 때문에 개발자는 비즈니스 로직에 집중할 수 있고 더더욱 객체지향 개발이 가능하게 합니다.
- 자바 객체와 Table 사이의 Mapping Setting을 통해 SQL을 생성합니다.
- 객체를 통해 쿼리를 작성할 수 있는 JPQL( Java Persistence Query Language )를 지원합니다.
- JPA의 성능 향상을 위해 다양한 Entity 설정 방법이 제공되고 올바른 활용을 통해 SQL을 직접 사용하는 것과 유사한 성능을 얻을 수 있습니다.
( QueryDSL이라는 라이브러리를 통하여 쿼리를 작성하는 방법도 존재합니다. 다른 포스팅에서 다루겠습니다. )
그렇다면 왜 JPA를 사용해야 할까요??
JPA의 장점과 사용하는 이유
- SQL 중심적인 개발에서 객체 중심적인 개발 가능
- 반복적인 SQL 코드,
- 생산성의 향상
- 쉬운 유지보수
- 객체지향 Java와 관계지향 DB의 패러다임 불일치 해결
JPA Hibernate
Hibernate는 JPA 구현체의 한 종류입니다.
JPA는 DataBase와 Java Object를 Mapping 하기 위한 Interface( API )를 제공하고 JPA 구현체( Hibernate )는 Inteface( API )를 구현한 것입니다.
ex) Java의 Interface와 해당 Interface를 구현한 Class와 동일한 관계입니다.
즉, JPA를 사용하기 위해서 반드시 Hibernate를 사용할 필요가 없다는 것입니다.
PSA ( Portable Service Abstraction 란??
환경의 변화와 관계없이 일관된 방식의 기술 접근 환경을 제공하려는 추상화 구조
다른 Spring 포스팅에서 알 수 있었던 AOP의 Proxy 패턴 사용을 알게 되었고 BeanFactory를 통해 Proxy가 Bean 생성 시 자동으로 생성되는 것 또한 알게 되었습니다.
@Transactional 애노테이션을 선언하는 것 만으로 별도의 코드 추가 없이 트랜잭션 서비스를 사용할 수 있는 것처럼 내부적으로 Transaction 코드가 추상화되어 숨겨져 있는 것입니다.
추상화 계층을 사용하여 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것이 서비스 추상화 ( Service Abstraction )입니다.
그리고 JAVA의 JDBC를 통해 DB에 접근( DatasourceTransactionManager )할 수 있으며 ORM을 이용한다면 JPA ( JPATransactionManager )를 통해서 접근할 수도 있고 또한, @Transactional 애노테이션과 같이 하나의 추상화로 여러 서비스를 묶어둔 것을 Spring에서 Portable Service Abstaction이라고 합니다.
EJB ( Enterprise Java Bean ) 란??
Java Bean이란 자바 객체를 재사용 가능하도록, 컴포넌트화 시킬 수 있는 코드 방침을 정의한 것입니다.
EJB란 Enteprise급 Application 개발을 단순화하기 위한 스펙입니다.
개발을 하다 보면 다양한 객체들을 만들게 되는데, 이러한 비즈니스 객체들을 관리하는 컨테이너를 만들어서 필요할 때마다 컨테이너로부터 객체를 받는 식으로 효율적인 관리 방법에서 탄생한 방침입니다.
스프링의 기본 철학으로 특정 기술에 종속되지 않고 객체를 관리할 수 있는 컨테이너를 제공하는 것입니다.
ORM ( Object Relation Mapping : 객체 관계 매핑 )이란??
OOP( Object Oriented Programming )에서 쓰이는 객체 개념을 구현한 Class와
RDB( Relational DataBase )에서 쓰이는 Data인 Table을 자동으로 Mapping( 연결 )하는 것을 의미합니다.
Class와 Table은 서로가 처음부터 호환가능성을 두고 설계된 것이 아니기 때문에 불일치가 발생하는데,
이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결합니다.
따라서 ORM을 통해 SQL문을 짤 필요 없이 객체를 통하여 간접적으로 DataBase를 조작할 수 있게 됩니다.
이번 포스팅으로 JPA에 대해 알아보았습니다.