Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

청개구리 개발자

JPA(Java Persistence API)란?? 본문

Java

JPA(Java Persistence API)란??

beConstant 2020. 1. 13. 17:53

JPA(Java Persistence API)란 무엇인가??

 

JPA란 자바 진영의 ORM 기술 표준을 의미한다.
즉, ORM(Object Relational Mapping)을 사용해 데이터베이스에서 지속적으로 많은 양의 데이터를 관리하기 위한 API를 의미한다.

 

JPA에 대해서 알아보았다면 도대체 JPA가 어디에 사용되는지에 대해서 알아보자!!

ORM(Object Relational Mapping)에 대해서는 좀 더 뒤에서 설명하겠다.

JPA는 어디에서 사용되는가?

개발자들은 Realational Object를 관리하기 위해 코드를 쓰는 번거로움을 감소하고자, JPA Provider 프레임워크를 사용한다.

JPA Provider는 데이터베이스 인스턴스간 상호관계를 쉽게 처리해준다.

JPA Provider란? Oracle, Redhat, Eclipse 등과 같은 다양한 엔터프라이즈 공급업체에서 JPA Persistence 기능을 구현한 구현체이다. JPA Provider의 예로는 가장 많이 쓰는 Hibernate, Eclipselink, Toplink, Spring Data JPA 등이 있다.

Class Level Architecture of JPA

Class Level Architecture of JPA

위 그림은 JPA의 핵심 클래스와 인터페이스를 보여주고, 클래스 레벨의 JPA 아키텍처를 보여준다.

 

다음으로는 JPA의 핵심개념인 ORM(Object Relational Mapping)에 대해서 알아보자!!!

ORM(Object Relational Mapping) 이란?

 

ORM이란 데이터를 Object 타입에서 Relational 타입으로 또는 그 반대로 바꾸는 프로그래밍 기술을 의미한다.

 

ORM의 가장 중요한 특징은 Object를 데이터베이스 내의 데이터와 맵핑하는 것이다. 개발자들은 맵핑시 데이터, 데이터 유형, 테이블 자체의 엔티티 및 엔티티와의 관계를 고려해야한다.

 

ORM의 특징으로는 Idiomatic persistence, High Performance, Reliable 등이 있다.

ORM Architecture

ORM Architecture

위 아키텍처는 어떻게 Object 타입의 데이터가 관계형 데이터베이에 저장되는지 3단계의 과정으로 설명해준다.

 

1 단계 (Object data Phase)

1 단계는 POJO(Plain Old Java Object)와 서비스 인터페이스, 클래스를 포함한다.
business 로직 메소드와 속성을 포함하는 주요 business 단계이다.

  • ex) Employee 클래스는 ID, name, salary, ... 등의 속성을 포함하고 setter와 getter등 다양한 메서드를 포함한다.

2 단계 (Mapping or persistence Phase)

2 단계는 맵핑 또는 persistence 단계라고 불리우며 JPA Provider, mapping file(ORM.xml), JPA Loader, Object Grid가 포함된다.

  • JPA Provider : JPA flavor(javax.persistence)를 포함하는 라이브러리 또는 프레임워크를 의미한다.
  • Mapping file : 맵핑파일은 POJO 클래스의 데이터와 relational database의 데이터 사이의 맵핑 설정을 해주는 파일이다.
  • JPA Loader : Relational Grid Data를 로드할 수 있는 캐시 메모리같은 역할을 수행한다.
  • Object Grid : 관계형 데이터의 복사본이 저장할 수 있는 캐시메모리와 같은 일시적인 공간을 의미한다.

3 단계 (Relational Data Phase)

3 단계에서는 business component와 논리적으로 연결된 Relational Data를 포함합니다. Business 요소가 데이터를 Commit할 때 물리적인 데이터베이스에 저장됩니다. 그때까지 수정된 데이터는 그리드 형식으로 캐시 메모리에 저장됩니다.

Mapping.xml 이용해 맵핑하기

Mapping.xml 파일은 데이터베이스의 테이블들과 entitiy 클래스들을 매핑하도록 JPA vendor에게 지시합니다.

