ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [24] Spring Data : ORM, JPA, Spring-Data-JPA 개요
    Spring/Spring boot 2020. 7. 13. 15:53
    반응형

    [Object Relational Mapping]

    Object Relational Mapping (ORM)은 객체와 DB table을 mapping 할 때 발생하는 다음 표와 같은 개념적 불일치를 해결하기 위한 solution을 제공하는 framework입니다. 

    구분 Class RDB
    Data Type Object, primitive type, reference type... Integer, Char...
    상속(Inheritance) 개념 있음 없음
    Identity hash code, equals method() primary key

     

     

     


    [Java Persistence API]

    Java Persistence[각주:1] API는 ORM 구현체(Hibernate, Eclipse Link ...)를 사용할 수 있도록 제공되는 Java 표준 명세서(interface)입니다. JPA에서 ORM 구현체에 대한 모든 설정을 할 수 있는 것은 아닙니다. 하지만 ORM 관련 설정을 해야 할 필요할 때 제공하는 메커니즘이 존재하므로 크게 문제될 것은 없습니다.

     

     

     

     


    [Spring Data JPA]

    JPA를 매우 쉽게 사용할 수 있도록 Spring Data로 추상화시켜놓은 module입니다.

     

    Spring Data JPASpring Data JPA -> Hibernate -> JPA 순서로 구현되어 있고, Datasource()를 사용 하므로 JPA에 정의된 기능과 거의 대부분의 DataSource 기능을 사용할 수 있습니다.

     

    Spring Data 사용 시 장점

    • 구현체인 Hibernate를 직접 사용하지 않고 Spring Data JPA로 한번 추상화하여 사용기 때문에 구현체의 변경이 필요할 경우 쉽게 교체할 수 있습니다.
    • Spring Data의 하위 project들은 동일한 interface를 상속받기 때문에 구현되는 method(save(), findAll(), findOne()...)도 동일합니다. 따라서 트래픽 증가 등으로 RDB에서 mongoDB로 전환해야 한다면 spring-data-jpa에서 spring-data-MongoDB로 의존성만 변경하면 쉽게 전환할 수 있게 됩니다.

     

    Spring Data JPA를 사용하기 위해서는 다음의 의존성을 추가해줘야 합니다. pom.xml을 열어 dependencies tag 안에 추가해줍니다.

    <dependencies>
    
    	...
    
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-data-jpa</artifactId>
    	</dependency>
    
    	...
    
    </dependencies>

     

    spring-boot-stater-data-jpa 의존성 구조를 살펴보면 다음과 같습니다. Spring Data JPA 제공되는 기능이 all in one이 되는 것을 확인할 수 있습니다.

     

    spring-boot-stater-data-jpa

    • spring-boot-starter-jdbc : JDBC Template, DataSource  bean 등록
    • Hibernate-core : jpa 구현체
    • spring-data-jpa : spring-orm 통해 jpa 사용합니다.

     

    JPA를 사용하면

    1. CRUD query를 직접 작성할 필요가 없습니다.
    2. 더이상 RDB를 신경쓰지 않아도 되므로 Project를 객체지향적으로 설계 및 관리할 수 있습니다. 이는 유지보수의 편의성으로 이어집니다.
    3. 성능관련 이슈에 대한 해결책이 이미 준비되어있어 native query만큼의 성능을 낼 수 있습니다.

     

     

     

     

     


     

    1. Persistence(영속성)

      영속성은 data를 생성 또는 관리하는 application이 종료되더라도 data의 상태가 유지되는 특성을 의미합니다. 영속성은 file system, relational database 등을 활용하여 구현합니다. 영속성을 갖지 않는 data는 휘발성 memory상에서만 존재하기 때문에 application 종료하면 그 상태를 모두 잃어버리게 됩니다. 영속성은 data의 상태를 유지하여 application 종료와 재개를 자유롭게 해줍니다.

      [본문으로]

    댓글

Designed by Tistory.