티스토리 뷰

Web/정리글

JPA 정리

구름뭉치 2021. 8. 4. 09:00

ORM

Object-Relational Mapping, 객체 관계 매핑

  • 객체와 관계형 DB의 데이터를 자동으로 매핑해주는 것을 말한다.
    • 객체 지향 프로그래밍 _ OOP는 클래스를 사용해서, 관계형 DB는 테이블을 사용해서 설계한다.
    • 이런 차이로 인해 객체 모델과 관계형 모델 간 불일치가 존재할 수 있다.
    • ORM 프레임워크가 이 중간에서 SQL을 자동으로 생성해서 불일치를 해결한다.
  • DB 데이터 <----(ORM) Mapping----> Object
    • 객체를 통해 간접적으로 DB 데이터를 다룬다.
  • SQL 쿼리가 아니라 메서드로 데이터를 조작할 수 있다.
    • ORM이 객체간 관계를 바탕으로 sql을 자동으로 생성해주는 것이다.
  • 대표적인 ORM 프레임워크로는 Hibernate가 있다.

즉, ORM은 DB와 OOP사이에서 관계를 매핑해주는 기술이고 JPA는 그 ORM에 대한 기술을 명세한 것이다.

 

JDBC

JDBC는 DB에 접근할 수 있도록 JAVA가 제공하는 API이다. JDBC는 모든 JAVA Data Access 기술의 근간이다. JPA 등 모든 Persistence Framework는 내부적으로 JDBC API를 사용한다.

 

Spring Data JPA

JPA는 ORM을 위한 자바 EE 표준이고, Spring Data Jpa는 JPA를 더 쉽게 사용하기 위해 스프링에서 제공하는 프레임워크이다.

 

OOORepository에 extends JpaRepository를 통해 스프링 DATA JPA를 사용하거나  or  EntityManager를 통해 persist 등을 이용해 JPA를 직접 이용하거나 하게된다.

 

JPA

Java Persistence API, 자바 영속성 API

  • 자바 EE의 ORM 기술 표준으로 인터페이스 모음이다.
  • 실제로 동작하는 구현코드가 존재하는 것이 아니다. 이 인터페이스를 구현한 대표적인 오픈소스가 Hibernate이다.
    (Hibernate가 ORM 프레임워크)
  • 따라서 우리가 JPA를 사용하는건 JPA를 implements한 HIbernate의 구현코드를 사용하는 것이다.

JPA 동작과정

  • JPA는 애플리케이션과 JDBC 사이에서 동작한다.
  • 애플리케이션이 JPA를 사용하면, JPA 내부에서 JDBC API를 사용해서 SQL을 호출해서 DB와 통신한다.
    • JPA는 JDBC API를 근간으로 제공되고, Spring Data JPA는 JPA를 기반으로 제공된다.

 

INSERT : 회원가입시

  1. UserDTO로 회원 정보를 받고, 회원 정보로 회원 Entity를 만들어서 UserJpaRepository (JPA)에 전달해준다.
    • JPA : @Transaction em.persist(user);
      Spring Data JPA : @Transaction UserJpaRepo.save(user);
  2. JPA는 전달받은 Entity를 분석해서 관계를 파악해 INSERT SQL을 생성한다.
  3. 생성한 SQL을 JDBC API를 이용해서 DB에 보낸다.

회원이 저장된다.

 

FIND : 회원조회시

  1. User 엔티티의 PK값을 JPA에 전달해준다.
    • JPA : em.find(User.class, Id);
      Spring Data JPA : UserJpaRepo.findById(Id);
  2. JPA가 엔티티의 매핑 정보를 바탕으로 SELECT SQL을 생성한다.
  3. JDBC API를 통해 SQL문을 보낸다.
  4. DB에서 결과를 받아와서 반환한다.

회원이 조회된다.

 

이런식으로 JPA가 모든 요청의 쿼리를 전담하므로 DB테이블과 Object의 불일치를 해결해준다.

 

특징

  • 데이터를 객체로서 관리할 수 있기때문에 DB에 넣고 빼는거에는 신경쓰지 않고 비지니스 로직에만 집중할 수 있다. 또한 객체지향적으로 개발이 가능하다.
  • 자바 객체와 DB 테이블 간 매핑 정보를 바탕으로 SQL을 생성해준다.
  • 객체를 통해 쿼리를 짤수있는 jpql을 지원한다 (근데 별로라서 queryDSL을 쓴다, 오탈자에 대한 컴파일에러도 못발견해줌)
  • JPA는 성능향상을 위해 지연로딩, 즉시로딩과 같은 기법을 제공하는데 FETCH JOIN, Batch Size 등 다양한 방법을 통해 SQL을 직접 사용하는 것과 유사한 성능을 얻을 수 있다.
반응형

'Web > 정리글' 카테고리의 다른 글

HTTP vs. WebSocket 정리  (2) 2021.08.26
Json Web Token 정리  (0) 2021.08.16
Servlet 정리  (0) 2021.07.28
Spring MVC Architecture 정리  (0) 2021.07.27
DAO, DTO 정리  (0) 2021.07.18
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday