ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 01-3. JPA란 무엇인가?
    JPA 2021. 1. 14. 23:56

    JPA는 자바 진영의 ORM 기술 표준이다.

    애플리케이션과 JDBC 사이에서 동작한다.

     

    그렇다면 ORM이란 무엇인가?

    이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다.

    ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다.

     

    예를 들어 ORM 프레임워크를 사용하면 객체를 데이터베이스에 저장할 때 INSERT SQL을 직접 작성하는 것이 아니라

    객체를 마치 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장하면 된다. 그러면 ORM 프레임워크가 적절한 INSERT SQL을 생성해서

    데이터베이스에 객체를 저장해준다.

     

    jpa.persist(member); //member 객체를 DB에 저장 한다.

    Member member = jpa.find(memberId); //회원 정보 조회 한다.

     

    ORM 프레임워크는 단순히 SQL을 개발자 대신 생성해서 데이터베이스에 전달해주는 것뿐만 아니라 앞서 이야기한

    다양한 패러다임의 불일치 문제들도 해결해준다. 

     

    따라서 객체 측면에서는 정교한 객체를 모델링을 할 수 있고 관계형 데이터베이스는 데이터베이스에 맞도록 모델링하면 된다.

    그리고 둘을 어떻게 매핑해야하는지 매핑 방법만 ORM 프레임워크에게 알려주면 된다.

     

    다양한 ORM 프레임워크들이 있는데 그중에 하이버네이트 프레임워크가 가장 많이 상용된다.

     

    왜 JPA를 사용해야 하는가?

    - 생산성

    지루하고 반복적인 코드와 CRUD용 SQL을 개발자가 직접 작성하지 않아도 된다.

     

    - 유지보수

    SQL을 직접 다루면 엔티티에 필드를 하나만 추가해도 관련된 등록, 수정, 조회 SQL과 결과를 매핑하기 위한 JDBC API 코드를 모두 변경해야 했다. 반면 JPA를 사용하면 이런 과정을 JPA가 대신 처리해주므로 필드를 추가하거나 삭제해도 수정해야 할 코드가 줄어든다.

     

    - 패러다임 불일치 해결

    JPA는 상속, 연관관계, 객체 그래프 탐색, 비교하기와 같은 패러다임의 불일치 문제를 해결해준다.

     

    - 성능

    String memberId = "helloId";

    Member member1 = jpa.find(memberId);

    Member member2 = jpa.find(memberId);

     

    이것은 같은 트랙잭션 안에서 같은 회원을 두 번 조회하는 코드의 일부분이다.

    JDBC API를 사용해서 해당 코드를 직접 작성했다면 회원을 조회할 때마다 SELECT SQL을 사용해서

    데이터베이스와 두 번 통신했을 것이다.

    JPA를 사용하면 회원을 조회하는 SELECT SQL을 한 번만 데이터베이스에 전달하고 두 번쨰는 조회한 회원 객체를 재사용한다.

     

    - 데이터 접근 추상화와 벤더 독립성

    관계형 데이터베이스는 같은 기능도 벤더마다 사용법이 다른 경우가 많다.

    단적인 예로 페이징 처리는 데이터베이스마다 달라서 사용법을 각각 배워야 한다.

     

    결국, 애플리케이션은 처음 선택한 데이터베이스 기술에 종속되고 다른 데이터베이스로 변경하기는 매우 어렵다.

    만약 데이터베이스를 번경하면 JPA에게 다른 데이터베이스를 사용한다고 알려주기만 하면 된다.

     

    JPA를 사용하면 로컬 개발 환경은 H2 데이터베이스를 사용하고 개발이나 상용 환경은 오라크ㅡㄹ이나 MySQL 데이터베이스를 사용할 수 있다.

    'JPA' 카테고리의 다른 글

    03. 영속성 관리  (0) 2021.01.31
    02. JPA 시작  (0) 2021.01.17
    01-2. JPA 소개  (2) 2020.12.29
    01-1. JPA 소개  (0) 2020.12.01
    Pageable 사용하기  (0) 2020.02.08
Designed by Tistory.