Spring Data JPA를 간단하게 알아보기 전에 우선 JPA에 대해 간단하게 알아보자!
JPA는 왜 나오게 되었을까?
객체 모델링보다는 테이블 모델링
웹 서비스를 개발하고 운영하다 보면 피할 수 없는 문제가 데이터베이스를 다루는 일이다.
Spring project에서 MyBatis와 같은 SQL Mapper를 이용해서 데이터베이스의 쿼리를 작성하다보면 실제로 개발하는 시간보다 SQL를 다루는 시간이 더 많아지고,
그로인해 객체지향 프로그래밍이나 객체 모델링보다는 테이블 모델링에만 집중하게 되고 객체는 단순히 테이블에 맞추어 데이터을 전달하는 역할만 하게 된다.
SQL을 직접 다룰 때 발생하는 문제점을 "자바 ORM 표준 JPA 프로그래밍"책에서 요약한 내용으로는 아래와 같다고 나와있다.
- 진정한 의미의 게층 분할이 어렵다
- 엔티티를 신뢰할 수 없다.
- SQL에 의존적인 개발을 피하기 어렵다.
문제 해결책으로 등장한 ORM 프레임워크
객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계하여 객체와 관계형 데이터베이스 간의 차이를 중간에서 해결해주는 ORM(Object-Relational Mapping) 프레임워크가 등장했다.
JPA는 자바 진영의 ORM 기술 표준이다.
JPA란?
JPA는 Java Persistence API의 약자로, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.
JPA는 특정 기능을 하는 라이브러리가 아니고 단순히 명세이기 때문에 구현이 없다.
JPA를 정의한 javax.persistence 패키지의 대부분은 interface, enum, Exception 그리고 각종 Annotation으로 이루어져 있다.
package javax.persistence;
import ...
public interface EntityManager {
public void persist(Object entity);
public <T> T merge(T entity);
public void remove(Object entity);
public <T> T find(Class<T> entityClass, Object primaryKey);
// More interface methods...
}
Spring Data JPA란?
Spring에서 제공하는 모듈 중 하나로, 개발자가 JPA를 좀 더 쉽고 편하게 사용할 수 있도록 도와준다.
이는 JPA를 한 단계 추상 시킨 Repository라는 인터페이스를 제공함으로써 이루어진다.
사용자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어 Bean으로 등록해준다.
위 이미지는 Spring Data JPA의 전반적인 개념을 그림으로 표현한 것 이다.
Hibernate는 JPA의 구현체이다.
[참고]
https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories
'IT > 기록' 카테고리의 다른 글
[JPA] Entity Validation - null (0) | 2022.05.31 |
---|---|
[Flutter] ColorScheme class - 주요 색상만 지정하면 색깔을 알아서 뚝딱? (0) | 2022.05.20 |
VSCODE 단축키 (0) | 2022.05.19 |
VSCODE Open Keyboard Shortcuts으로 새파일/새폴더 단축키 설정하기 (0) | 2022.05.19 |
[Flutter] Button types (0) | 2022.05.19 |