관계형 데이터베이스를 관리하는 데 SQL이 필수이다.
개발자가 아무리 자바 클래스를 아름답게 설계해도, SQL을 통해야 데이터베이스에 저장하고 조회가 가능한 것이다.
그렇게되니 CRUD와 관련된 반복적인 SQL을 계속 쓰게 되었다.

또한 관계형 데이터베이스는 데이터를 어떻게 저장할지에 초점이 맞춰져있고,
JAVA의 경우 객체지향 프로그래밍 언어로 기능과 속성을 한 곳에서 관리하는 기술이다.
언어의 패러다임이 서로 다르기 때문에 관계형 데이터베이스로는 객체지향을 표현하기가 쉽지 않았다.

예를 들어 Group 안에 있는 User가 존재한다고 가정하자.
사용자로서 User의 Group이 어디있는지 찾고 싶다.

  1. 객체지향 프로그래밍 언어(JAVA)일 경우

    User user = findUser();
    Groupt group = user.getGroup();
  2. 관계형 데이터베이스일 경우

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

객체지향적 성격을 띌 경우 user를 사용하여 바로 그룹의 정보를 알아 낼 수 있지만,
관계형 데이터베이스일 경우 user를 찾은 뒤, Group 데이터베이스에서 따로 또 조회 해야 하는 것이다. User와 Group의 관게를 모르기 때문이다.

이러한 문제를 해결하기 위해 JPA가 등장하게 되었다.

즉, 개발자는 객체지향적으로 프로그래밍을 하면 JPA가 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행하는 것이다.

Spring Data JPA

JPA는 인터페이스로서 자바 표준명세서이다. 인터페이스인 JPA를 사용하기 위해서는 구현체가 필요로 한데, 대표적으로 Hibernate, Eclipse, Link 등이 있다. Spring에서는 해당 구현체들을 좀 더 쉽게 사용하고자 추상화 시킨 Spring Data JPA라는 모듈을 이용하여 JPA 기술을 다룬다.
이들의 관계를 보면 다음과 같다.

  • JPAHibernateSpring Data JPA

Spring Data JPA의 장점

  • 구현체 교체의 용이성

현재는 Hibernate를 사용하고 있지만, 후에 새로운 기술이 나왔을 때 다른 구현체로 쉽게 교체가 가능하다.

  • 저장소 교체의 용이성

관계형 데이터베이스 외에 다른 저장소로 쉽게 교체가 가능하다.

profile
블로그 이사 했습니다! 🏠 ⤵

0개의 댓글