관리 메뉴

개발노트

JPA 개념 및 기초 예제 실습 본문

API/JPA

JPA 개념 및 기초 예제 실습

YoonGwon 2021. 1. 15. 17:01

ORM 이란?

- ORM(Object-relational mapping : 객체 관계 매핑)이란 

- 객체는 객체대로 설계하고, 관계형 데이터베이스(RDB)는 관계형 데이터베이스대로 설계한다.

- ORM 프레임워크가 중간에서 매핑해준다.

- 대중적인 언어에는 대부분 ORM 기술이 존재한다.

- ORM은 객체와 RDB 두 기둥 위에 있는 기술이다.

- 자세히 설명하자면 ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다.
예를 들어 ORM 프레임워크를 사용하면 객체를 데이터베이스에 저장할 때 INSERT SQL을 직접 작성하는 것이 아니라 객체를 마치 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장하면 된다. 그러면 ORM 프레임워크가 적절한 INSERT SQL을 생성해서 데이터베이스에 객체를 저장해 준다.  


JPA 란?

-JPA(Java Persistence API)란 

현재 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음이다. 즉, 실제로 동작하는 것이 아니다.

*중요 : JPA 인터페이스를 구현한 대표적인 오픈소스가 Hibernate라고 할 수 있다.

- 버전

 * JPA 1.0(JSR 220) 2006년 : 초기 버전. 복합 키와 연관관계 기능이 부족.

 * JPA 2.0(JSR 317) 2009년 : 대부분의 ORM 기능을 포함, JPA Criteria 추가.

 * JPA 2.1(JSR 338) 2013년 : 스토어드 프로시저 접근, 컨버터(Converter), 엔티티 그래프 기능이 추가됨.

 

- 아래 그림은 그 대표적인 JPA 2.1 표준 명세를 구현한 구현체 3가지를 나열한 그림이다.

JPA 구현체 나열


[ JPA의 동작 과정 (저장 & 조회) ]

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

-개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.

-즉, 개발자가 직접 JDBC API를 쓰는 것이 아니다.

JPA의 위치

JPA의 저장 과정 

-Ex) MemberDAO에서 객체를 저장하고 싶을 때

    (1) 개발자는 JPA에 Member 객체를 넘긴다.

    (2) JPA는 
        a) Member 엔티티를 분석한다.

        b) INSERT SQL을 생성한다.

        c) JDBC API를 사용하여 SQL을 DB에 날린다.

 

JPA 저장과정

JPA의 조회 과정 

-Ex) Member 객체를 조회하고 싶을 때

    (1) 개발자는 member의 pk 값을 JPA에 넘긴다.

    (2) JPA는 
        a) 엔티티의 매핑 정보를 바탕으로 적절한 SELECT SQL을 생성한다.

        b) JDBC API를 사용하여 SQL을 DB에 날린다.

        c) DB로부터 결과를 받아온다.

        d) 결과(ResultSet)를 객체에 모두 매핑한다.

- 쿼리를 JPA가 만들어 주기 때문에 Object와 RDB 간의 패러다임 불일치해결할 수 있다.

JPA 조회과정

 

* JPA를 알아보며 같이 알아야할 자바의 표준기술이 있으니 같이 살펴보자.

a) EJB (Entity Bean)

- 과거의 자바 표준.

- 과거의 ORM

- 문제점

   1) 코드가 매우 지저분하다.

   2) API의 복잡성이 높다. (interface를 많이 구현해야 함)

   3) 속도가 느리다.

b) 하이버네이트 (Hibernate)

- ORM 프레임워크, Open Source SW

- 'Gavin King'과 시러스 테크놀로지스 출신 동료들이 EJB2 스타일의 Entity Beans 이용을 대체할 못적으로 개발하였다.

 

 


*JPA를 왜 사용해야 하는가?

1. SQL 중심적인 개발에서 객체 중심으로 개발.

  - SQL 중심적인 개발의 문제점 참고.

2. 생산성

  - JPA를 사용하는 것은 마치 Java Collection에 데이터를 넣었다 빼는 것처럼 사용할 수 있게 만든 것이다.

  - 간단한 CRUD

  • 저장 : jpa.persist(member);
  • 조회 : Member member = jpa.find(memberId);
  • 수정 : member.serName("변경할 이름");
  • 삭제 : jpa.remove(member);

   - 특히, 수정이 굉장히 간단하다. 객체를 변경하면 그냥 알아서 DB에 UPDATE Query가 나간다.

 

3. 유지보수

  • 기존 : 필드 변경 시 모든 SQL을 수정해야 한다.
  • JPA : 필드만 추가하면 된다. SQL은 JPA가 처리하기 때문에 손댈 것이 없다.

4. Object와 RDB 간의 패러다임 불일치 해결.

패러다임 차이

[ 저장 ]
- 개발자가 할 일
 * jpa.persist(album);
- 나머진 JPA가 처리
 * INSERT INTO ITEM . . .
 * INSERT INTO ALBUM . . .

 

[ 조회 ]
- 개발자가 할 일
 * Album album = jpa.find(Album.class, albumId);
- 나머진 JPA가 처리
 *SELECT I.*, A.* FROM ITEM I JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID


5. JPA의 성능 최적화 기능.

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

7. 표준.

 


[개인적인 정리]

-객체 모델과 관계형 데이터베이스 모델은 지향하는 패러다임이 서로 다르다.

-ORM 프레임워크를 쓰는데 가장 많이 쓰는것이 하이버네이트이다.

-JPA는 자바 ORM 기술에 대한 API 표준 명세다. 쉽게 이야기해서 인터페이스를 모아둔 것이다. 따라서 JPA를 사용하려면 JPA를 구현한 ORM 프레임워크를 선택해야한다.

728x90

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

[JPA] Entity 생명주기(Entity LifeCycle)  (0) 2022.08.12
JPA Annotation 정리  (0) 2021.01.18
JPA에서 플러시(flush) 개념 및 호출 방법 3가지  (0) 2021.01.18
영속성 컨텍스트란?  (0) 2021.01.18