[Java] JPA이해하기!

윤동환·2023년 2월 5일
0

Java

목록 보기
3/3
post-thumbnail

JPA란?

자바 표준 ORM(Object Relational Mapping)입니다.

자주 하는 오해
MyBatis는 SQL Mapper로써 쿼리를 매핑하며 ORM은 아닙니다.

매핑이 왜 필요할까?

SQL문으로만 코드를 작성시 단점

  • 반복적인 CRUD 코드
    기존 애플리케이션 코드를 구현할 때 관계형 데이터 베이스가 SQL만을 인식할 수 있었습니다. 때문에 반복적인 CRUD를 위한 SQL을 생성하야 했습니다.

  • 패러다임 불일치

    • 관계형 DB는 어떻게 데이터를 저장할지에 대해 초첨을 맞춘 기술입니다.

    • 객체지향 프로그래밍 언어는 매세지를 기반으로 기능과 속성을 한곳에서 관리하는 기술입니다.

      이렇게 서로 지향하는 부분이 달라 발생하는 문제를 패러다임 불일치라 합니다.

      JPA 탄생 배경
      객체지향 프로그래밍에서 부모가 되는 객체를 가져오는 방법

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

      이 코드를 보면 누가 보더라도 User가 부모 Group은 자식관계입니다.
      여기에 DB를 추가하면

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

      이처럼 User 따로 Group 따로 조회를 해야합니다. 이렇게 코드를 구현하게 되면 서로의 관계를 알기 어렵습니다. 상속, 1:N등 다양한 객체 모델링을 DB로 구현하기 어렵게 됩니다. 결국 웹 애플리케이션 개발은 DB모델링에 집중하게 됩니다.

      이런 문제점을 해결하기 위해 JPA가 등장합니다.

JPA는 패러다임을 일치시켜주는 기술!

위에서 설명하는 이유처럼 JPA는 서로 지향하는 바가 다른 2개의 영역을 중간에서 패러다임 일치를 시켜주기 위한 기술입니다.

개발자는 객체지향적으로 프로그래밍을 하고 JPA는 RDB에 맞게 SQL을 대신 생성하여 실행해줍니다.

JPA는 인터페이스로서 자바 표준 명세서입니다. 때문에 JPA를 사용하기위해선 구현체(ex. Hibernate)가 필요한데 Spring에선 Spring Data JPA를 권장합니다.

JPA와 Hibernate 간단한 정리 글

JPA와 Spring Data JPA관계
JPA <- Hibernate <- Spring Data JPA

Hibernate와 Spring Data JPA를 사용하는데에 큰 차이점은 없으나 Spring Data JPA를 권장하는 이유는
1. 구현체 교체의 용이성
2. 저장소 교체의 용이성

1 번의 의미는 Hibernate외에 다른 구현체로도 쉽게 교체가 가능합니다.
2 번의 의미는 RDB외에 다른 저장소로도 쉽게 교체가 가능합니다.
-> 개발자가 MongoDB로 교체가 필요하다면 Spring Data JPA에서 Spring Data MongoDB로 의존성만 교체하면 됩니다.

이러한 장점이 가능한 이유
Spring Data의 하위 프로젝트들은 기본적인 CRUD 인터페이스가 같기때문
-> 즉, Spring Data JPA, Spring Data Redis, Spring Data MongoDB 등등 Spring Data의 하위 프로젝트들은 save( ), findAll, findOne( ) 등을 인터페이스로 갖고 있어 기능변경은 할 필요가 없습니다.

profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글