반응형
❓ JPA(Java Persistence API)
- 자바의 표준 데이터베이스 액세스 API
- ORM(Object-Relational Mapping, 객체-관계 매핑)을 이용한 데이터베이스 액세스 API
- JPA의 대표적인 구현체 : Hibernate(하이버네이트) 프레임워크
✔️ ORM
- 객체와 관계형 데이터베이스의 테이블을 매핑하여 데이터베이스 액세스를 지원하는 기술
- SQL을 직접 작성해서 데이터베이스 액세스를 수행하는 대신, 자바 객체를 사용해서 데이터베이스의 데이터에 대한 CRUD 작업을 처리할 수 있다.
- 데이터베이스 액세스 작업을 객체 지향적인 코드로 수행가능하다.
- 개발자는 직접적인 SQL 쿼리 작성 없이 데이터베이스 액세스 작업을 수행할 수 있기 때문에 개발과정이 단순해지고, 코드의 가독성이 높아진다.
- 데이터베이스와 애플리케이션 코드 간의 중간 계층 역할을 수행하기 때문에 데이터베이스가 변경되더라도 애플리케이션 코드를 변경할 필요가 없다.
❔ 참고) mybatis
- SQL 매퍼 프레임워크
- SQL-객체 매핑을 이용한 데이터베이스 액세스를 지원하는 구현체
📌 Spring Data와 Spring Data JPA
1. Spring Data
- 데이터베이스 액세스에 대한 추상화를 지원하는 프로젝트
- 데이터베이스와 관련된 다양한 하위 프로젝트를 가지고 있다.
➖ Spring Data의 주요 API
1. interface Repository<T, ID>
- 마크업 인터페이스
- 모든 데이터베이스 액세스를 수행하는 구현체는 이 인터페이스를 구현한다.
2. interface CrudRepository<T, ID> extends Repository<T, ID>
- CRUD 작업에 대한 추상화를 지원하는 인터페이스
- 주요 메소드
<S extends T> S save(S entity)
- 지정된 entity객체를 저장한다.
- 지정된 entity객체를 저장한다.
Optional<T> findById(ID id)
- 지정된 id로 데이터를 조회한다.
- 지정된 id로 데이터를 조회한다.
boolean existsById(ID id)
- 지정된 id에 해당하는 데이터가 존재하면 true를 반환한다.
- 지정된 id에 해당하는 데이터가 존재하면 true를 반환한다.
Iterable<T> findAll()
- 모든 데이터를 조회한다.
- 모든 데이터를 조회한다.
long count()
- 데이터의 총 갯수를 반환한다.
- 데이터의 총 갯수를 반환한다.
void deleteById(ID id)
- 지정된 아이디에 해당하는 데이터를 삭제한다.
- 지정된 아이디에 해당하는 데이터를 삭제한다.
void delete(T entity)
- 지정된 entity에 해당하는 데이터를 삭제한다.
- 지정된 entity에 해당하는 데이터를 삭제한다.
void deleteAll()
- 모든 데이터를 삭제한다.
- 모든 데이터를 삭제한다.
3. interface PagingAndSortingRepository<T, ID>
- 페이징처리와 정렬 작업에 대한 추상화를 지원하는 인터페이스
- 주요 메소드
Iterable<T> findAll(Sort sort)
- 데이터를 지정된 sort객체의 조건에 맞게 정렬해서 조회한다.
- 데이터를 지정된 sort객체의 조건에 맞게 정렬해서 조회한다.
Page<T> findAll(Pageable pageable)
- 데이터를 지정된 pageable객체의 조건에 맞게 페이징처리해서 조회한다.
2. Spring Data JPA
- Spring Data의 하위 프로젝트
- Spring Data에서 Repository 인터페이스로 추상화한 데이터베이스 액세스를 JPA의 구현체인 Hibernate를 이용해서 구현했다.
- 개발자는 자바 애플리케이션 구현 시,
JPA의 API를 직접 사용하는 대신 Spring Data와 Spring Data JPA에서 추상화해둔 API를 이용해서 데이터베이스 액세스를 수행한다.JPA를 직접적으로 사용하지 않고, Spring Data JPA를 통해 간접적으로 사용
- 결과적으로, JPA를 이용한 데이터베이스 액세스 작업을 보다 편리하게 사용할 수 있도록 지원한다.
💡 참고 이미지

< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >
🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Spring-JPA
'BackEnd > Spring' 카테고리의 다른 글
[Spring] Optional 처리 (0) | 2025.01.18 |
---|---|
[Spring] JUnit 단위테스트 (0) | 2025.01.18 |
[Spring] Thymeleaf 타임리프 (+JSP 비교) (0) | 2025.01.18 |
[Spring] @RequestBody +서버에 요청메시지 보내고 받는 방법(쿼리스트링, @PathVariable, FormData) (0) | 2025.01.18 |
[Spring] mybatis의 <ResultMap>, <association> 태그 (0) | 2025.01.18 |