ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ORM - JPA란 무엇인가?
    FrameWork/ORM 2024. 1. 22. 14:18

    JPA란 무엇인가?

    JPA(JAVA Persistence API)는 자바 진영의 ORM 표준 기술이다. 

    그렇다면 ORM이란 무엇일까? ORM(Object-Relational-Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해 준다. 예를 들어 ORM 프레임워크를 사용하면 객체를 데이터베이스에 저장할 때 INSERT SQL을 직접 작성하는 것이 아니라 객첼르 마치 자바 컬렉션 저장하듯이 ORM 프레임 워크에 저장하면 된다. 그러면 ORM 프래임워크가 적절한 INSER SQL을 생성해서 데이터 베이스에 객체를 저장해준다.

     

    JPA를 사용해서 DB에 객체 저장

    그림 1.7 JPA 저장

    jpa.persist(member); //저장

     

    JPA를 사용해서 객체를 저장하는 코드는 위와 같다.

     

    JPA를 사용해서 DB에 객체 조회

     

    1.8 JPA 조회

     

    Member member = jpa.find(memberId); //조회

     

    JPA를 사용해서 객체를 조회하는 코드는 위와 같다.

     

    ORM프레임워크는 단순히 SQL을 개발자 대신 생성해서 데이터베이스에 전달해주는 것 뿐만 아니라 이전 게시물에서 이야기한 다양한 패러다임의 불일치 문제들도 해결해 준다. 따라서 객체 측면에서 정교한 객체 모델링을 할 수 있고 관계형 데이터베이스는 데이터베이스에 맞도록 모델링하면 된다. 개발자는 이 둘을 어떻게 매핑해야 하는지 매핑 방법만 ORM 프레임워크에게 알려주면 된다. 이 덕분에 데이터 분심인 관계형 데이터베이스를 사용해도 객체지향 애플리케이션 개발에 집중할 수 있다.

     

    JPA 소개

    과거 자바 진영은 엔터프라이즈 자바 빈즈(EJB)라는 기술 표준을 만들었는데 그안에 엔티티 빈이라는 ORM 기술도 포함되어 있었다. 하지만 너무 복잡하고 기술 성숙도도 떨어 졌으며 이외에도 많은 문제들을 안고 있었다. 이때 하이버네트(hibernate.org)라는 오픈소스 ORM프레임워크가 등장했는데  기술 성숙도도 높았으면 자바 엔터프라이즈(J2EE) 애플리케이션 서버 없이도 동작해 많은 개발자들이 사용했다. 결룩 EJB3.0dptj 하이버네트를 기반으로 새로운 자바 ORM 기술 표준이 만들어 졌는데 이것이 바로 JPA다. 

    그림 1.9 JPA 표준 인터페이스와 구현체

     

    위 그림을 보자 JPA는 자바 ORM 기술에 대한 API 표준 명세다. 쉽게 이야기해서 인터페이스를 모아둔 것이다. 따라서 JPA를 사용하려면 JPA를 구현한 ORM 프레임워크를 선택해야 한다. 위 그림 중 하이버네이트가 가장 대중적이다. (이 포스트는 JPA 2.1 버넞에 구현 프레임워크로 하이버네이트를 사용한다.)

     

    JPA라는 표준 덕분에 특정 구현 기숳에 대한 의존도를 줄일 수 있고 다른 구현 기술로 손쉽게 이동할 수 있는 장점이 있다. JPA 표준은 일반적이고 공통적인 기능의 모음이다. 따라서 표준을 먼저 이앻하고 필요에 따라 JPA 구현체가 제공하는 고유의 기능을 알아가면 된다.

     

     

    왜 JPA를 사용해야 하는가?

    • 생산성
      • JPA에는 CREATE TABE같은 DDL 문을 자동으로 생성해주는 기능도 있다. JPA의 기능으로 사용하면 데이터베이스 설계 중심의 패러다임을 객체 중심으로 역전시킬 수 있다.
    • 유지보수 
      • 객체에 새로운 필드를 추가해도 개발자가 수정해야했던 SQL과 JDBC API 코드를 JPA가 대신 처리해준다. 이로써 객체지향 언어가 가진 장점을 활용해 유연하고 유지보수하기 좋은 도메인 모델을 편리하게 설계할 수 있다
    • 패러다임 불일치 해결 
    • 성능
      • 애플리케이션과 데이터베이스 사이에 계츠이 하나 더 있으면 최적화 관점에서 시도해 볼 수 있는 것들이 많다.
    String memberId = "helloId";
    Member member1 = jpa.find(memberId);
    Member member2 = jpa.find(memberId);

     

    위 코드는 같은 트랜잭션 안에서 같은 회원을 두 번 조회하는 코드의 일부부이다. JDBC API를 사용해서 해당 코드를 직접 작성했다면 회원을 조회할 때마다 SELECT SQL을 사용해서 데이터베이스와 두 번 통신했을 것이다.  JPA를 사용하면 회원을 조회하는 SELECT SQL을 한 번만 데이터베이스에 전달하고 두 번 째는 조회한 회원 객체를 재 사용한다. 참고로 하이버네이트는 SQL 힌트를 넣을 수 있는 기능도 제공한다.

    • 데이터 접근 추상화와 벤더 독립성
      • 애플리케이션은 처음 선택한 데이터베이스 기술에 종속되고 다른 데이터베이스로 변경하기는 어렵다. 예시로 데이터베이스 벤더마다 페이징 처리 방법이다르다.

    그림 1.10 벤더 독립성

    JPA는 위 그림 처럼 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해서 애플리케이션 특정 데이터베이스 기술에 종속되지 않도록 한다. 

     

     

    출처 - [자바 ORM 표준 JPA 프로그래밍 - 저, 김영한]

    http://www.acornpub.co.kr/book/jpa-programmig\

     

    자바 ORM 표준 JPA 프로그래밍

    JPA 기초 이론과 핵심 원리, 그리고 실무에 필요한 성능 최적화 방법까지 JPA에 대한 모든 것

    www.acornpub.co.kr

     

    댓글

Designed by Tistory.