[Spring] JPA

SeokHun·2021년 1월 12일
0

Spring

목록 보기
3/4

JPA (Java Persistence API)

JAVA에서 제공하는 DB 테이블과 자바 객체 사이의 매핑을 처리해주는 ORM 기술의 표준

자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스라고 할 수 있다

  • JPA는 특정 기능을 하는 라이브러리가 아닌 인터페이스이다.
    → ORM을 사용하기 위한 인터페이스
    → SQL이 아닌 자바 클래스와 DB 테이블을 매핑한다

Persistence (영속화 작업)

개발을 하다보면 데이터를 생성한 프로그램을 종료했을 때 데이터가 메모리에서만 존재했기 때문에 다시 데이터를 생성해야 하는 불편함을 겪은 적이 있었을 것이다

Persistence는 한 마디로 별도의 기억 장치에 데이터를 보존하는 것이다

Spring에서 데이터를 데이터베이스 저장하는 방법이 3가지가 있다

  1. JDBC (java)
  2. Spring JDBC
  3. Persistence Framework

Persistence Framework

데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들의 집합이다

Java를 통해 개발을 하다보면 정보들을 객체에 담아 보관하게 된다

객체들의 정보를 저장하기 위해 데이터베이스 연결할 때의 어려움 발생
참고 : JPA를 사용하는 이유

Persistence Framework는 JDBC 프로그래밍의 어려움과는 달리 간단하게 데이터베이스와 연동되는 시스템을 개발할 수 있다

종류

  • JPA (ORM)
  • Hibernate (ORM)
  • Mybatis (SQL mapper)

ORM (Object-Relation Mapping)

객체와 관계형 데이터베이스의 데이터를 자동으로 Mapping 해주는 것이다

객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 객체 모델과 관계형 모델 간에 불일치를 해결한다

  • 객체 지향적인 코드로 인해 직관적이고 가독성이 높다
    → 재사용 및 유지보수에 용이

  • DBMS에 대한 종속성이 줄어든다
    → SQL 쿼리가 아닌 메서드로 데이터를 조작할 수 있다

SQL Mapper

객체와 관계형 데이터베이스의 데이터를 개발자가 SQL문으로 직접 작성하여 Mapping 시킬 수 있는 것이다

개발자가 작성한 SQL문으로 해당되는 ROW를 읽어 값을 객체화 시켜 사용 가능하게 만들어준다

  • SQL의 세부적인 내용 변경 시 유리하다

  • DBMS에 대한 종속적이다

JDBC

JDBC는 DB에 접근할 수 있도록 자바에서 제공하는 API이다.

모든 JAVA Data Access 기술의 근간이다
⇒ 모든 Persistance Framework는 내부적으로 JDBC API를 이용한다.


Spring Data JPA

JPA를 쉽게 사용하기 위해 스프링에서 제공하고 있는 Framework
Spring.io

구현체는 Hibernate를 사용하며 JPA는 Entity Manager로 감싸 사용한다

  • CRUD 처리를 위한 공통 인터페이스를 제공한다

  • 인터페이스만 작성하면 동적으로 구현체를 생성해서 주입해준다
    → 인터페이스만 작성해도 개발을 완료할 수 있다

사용 예시

패스트캠퍼스 자바 올인원 강의

스프링 데이터 JPA 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

코드 및 설명

import com.fasterxml.jackson.annotation.JsonInclude;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Transient;

// Identifier로 구분이 되는 객체들 / 관계형 데이터베이스 에서도 각 객체를 구분
@Entity
public class MenuItem {
  // Entity 의 ID를 뜻한다.
  @Id
  // 자동으로 생성 / 관리
  @GeneratedValue
  private Long id;

  private Long restaurantId;

  private String name;

  // 엔티티 클래스 내의 특정 변수를 영속 필드에서 제외
  @Transient
  @JsonInclude(JsonInclude.Include.NON_DEFAULT)
  private boolean destroy;
}

H2 Database 사용

implementation 'com.h2database:h2'

참조

Spring.io

JPA는 대체 뭘까?

JPA를 사용하는 이유

JPA, Hibernate, 그리고 Spring Data JPA의 차이점

0개의 댓글