ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPA(Java Persistence API)
    Java/JPA 2020. 8. 7. 02:45

    JPA란?

    JPA는 자바의 ORM 표준 명세다.

    과거에 엔터프라이즈 자바 빈즈(EJB) 기술 표준이 있었는데, EJB에는 엔티티 빈(Entity Bean)이라는 ORM 기술이 있었다.

    이 엔티티 빈은 자바 엔터프라이즈 (J2EE)환경에서만 동작하는 한계가 있었고 사용하기에 복잡하고 어려운 문제들이 있었다.

    이러한 단점들을 해결하기 위해 하이버네이트 ORM 프레임워크가 등장하게 되었고 EJB 3.0에서 하이버네이트를 기반으로 '새로운 ORM 기술들을 정의하여 표준으로 지정해 JPA가 탄생'하게 되었다.

     

    JPA는 ORM에 관련된 기능 인터페이스들의 집합체이다. 이러한 기능들을 구현한 ORM 프레임워크를 선택하여 조합해야 사용할 수 있다.

    ORM 프레임워크 종류

     

    JPA를 사용하는 목적

    - 생산성

    JPA는  SQL을 작성하거나 JDBC API를 사용하는 과정을 대신 담당하여 처리해주고 객체를 중심으로 프로그램을 설계해 나갈 수 있도록 해준다.

    EntityManager를 이용해 Query 하고자 하는 메소드를 호출하므로 코드를 작성하는 것으로 DB를 핸들링하는 개발이 가능하다.

     

     

    - 더 나은 유지보수

    SQL에 의존하는 개발 방식은 엔티티에 필드 하나를 추가하는 작업만으로도 개발자는 수많은 연관 작업을 해야 한다. (등록, 수정, 조회 Query, 결과 매핑 등)

    반면 JPA는 이런 불편한 과정들을 대신 처리하여 필드를 추가하거나 삭제해도 수정할 코드가 줄어든다. (SQL Query를 직접 수정할 필요가 없으며, 결과를 매핑하기 위해 수정할 필요가 없다.)

     

    - 프로그램 설계와 RDB 설계간 패러다임 불일치 해결

    RDB는 데이터를 중심으로 설계하는 사고를 가지게 되는데, 객체 지향 프로그래밍의 객체 중심 설계 사고(추상화, 캡슐화, 상속, 다형성 등)와 사고가 서로 불일치하여 발생하는 문제점들(상속, 연관관계, 객체 그래프 탐색 등)을 조율하는 과정을 JPA가 대신 처리해준다.

     

    - 성능 향상

    JPA는 앱과 DB 사이에서 동작한다.

    앱과 DB 사이에 계층을 두어 트랜잭션 안에서 DB와의 통신을 최소화할 수 있다.

     

     

    - 데이터 접근 추상화

    RDB는 벤더사 마다 지원하는 함수들의 사용방법이 다른 경우가 있다. (페이지네이션 처리나 Date 함수등...)

    SQL Query를 직접 작성할 경우 벤더 사에 맞는 함수를 호출하도록 작성하고 하나하나 대응해야 한다.

    JPA는 각각의 벤더사에 맞는 Dialect를 지원하여 이러한 문제를 유연하게 처리해준다.

     


     

    Spring Data JPA?

     

    그럼 Spring Data JPA는 무엇인가?

     

    이는 Spring 진영에서 DB 작업을 좀 더 편리하게 할 수 있도록 JPA를 한층 더 추상화한 것이다.

    Repository 인터페이스를 제공하여 인터페이스의 규칙대로 메소드를 선언하거나 제공하는 메소드를 사용하면 그에 맞는 쿼리를 수행하는 구현체를 만들어 Bean으로 등록해준다.

     

    위에서 언급했듯, JPA는 EntityManager를 통해 DB 행위를 수행하게 되는데 Spring Data JPA는 이러한 행위들을 본인들이 구현하고 개발자들에게 제공하여 적절한 메소드만 호출하면 수행되도록 만들었다.

     

    SimpleJpaRepository
    EntityManager를 이용하는 JPA 수준의 행위들은 본인들이 구현해놓았다.

     

    GitHub: https://github.com/spring-projects/spring-data-jpa/

     

    spring-projects/spring-data-jpa

    Simplifies the development of creating a JPA-based data access layer. - spring-projects/spring-data-jpa

    github.com

     

     

     

    결과적으로 다음과 같은 계층 형태를 갖는다.

     

    'Java > JPA' 카테고리의 다른 글

    격리 전략  (0) 2020.10.25
    트랜잭션, 동시성  (0) 2020.10.25
    영속성 컨텍스트  (0) 2020.10.23
Designed by Tistory.