<? xml version="1.0" encoding="UTF-8" ?>

<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm    
   http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
   version="1.0">
      
   <description> XML Mapping file</description>
      
   <entity class="Employee">        
      <table name="EMPLOYEETABLE"/>
      <attributes>
      
         <id name="eid">
            <generated-value strategy="TABLE"/>
         </id>

         <basic name="ename">
            <column name="EMP_NAME" length="100"/>
         </basic>
         
         <basic name="salary">
         </basic>
         
         <basic name="deg">
         </basic>
         
      </attributes>
   </entity>
   
</entity-mappings>

 

  • <entity-mappings> : 엔티티 태그를 xml 파일로 허용하는 스키마를 정의한다.

  • <description> : 어플리케이션에 관한 description을 정의하는 태그

  • <entitiy> : 데이터베이스에서 테이블로 변환하기 원하는 엔티티 클래스를 작성하는 태그이다.

  • <table> : 테이블 이름을 정의하는 태그

  • <attribute> : 속성을 정의하는 태그 (테이블 내의 필드)

  • <id> : 테이블의 기본키를 정의하는 태그

  • <basic> : 테이블의 남은 속성을 정의하는 태그

  • <column-name> : 정의된 테이블의 필드 네임을 정의하는 태그

  • ....

Annotation을 이용해 맵핑하기

일반적으로 XML 파일은 특정한 요소를 환경설정하기 위해 사용되거나, 두 개의 다른 요소간의 specification을 맵핑하기 위해서 사용된다.
mapping.xml 파일을 작성하는 동안 POJO 클래스를 mapping.xml 파일에서의 entitiy 태그와 비교해야 하는 작업은 매우 비효율적이기 때문에 우리는 XML파일을 프레임워크와 분리시켜야 한다.

 

이러한 문제를 해결할 수 있는 방법이 Annotation이다.
Annotation
은 환경설정의 일부분으로 클래스, 속성, 메소드에 사용이 가능하다. Annotation '@'와 같은 기호로 시작한다.
Annotation은 클래스, 속성, 메소드가 선언되기 전에 선언된다. JPA의 모든 Annotation은 javax.persistence 패키지에 정의되어 있다.

 

 

Mapping 에 사용되는 Annotation

  • @Entitiy : 엔티티 또는 테이블로써 클래스를 선언하는 어노테이션을 의미한다.

  • @Table : 테이블의 이름을 선언하는 어노테이션을 의미한다.

  • @Id : 클래스내의 데이터를 식별하기위해 기본키와 같은 속성을 선언하는 어노테이션을 의미한다.

  • @ManyToMany : 연결된 테이블간에 다:다 관계를 정의하는 어노테이션이다.

  • @JoinColumn : 다:다, 1:다 연관에 사용되는 엔티티 컬렉션 또는 엔티티 연관을 명시하는 어노테이션이다.

  • ...

Annotation을 활용한 Mapping Example

import javax.persistence.*;

@Entity
@Table(name = "EMPLOYEE")
public class Employee {
   @Id @GeneratedValue
   @Column(name = "id")
   private int id;

   @Column(name = "first_name")
   private String firstName;

   @Column(name = "last_name")
   private String lastName;

   @Column(name = "salary")
   private int salary;  

   public Employee() {}
   
   public int getId() {
      return id;
   }
   
   public void setId( int id ) {
      this.id = id;
   }
   
   public String getFirstName() {
      return firstName;
   }
   
   public void setFirstName( String first_name ) {
      this.firstName = first_name;
   }
   
   public String getLastName() {
      return lastName;
   }
   
   public void setLastName( String last_name ) {
      this.lastName = last_name;
   }
   
   public int getSalary() {
      return salary;
   }
   
   public void setSalary( int salary ) {
      this.salary = salary;
   }
}

 

 

 

 

'Java' 카테고리의 다른 글

JUnit 사용법 및 테스트 [좌표 찍기]  (0) 2020.02.12
Java Servlet 이란??  (0) 2020.01.11
Comments