스프링 부트에서 JPA로 데이터베이스를 다뤄보자(1) - JPA이론

Wintering·2022년 6월 9일
0

JPA : 자바 표준 ORM

  • Mybatis, iBatis는 ORM이 아닌 SQL Mapper다.
    ORM은 객체를 매핑하는 것이고, SQL Mapper는 쿼리를 매핑한다.

JPA를 왜 써야하는가?

현대의 웹 애플리케이션에선 관계형 데이터베이스가 필수적인 요소이고, 그렇기 때문에 객체를 관계형 데이터베이스에서 관리하는 것이 무엇보다도 중요해졌다.

문제점1

현업 프로젝트의 대부분이 애플리케이션 코드보다 SQL로 가득차있다.
(관계형 데이터베이스가 SQL만 인식할 수 있기 때문 -> 각 테이블마다 기본적인 CRUD SQL을 매번 생성해야한다.)

ex) User 객체를 테이블로 만들기

insert into user (id, name, ...) values(...);
select * from user where ...;
update user set ... where...;
delete from user where...;

수 십, 수백의 테이블마다 이 테이블의 몇 배나 되는 SQL을 만들고 유지 보수해야만 한다.

문제점2

패러다임의 불일치
관계형 데이터 베이스는 어떻게 저장할지에 초점이 맞춰진 기술
객체 지향 프로그래밍은 기능과 속성을 한 곳에서 관리하는데에 초점이 맞춰진 기술

ex) 객체 지향 프로그래밍에서 부모 객체를 가져오는 방법?

User user = findUser();
Group group = user.getGroup();

user와 group이 부모-자식 관계임을 명확히 알 수 있음
하지만 데이터베이스가 추가되면?

User user = userDao.findUser();
Group group = groupDao.findGroup(user.getGroupId());

user와 group을 각각 따로 조회함.
상속, 1:N등 다양한 객체 모델링을 데이터베이스로는 구현할 수 없다.

이러한 문제점을 해결하기 위해 JPA가 등장


JPA

Spring Data JPA

  • JPA는 인터페이스로서 자바 표준명세서다. 인터페이스인 JPA를 사용하기 위해서는 구현체가 필요하고 대표적으로는 Hibernate, Eclipse, Link등이 있다. 하지만 Spring에서는 이 구현체들을 직접 다루지는 않고 구현체들을 조금 더 쉽게 사용하고자 추상화시킨 Spring Data JPA모듈을 이용한다.

    • JPA <- Hibernate <- Spring Data JPA

Spring Data JPA를 사용하는 이유

1. 구현체 교체의 용이성

Hibernate가 언젠가 수명을 다해서 새로운 JPA 구현체가 대세로 떠오른다면 Spring Data JPA를 사용중이었다면 아주 쉽게 교체가 가능하다. Spring Data JPA는 내부에서 구현체 매핑을 지원하기 때문.

2. 저장소 교체의 용이성

관계형 데이터베이스 외에 다른 저장소로 쉽게 교체하기 위함

실무에서의 JPA

  • 실무에서 JPA가 사용되지 못하는 가장 큰 이유는 '배우기 어렵다'라는 진입장벽 때문
    • 객체지향 프로그래밍과 관계형 데이터베이스를 둘 다 이해해야한다.
  • 다만 장점이 크다.
    • CRUD 쿼리를 직접 작성할 필요가 없다.
    • 부모-자식 관계 표현, 1:N 관계 표현, 상태와 행위를 한 곳에서 관리 하는 등 객체지향 프로그래밍을 쉽게 표현 가능
    • JPA에는 여러 성능 이슈 해결책을 이미 준비 해놓았기 때문에 이를 잘 활용하면 네이티브 쿼리 만큼의 퍼포먼스를 내느 것도 가능

0개의 댓글