[Java Springboot] JPA와 MyBatis

2023. 5. 21. 23:45JAVA(자바)

1. JPA와 MyBatis

ㄱ. 특징

(1) 정의 및 배경

- 관계형 데이터베이스를 이용하는 프로젝트에서 객체 지향 프로그래밍(object-oriented programming: OOP)을 구현하기 위해 나온 해결책 중 하나가 바로 JPA라는 자바 표준 ORM 기술이다. 

- 쿠팡, 우아한 형제들, NHN 등 자사 서비스를 개발하는 곳에서는 Spring과 JPA를 전사 표준으로 사용하고 있다. 

 

(2) JPA와 MyBatis 차이 

- JPA는 ORM이고, MyBatis나 iBatis는 SQL Mapper이다. 

ORM JPA
쿼리를 매핑 객체를 매핑
JPA가 점점 더 많이 사용되고 있으므로 JPA를 알아두는 것이 매우 좋습니다!

(3) SQL Mapper를 사용하였을 때의 문제점

◈ 반복 작업

- 실제 현업에서 사용하는 테이블은 무수히 많은데 그만큼의 테이블만큼 몇배의 SQL을 만들고 유지보수 해야한다. 

 

◈ 패러다임 불일치

- 관계형 데이터베이스어떻게 데이터를 저장할지에 초점이 맞춰진 기술이다. 

- 객체지향 언어는 메시지를 기반으로 기능과 속성을 한 곳에서 관리하는 기술이다. 

- 관계형 데이터베이스로 객체 지향을 표현하기는 쉽지 않다.

- 객체를 데이터베이스에 저장하려고 하니 여러 문제가 발생한다. 이를 패러다임 불일치라고 한다.

 

※ Child와 Parent은 부모-자식 관계

//데이터베이스가 추가되지 않은 코드 
Child child = findChild();
Parent parent = child.getParent();
//데이터베이스 추가 코드 
Child child = childDao.findChild();
Parent parent = parentDao.findParent(child.getParentId());

- Child 따로 Parent 따로 조회하게 된다. 객체 모델링을 데이터베이스로는 구현할 수 없고 ChildParent 의 관계를 알 수가 없다. 

- Spring Data JPA, Spring Data Redis, Spring Data MongoDB 등 Spring Data의 하위 프로젝트들은 save(), findAll, findOne() 등을 인터페이스로 갖고 있다. 그렇기 때문에 저장소가 교체되어도 기본적인 기능은 변경하지 않아도 됨!

 

ㄴ. 구현체 

(1) 정의

- 인터페이스인 JPA를 사용하기 위해서는 구현체가 필요한데 대표적으로 Hibernate, Eclipse, Link 등이 있다.

- 구현체들을 좀 더 쉽게 사용하고자 추상화시킨 것이 Spring Data JPA라는 모듈이다. Hibernate를 쓰는 것과 Spring Data JPA를 쓰는 것 사이에는 큰 차이는 없지만 스프링 진영에서는 Spring Data JPA를 개발했고 권장하고 있다. 

 

(2) Spring Data JPA의 장점

① 구현체 교체의 용이성 => Spring Data JPA 내부에서 구현체 매핑을 지원하기 때문② 저장소 교체의 용이성 => Spring Data의 하위 프로젝트들은 기본적인 CRUD의 인터페이스가 같기 때문에 의존성만 교체하면 되고 기본적인 기능은 변경하지 않아도 된다.